도커 스터디 1일차

도커 스터디 1주차

2.2 도커 컨테이너 다루기

2.2.1 컨테이너 생성

# 도커 엔진의 버전을 확인
PS C:\Users\Playdata> docker -v
Docker version 20.10.12, build e91ed57
# 컨테이너 생성 명령어
PS C:\Users\Playdata> docker run -i -t ubuntu:14.04
Unable to find image 'ubuntu:14.04' locally
14.04: Pulling from library/ubuntu
2e6e20c8e2e6: Pull complete
0551a797c01d: Pull complete
512123a864da: Pull complete
Digest: sha256:60840958b25b5947b11d7a274274dc48ab32a2f5d18527f5dae2962b64269a3a
Status: Downloaded newer image for ubuntu:14.04

ubuntu:14.04는 컨테이너를 생성하기위한 이미지의 이름이며

-i -t옵션은 컨테이너와 상호(interactive) 입출력을 가능하게 한다.

이 두가지 옵션이 없을 경우 셸을 정상적으로 사용할 수 없습니다.

이유 : -i는 상호 입출력, -t는 활성화해서 배시(bash)셸을 사용하도록 컨테이너에서 설정

엔진이 존재하지 않으므로 도커 중앙 이미지 저장소인 도커 허브에서 자동으로 이미지를 내려받는다.

root@0d9a3f1e061d:/# ls
bin   dev  home  lib64  mnt  proc  run   srv  tmp  var
boot  etc  lib   media  opt  root  sbin  sys  usr
root@0d9a3f1e061d:/# exit
exit
# exit or ctrl+d

컨테이너 내부에서 빠져나오면서 동시에 정지시키는 방법

  • exit 말고 ctrl+D도 이용가능

컨테이너를 정지시키지 않고 빠져나오는 방법

Ctrl+P, Q -> 애플리케이션 개발 목적으로 만들어짐

컨테이너의 기본 사용자는 root고 @ 뒤에는 호스 트 이름이며 무작위 해쉬값이 생성되며 최대 16진수 헤시값이 생성됩니다.

# docker pull 이미지
PS C:\Users\Playdata> docker pull centos:7
7: Pulling from library/centos
2d473b07cdd5: Pull complete
Digest: sha256:c73f515d06b0fa07bb18d8202035e739a494ce760aa73129f60f4bf2bd22b407
Status: Downloaded newer image for centos:7
docker.io/library/centos:7
# docker images - 이전에 내려받은 이미지의 목록을 보여줌
PS C:\Users\Playdata> docker images
REPOSITORY               TAG       IMAGE ID       CREATED         SIZE
docker/getting-started   latest    bd9a9f733898   2 weeks ago     28.8MB
centos                   7         eeb6ee3f44bd   5 months ago    204MB
ubuntu                   14.04     13b66b487594   11 months ago   197MB
# -name 옵션에는 컨테이너의 이름을 설정하여 pull과같은 명령어로 사용가능
PS C:\Users\Playdata> docker create -i -t --name mycentos centos:7
963a6e1e795a30e8eaeba12ed8c0ab6b55e9e4e2b20df03695f79a4ebd88bace
# inspect로 도커 아이디와 다른 특이 사항 확인 가능. or docker inspect 이미지이름 | grep Id
PS C:\Users\Playdata> docker inspect mycentos
[
    {
        "Id": "963a6e1e795a30e8eaeba12ed8c0ab6b55e9e4e2b20df03695f79a4ebd88bace",
  • 도커 이미지를 내려받을땐 docker pull centos:7 처럼 사용한다.

    # 컨테이너 시작
    PS C:\Users\Playdata> docker start mycentos
    mycentos
    # 컨테이너 접속
    PS C:\Users\Playdata> docker attach mycentos
    [root@963a6e1e795a /]#

2.2.2 컨테이너 목록 확인

# docker ps 명령어는 정지되지 않은 컨테이너만 출력한다. 정지된 컨테이너를 포함한 모든 컨테이너를 출력하려면 -a 작성
PS C:\Users\Playdata> docker ps(-a)
CONTAINER ID   IMAGE                    COMMAND                  CREATED          STATUS          PORTS                NAMES
963a6e1e795a   centos:7                 "/bin/bash"              15 minutes ago   Up 8 minutes                         mycentos
5e52d541c526   docker/getting-started   "/docker-entrypoint.…"   39 minutes ago   Up 39 minutes   0.0.0.0:80->80/tcp   wonderful_mclean

# COMMAND : 커맨드는 컨테이너가 시작될 때 실행될 명령어입니다.
PS C:\> docker run -i -t ubuntu:14.04 echo hello world!
hello world!

#
  • CONTAINER ID : 컨테이너에게 자동으로 할당되는 고유한 ID
  • IMAGE : 컨테이너를 생성할 때 사용된 이미지의 이름
  • COMMAND : 커맨드는 컨테이너가 시작될 때 실행될 명령어입니다. 커맨드는 대부분의 이미지에 미리 내장돼어있기 때문에 별도로 설정할 필요가 없습니다. 컨테이너가 시작될 때 /bin/bash 명령어가 실행됐으므로 상호 입출력이 가능한 셀 환경을 사용할 수 있다.
  • CREATED : 컨테이너가 생성되고 난 뒤 흐른 시간
  • STATUS : 컨테이너의 상태를 나타내며, 컨테이너가 실행 중임을 나타내는 'UP', 종료된 상태인 'Exited', 일시 중지된 상태인 'Pause' 등이 있다.
  • PORTS : 컨테이너가 개방한 포트와 호스트에 연결한 포트를 나열합니다.
  • NAMES : 컨테이너의 고유한 이름입니다.
# 컨테이너 이름 확인하기
PS C:\> docker ps -a
CONTAINER ID   IMAGE                    COMMAND                  CREATED             STATUS                      PORTS              NAMES
3f9c6dacb04   ubuntu:14.04             "echo hello world!"      28 minutes ago      Exited (0) 28 minutes ago             gallant_mendel
..
# 컨테이너 이름 바꾸기
PS C:\> docker rename gallant_mendel my_container

# 컨테이너 이름 바꼇는지 확인
PS C:\> docker ps -a
CONTAINER ID   IMAGE                    COMMAND                  CREATED          STATUS                      PORTS                NAMES
3ef9c6dacb04   ubuntu:14.04             "echo hello world!"      29 minutes ago   Exited (0) 29 minutes ago                        my_container
..

2.2.3 컨테이너 삭제

# 컨테이너 제거
PS C:\> docker rm my_container
my_container
PS C:\> docker ps -a
CONTAINER ID   IMAGE                    COMMAND                  CREATED       STATUS                   PORTS                NAMES
963a6e1e795a   centos:7                 "/bin/bash"              2 hours ago   Up About an hour                              mycentos
0d9a3f1e061d   ubuntu:14.04             "/bin/bash"              2 hours ago   Exited (0) 2 hours ago                        happy_jackson
5e52d541c526   docker/getting-started   "/docker-entrypoint.…"   2 hours ago   Up 2 hours               0.0.0.0:80->80/tcp   wonderful_mclean

# docker rm mycentos
Error response from daemon: You cannot remove a running container 963a6e1e795a30e8eaeba12ed8c0ab6b55e9e4e2b20df03695f79a4ebd88bace. Stop the container before attempting removal or force remove
- 실행 중이므로 삭제할 수 없음
# docker stop mycentos
# docker rm mycentos  
mycentos 제거 성공
# 두 가지 경우를 합쳐서 쓰는 용어
docker rm -f mycentos
# prune은 모든 컨테이너를 삭제할 수 있다.
PS C:\> docker container prune
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
Deleted Containers:
0d9a3f1e061d5ad93bb27a089b477689f3a383296954adf6ddc64317564d5828

Total reclaimed space: 8B
# docker ps 명령어의 -a옵션과 -q옵션을 조합해 컨테이너를 삭제할 수도 있습니다. -a는 컨테이너 상태와 관계 없이 모든 컨테이너를, -q는 컨테이너의 ID만 출력하는 역할
PS C:\> docker ps -a -q
5e52d541c526
# 컨테이너의 실행 상태와 관계없이 모든 컨테이너를 정지하고 삭제.
PS C:\> docker stop $(docker ps -a -q)
5e52d541c526
PS C:\> docker rm $(docker ps -a -q)
5e52d541c526
  • 컨테이너를 삭제하고 확인하는 명령어를 입력해서 확인했습니다.

2.2.4 컨테이너를 외부에 노출

# 기본적으로 도커는 컨테이너에 172.17.0.x의 IP를 순차적으로 할당합니다. 컨테이너를 새롭게 생성한 후 ifconfig 명령어로 컨테이너의 네트워크 인터페이스를 확인
PS C:\> docker run -i -t --name network_test ubuntu:14.04
root@8b9b255f193d:/# ifconfig
eth0      Link encap:Ethernet  HWaddr 02:42:ac:11:00:02
          inet addr:172.17.0.2  Bcast:172.17.255.255  Mask:255.255.0.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:8 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:736 (736.0 B)  TX bytes:0 (0.0 B)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

root@8b9b255f193d:/#
  • 이전의 run 예제와 다른점은 -p 옵션을 추가하여 컨테이너의 포트를 호스트의 포트와 바인딩해 연결할 수 있게 설정합니다.[호스트의 포트]:[컨테이너의 포트]

시작하세요! 시작하세요! 도커/쿠버네티스 : 친절한 설명으로 쉽게 이해하는 컨테이너 관리[개정판]

https://book.interpark.com/product/BookDisplay.do?_method=detail&sc.saNo=001&sc.prdNo=340319424&product2020=true

좋은 웹페이지 즐겨찾기