도커 이미지

YeJI Kang·2021년 12월 17일
0

2.1 도커 이미지와 컨테이너

2.1.1 도커 이미지

컨테이너를 생성할 때, 필요한 요소이며 iso파일과 비슷한 개념입니다.

컨테이너를 생성하고 실행할 때 읽기 전용으로 사용됩니다.
아래와 같이 이미지에는 repository, image, tag 가 있습니다.

[repository] / [image] : [tag]

  • repository는 저장소로 명시되지 않으면 도커 허브의 공식 이미지를 뜻합니다.
  • image는 해당 이미지가 어떤 역할을 하는지 나타냅니다.
  • tag는 버전관리 혹은 리비전 관리에 사용합니다. 생략할 경우 latest를 뜻합니다.

ex. ubuntu:latest

2.1.2 도커 컨테이너

이미지를 통해 도커 컨테이너를 생성하면 격리된 시스템 자원 및 네트워크를 사용할 수 있는 독립된 공간이 생성됩니다.

이 컨테이너는 이미지를 읽기 전용으로 사용하되 이미지에서 변경된 사항만 컨테이너 계층에 저장합니다. 따라서, 컨테이너에서 어떤 일을 하든 원래 이미지는 영향을 받지 않습니다.

2.2 도커 컨테이너 다루기

2.2.1 컨테이너 생성

docker -v

도커 버전 확인을 위한 커맨드입니다.

docker run -i -t [image]:[tag]

ex. docker run -i -t ubuntu:14.04

도커 컨테이너를 생성하고 실행하는 커맨드입니다.

이미지가 로컬 엔진에 없을 경우, 도커 허브에서 자동으로 이미지를 내려받습니다.

  • -i : 상호 입출력 활성화
  • -t : tty를 활성화
ye-geeee@192  ~  docker run -i -t ubuntu:14.04
root@91e008573de6:/#
root@91e008573de6:/# ls
bin   dev  home  media  opt   root  sbin  sys  usr
boot  etc  lib   mnt    proc  run   srv   tmp  var
root@91e008573de6:/#
ye-geeee@192  ~ 

run을 할 경우, 컨테이너를 생성, 실행 그리고 컨테이너 내부에 들어오는 것까지 동작을 수행합니다.

호스트 이름은 이때 무작위 16진수 해쉬값이고, 91e008573de6은 고유 ID의 앞부분입니다.

컨테이너를 빠져 나올 때는 두 가지 방법이 있습니다.

  • exit cmd 또는 Ctrl + D : 컨테이너 내부를 따져나오면서 동시에 컨테이너를 정지시킵니다.
  • Ctrl + P, Q : 단순히 컨테이너의 셸에서만 빠져나옵니다.

docker pull [repository]/[image]:[tag]

도커 이미지 다운 받을 때 사용하는 커맨드입니다.

gang-yeji@192  ~  docker pull centos:7
7: Pulling from library/centos
6717b8ec66cd: Pull complete
Digest: sha256:0f4ec88e21daf75124b8a9e5ca03c37a5e937e0e108a255d890492430789b60e
Status: Downloaded newer image for centos:7
docker.io/library/centos:

docker images

도커 엔진에 존재하는 이미지의 목록을 출력합니다.

ye-geeee@192  ~  docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
mysql        latest    5a4e492065c7   3 weeks ago     514MB
ubuntu       14.04     423c4ed354ff   3 months ago    187MB
centos       7         e5df02c43685   10 months ago   301MB

docker create -i -t —name [컨테이너명][image]:[tag]

도커 컨테이너를 생성하는 커맨드입니다.

—name 옵션에 컨테이너 이름을 설정합니다. 아래 나오는 16진수 해시값이 컨테이너의 고유 ID입니다.

create 커맨드로는 컨테이너 내부로 진입하지 않습니다.

✘ ye-geeee@192  ~  docker create -i -t --name mycentos centos:7
2727851ed7ec07ff566f58ef2a3cf5d9b1b7508136e885b137d03edba8234d7a

docker start [컨테이너명]

생성한 컨테이너를 실행시킬 때 사용하는 커맨드입니다.

컨테이너를 실행시킬 때에는 컨테이너명 대신 16진수 컨테이너 ID를 사용할 수도 있습니다. ID 전체를 넣을 필요 없이 식별되는 2~3자리만 기입을 하면 됩니다.

✘ ye-geeee@192  ~  docker start mycentos
mycentos

docker stop [컨테이너명]

실행 중인 컨테이너를 중지시킬 때 사용하는 커맨드입니다.

docker attach [컨테이너명]

도커 컨테이너 내부에 진입하기 위해 사용하는 커맨드입니다.

✘ ye-geeee@192  ~  docker attach mycentos
[root@2727851ed7ec /]#

2.2.2 컨테이너 목록 확인

docker ps

지금까지 생성한 도커 컨테이너 목록을 확인합니다.

✘ ye-geeee@192  ~  docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS                               NAMES
2727851ed7ec   centos:7       "/bin/bash"              7 minutes ago    Up 5 minutes                                        mycentos
91e008573de6   ubuntu:14.04   "/bin/bash"              22 minutes ago   Up 22 minutes                                       sad_yonath
cdd5df6f6e10   mysql:latest   "docker-entrypoint.s…"   2 weeks ago      Up 2 weeks      0.0.0.0:3306->3306/tcp, 33060/tcp   moniapp-db
✘ ye-geeee@192  ~  docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS                  PORTS                               NAMES
2727851ed7ec   centos:7       "/bin/bash"              9 minutes ago    Up 6 minutes                                                mycentos
91e008573de6   ubuntu:14.04   "/bin/bash"              23 minutes ago   Up 23 minutes                                               sad_yonath
78d292dfd430   ubuntu:14.04   "/bin/bash"              4 days ago       Exited (0) 4 days ago                                       agitated_kapitsa
cdd5df6f6e10   mysql:latest   "docker-entrypoint.s…"   2 weeks ago      Up 2 weeks              0.0.0.0:3306->3306/tcp, 33060/tcp   moniapp-db
✘ ye-geeee@192  ~  docker ps --format "table {{.ID}}"
CONTAINER ID
2727851ed7ec
91e008573de6
cdd5df6f6e10
  • -a 옵션 : 옵션을 사용하지 않으면, 현재 정지 되지 않은 컨테이너만 출력합니다. 이 옵션을 사용하면 전체 컨테이너를 확인할 수 있습니다.
  • --format "table {{.ID}}" 옵션: "table {{.[Column명]}}\t{{.[Column명}}" 에 보고 싶은 정보들만 넣어줍니다.

docker rename [기존 컨테이너명][새로운 컨테이너명]

컨테이너명을 변경할 때 사용하는 커맨드입니다.

2.2.3 컨테이너 삭제

docker rm [컨테이너명]

도커 컨테이너를 삭제할 때 사용하는 커맨드입니다.

✘ ye-geeee@192@192  ~  docker rm agitated_kapitsa
agitated_kapitsa
✘ ye-geeee@192@192  ~  docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS                               NAMES
2727851ed7ec   centos:7       "/bin/bash"              15 minutes ago   Up 13 minutes                                       centos
91e008573de6   ubuntu:14.04   "/bin/bash"              30 minutes ago   Up 30 minutes                                       sad_yonath
cdd5df6f6e10   mysql:latest   "docker-entrypoint.s…"   2 weeks ago      Up 2 weeks      0.0.0.0:3306->3306/tcp, 33060/tcp   moniapp-db
✘ ye-geeee@192  ~  docker rm centos
Error response from daemon: You cannot remove a running container 2727851ed7ec07ff566f58ef2a3cf5d9b1b7508136e885b137d03edba8234d7a. Stop the container before attempting removal or force remove
✘ ye-geeee@192@192  ~  docker stop centos
centos
 gang-yeji@192  ~  docker rm centos
centos

실행중인 도커 컨테이너는 삭제할 수 없으므로 docker stop [컨테이너명] 을 통해 중지한 후에 컨테이너를 삭제합니다.

docker container prune

전체 컨테이너를 일괄로 모두 삭제할 때 사용하는 커맨드입니다.

2.2.4 컨테이너를 외부에 노출

외부에 컨테이너 애플리케이션을 노출하기 위해서는 eth0의 IP와 포트를 호스트의 IP와 포트에 바인딩해야 합니다.

run 을 할 때에 -p 옵션을 통해 포트 바인딩을 합니다.

✘ ye-geeee@192  ~  docker run -i -t -p 7000:80 ubuntu:14.04
root@909090adb7a2:/#

2.2.5 컨테이너 애플리케이션 구축

profile
재밌는 것만 하고 싶어 ʕ•ﻌ•ʔ

0개의 댓글