본문 바로가기
요즘공부

[도커&쿠버네티스] 교육 1일차_도커 설치 및 httpd 컨테이너 생성,삭제

by 게으른 피글렛 2025. 2. 16.
반응형

1. docker 설치

우분투 서버에 docker 설치

https://docs.docker.com/engine/install/ubuntu/

 

<도커설치 방법>

1. Set up Docker's "apt" repository.

# Add Docker's official GPG key:
$ sudo apt-get update
$ sudo apt-get install ca-certificates curl
$ sudo install -m 0755 -d /etc/apt/keyrings
$ sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
$ sudo chmod a+r /etc/apt/keyrings/docker.asc

# Add the repository to Apt sources:
$ echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

$ sudo apt-get update

 

2. Install the Docker packages

$ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

 

3. Verify that the installation is successful by running the hello-world image:

#설치 여부 확인 명령어
$ sudo docker run hello-world

# 설치가 되었다면 아래와 같이 출력됩니다!
vagrant@ubuntu2204:/etc/apt/keyrings$ sudo docker run hello-world

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

 

 

2. docker를 활용하여 httpd 컨테이너 생성실행

 

<ip 정보 확인방법>

$ ip addr

 

<httpd 컨테이너 생성>

# 이름이 apache 인 httpd 컨테이너 생성
vagrant@ubuntu2204:~$ sudo docker run -d --name apache httpd
ddc4fb87d7a8e3c25129f890dacd2ed73483f6f1cadad6e816e0d1e9543d2fa0

# 생성된 컨테이너 정보 확인
vagrant@ubuntu2204:~$ sudo docker container ps
CONTAINER ID   IMAGE     COMMAND              CREATED          STATUS          PORTS     NAMES
ddc4fb87d7a8   httpd     "httpd-foreground"   16 seconds ago   Up 16 seconds   80/tcp    apache

# 이름이 apache2 인 httpd 컨테이너 생성
vagrant@ubuntu2204:~$ sudo docker run -d --name apache2 httpd
498616d4931c6261b0fa19f1a530a3f3193e7d11dbf06b06b7e706132fb3c8ac

# 생성된 컨테이너 정보 확인
vagrant@ubuntu2204:~$ sudo docker container ps
CONTAINER ID   IMAGE     COMMAND              CREATED              STATUS              PORTS     NAMES
498616d4931c   httpd     "httpd-foreground"   11 seconds ago       Up 11 seconds       80/tcp    apache2
ddc4fb87d7a8   httpd     "httpd-foreground"   About a minute ago   Up About a minute   80/tcp    apache

# 서버 응답 내용 확인
#내 서버의 ip가 172.17.0.1 이므로 2부터 차례로 입력해보면 나온다
# apache컨테이너 안에 /usr/local/apache2/htdocs/index.html 파일 정보를 가져옴
vagrant@ubuntu2204:~$ curl 172.17.0.2
<html><body><h1>It works!</h1></body></html>
vagrant@ubuntu2204:~$ curl 172.17.0.3
<html><body><h1>It works!</h1></body></html>

#apache 컨테이너에 접속
vagrant@ubuntu2204:~$ sudo docker exec -it apache /bin/bash

#apache컨테이너로 접속했으나, 이동된 위치에 apache2라고 되어있음.
#이는 파일명으로 잘 이동되었는가는 hostname으로 확인 해야하는 것같음
root@ddc4fb87d7a8:/usr/local/apache2# hostname
ddc4fb87d7a8

#bin 위치로 이동
root@ddc4fb87d7a8:/usr/local/apache2# cd bin

#bin 내 파일들 확인
root@ddc4fb87d7a8:/usr/local/apache2/bin# ls
ab         checkgid   envvars-std   htdbm     httpd       rotatelogs
apachectl  dbmmanage  fcgistarter   htdigest  httxt2dbm   suexec
apxs       envvars    htcacheclean  htpasswd  logresolve
root@ddc4fb87d7a8:/usr/local/apache2/bin# ls httpd
httpd
root@ddc4fb87d7a8:/usr/local/apache2/bin# ldd httpd
        linux-vdso.so.1 (0x00007ffcd37e5000)
        libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007fe6a39f6000)
        libaprutil-1.so.0 => /lib/x86_64-linux-gnu/libaprutil-1.so.0 (0x00007fe6a39c8000)
        libapr-1.so.0 => /lib/x86_64-linux-gnu/libapr-1.so.0 (0x00007fe6a398b000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fe6a37aa000)
        libexpat.so.1 => /lib/x86_64-linux-gnu/libexpat.so.1 (0x00007fe6a377f000)
        libcrypt.so.1 => /lib/x86_64-linux-gnu/libcrypt.so.1 (0x00007fe6a3741000)
        libuuid.so.1 => /lib/x86_64-linux-gnu/libuuid.so.1 (0x00007fe6a3737000)
        /lib64/ld-linux-x86-64.so.2 (0x00007fe6a3b1e000)


# 해당 apache 컨테이너에서 명령어를 어떤것을 써야하는지 확인
# Debian -> apt(우분투명령어) 사용할 수 있음
root@ddc4fb87d7a8:/usr/local/apache2/bin# cat /etc/issue
Debian GNU/Linux 12 \n \l

# index.html 파일 내용 확인
# curl 172.17.0.2 내용과 동일함
root@ddc4fb87d7a8:/usr/local/apache2/bin# cd /usr/local/apache2/htdocs
root@ddc4fb87d7a8:/usr/local/apache2/htdocs# ls
index.html
root@ddc4fb87d7a8:/usr/local/apache2/htdocs# cat index.html
<html><body><h1>It works!</h1></body></html>

 

 

<httpd 컨테이너에 명령어 실행 여부 확인 및 설치>

# 아파치에 관련 명령어들이 설치되어있지 않음 
root@ddc4fb87d7a8:/usr/local/apache2/htdocs# vi
bash: vi: command not found
root@ddc4fb87d7a8:/usr/local/apache2/htdocs# nano
bash: nano: command not found
root@ddc4fb87d7a8:/usr/local/apache2/htdocs# ping google.com
bash: ping: command not found

#업데이트를 한 후 명령어 설치 가능함 (vi / namo 등)
# 설치시 최소한으로 필요한 것만 설치할 것
root@ddc4fb87d7a8:/usr/local/apache2/htdocs# apt update
root@ddc4fb87d7a8:/usr/local/apache2/htdocs# apt install nano
root@ddc4fb87d7a8:/usr/local/apache2/htdocs# apt install vim
root@ddc4fb87d7a8:/usr/local/apache2/htdocs# apt update


#내용 수정
root@ddc4fb87d7a8:/usr/local/apache2/htdocs# vi index.html

 

 

It worker -> hello-docker로 수정함

 

저장 후 exit으로 나가기

curl 명령어로 입력해보면 해당 내용이 변경된 것을 확인 할 수 있음

vagrant@ubuntu2204:~$ curl 172.17.0.2
<html><body><h1>hello-docker</h1></body></html>

 

 

3. 실행되고 있는 docker, 컨테이너 중지 및 삭제

# docker에 생성되어있는 컨테이너 확인
# ID 확인
vagrant@ubuntu2204:~$ docker ps
CONTAINER ID   IMAGE     COMMAND              CREATED          STATUS          PORTS     NAMES
a773327c7ada   httpd     "httpd-foreground"   6 seconds ago    Up 5 seconds    80/tcp    apache2
6cfc022180ab   httpd     "httpd-foreground"   11 seconds ago   Up 10 seconds   80/tcp    apache

 

 

<컨테이너 이름으로 삭제>

실행되고 있는 컨테이너 중지 및 삭제

컨테이너는 중지 후 삭제를 진행해야함

# 중지 없이 삭제할 경우 에러 표출
vagrant@ubuntu2204:~$ docker rm apache
Error response from daemon: cannot remove container "/apache": container is running: stop the container before removing or force remove

#apache 중지
vagrant@ubuntu2204:~$ docker stop apache

#실행 컨테이너 항목
vagrant@ubuntu2204:~$ docker ps
CONTAINER ID   IMAGE     COMMAND              CREATED         STATUS         PORTS     NAMES
a773327c7ada   httpd     "httpd-foreground"   2 minutes ago   Up 2 minutes   80/tcp    apache2

#apache 컨테이너 삭제
vagrant@ubuntu2204:~$ docker rm apache
apache

#모든 컨테이너 정보 확인
#apache 컨테이너 정보 없음
vagrant@ubuntu2204:~$ docker ps -a
CONTAINER ID   IMAGE     COMMAND              CREATED         STATUS         PORTS     NAMES
a773327c7ada   httpd     "httpd-foreground"   5 minutes ago   Up 5 minutes   80/tcp    apache2

 

< 컨테이너 ID로 삭제 방법>

#컨테이너 중지
vagrant@ubuntu2204:~$ docker stop a773327c7ada
a773327c7ada
vagrant@ubuntu2204:~$ docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

#컨테이너 삭제
vagrant@ubuntu2204:~$ docker rm a773327c7ada
a773327c7ada
vagrant@ubuntu2204:~$ docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

 

 

<컨테이너 삭제를 쉽게 하는 방법>

#all_containers_rm -> 명령어 만들기, docker stop 후 docker rm 실행하도록 명령어 생성
$ alias all_containers_rm='docker stop $(docker ps -q) ; docker rm $(docker ps -aq)'

 

4. httpd 컨테이너 생성, 실행, 일시정지, 중지, 삭제

#myapache 컨테이너 생성(실행이 아님), 생성시 image를 최신버전으로 생성,
vagrant@ubuntu2204:~$ docker container create --name myapache httpd:latest
6eedde8bcd81bb16eea23ea9c267f83081576780ed1d862f9987e889b8e47ace

#생성했으나, 실행은 되지 않음
vagrant@ubuntu2204:~$ docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

#생성됨을 확인
vagrant@ubuntu2204:~$ docker ps -a
CONTAINER ID   IMAGE          COMMAND              CREATED          STATUS    PORTS     NAMES
6eedde8bcd81   httpd:latest   "httpd-foreground"   15 seconds ago   Created             myapache


#docker run -d --name apache httpd 명령어를 썼을때와 차이점
vagrant@ubuntu2204:~$ docker ps -a
CONTAINER ID   IMAGE          COMMAND              CREATED              STATUS          PORTS     NAMES
bff670a0cce9   httpd          "httpd-foreground"   10 seconds ago       Up 10 seconds   80/tcp    apache
6eedde8bcd81   httpd:latest   "httpd-foreground"   About a minute ago   Created                   myapache

#myapache 실행
vagrant@ubuntu2204:~$ docker start myapache
myapache

#myapache 실행 확인
vagrant@ubuntu2204:~$ docker ps
CONTAINER ID   IMAGE          COMMAND              CREATED         STATUS         PORTS     NAMES
6eedde8bcd81   httpd:latest   "httpd-foreground"   4 minutes ago   Up 5 seconds   80/tcp    myapache

#myapache 일시정지
vagrant@ubuntu2204:~$ docker pause myapache
myapache
vagrant@ubuntu2204:~$ docker ps
CONTAINER ID   IMAGE          COMMAND              CREATED          STATUS                   PORTS     NAMES
6ba4c6fc7d98   httpd:latest   "httpd-foreground"   23 seconds ago   Up 12 seconds (Paused)   80/tcp    myapache

#myapache 중지
vagrant@ubuntu2204:~$ docker stop myapache
myapache
vagrant@ubuntu2204:~$ docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

#myapache 삭제
vagrant@ubuntu2204:~$ docker container rm myapache
myapache
vagrant@ubuntu2204:~$ docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
반응형