본문 바로가기
Framework and Tool/Docker

Container 생성 및 삭제

by ocwokocw 2023. 6. 3.

출처: 시작하세요! 도커/쿠버네티스 - 컨테이너 생성

출처: 시작하세요! 도커/쿠버네티스 - 컨테이너 목록확인

출처: 시작하세요! 도커/쿠버네티스 - 컨테이너 삭제

 

Container 생성

docker run -it 명령어를 이용하면 container를 생성하고 해당 container에 접속할 수 있다. docker run -it 명령어는 세부적으로 아래 4단계를 거친다.

  • local에 image가 없으면 repository로 부터 download (docker pull)
  • container를 생성 (docker create)
  • container를 시작 (docker start)
  • container에 접속 (docker attach, 단, -it option 사용시)

 

 ~ % docker run -it ubuntu:14.04
Unable to find image 'ubuntu:14.04' locally
14.04: Pulling from library/ubuntu
d1a5a1e51f25: Pull complete
75f8eea31a63: Pull complete
a72d031efbfb: Pull complete
Digest: sha256:64483f3496c1373bfd55348e88694d1c4d0c9b660dee6bfef5e12f43b9933b30
Status: Downloaded newer image for ubuntu:14.04
root@84aa7d26b524:/#

ls 명령어로 목록을 확인해보면 알겠지만 host와는 독립적인 파일시스템을 사용하므로 아무것도 없는 초기 상태이다. 빠져나올때는 exit를 입력하면 된다.

root@84aa7d26b524:/# ls
bin  boot  dev  etc  home  lib  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@84aa7d26b524:/# exit
exit

create, start, attach 명령어를 써서 container에 접속하는 과정을 실행해보면 아래와 같다. 

 ~ % docker create -it --name mycentos centos:7
cba0a2a82fa6a45b0bd7c1fa698dba6c2f388dccc287260f1564601c997641d6
 ~ % docker start mycentos
mycentos
 ~ % docker attach mycentos
[root@cba0a2a82fa6 /]# read escape sequence
 ~ % docker ps
CONTAINER ID   IMAGE      COMMAND       CREATED          STATUS          PORTS     NAMES
cba0a2a82fa6   centos:7   "/bin/bash"   30 seconds ago   Up 19 seconds             mycentos

container에서 빠져나올 때 exit 대신 Ctrl + P, Q를 사용할 수도 있는데 차이점은 exit 의 경우 container를 종료하지만 Ctrl + P, Q의 경우 종료하지 않고 빠져나온다. 그래서 docker ps로 조회해보면 ubuntu의 경우 container가 조회되지 않지만 centos의 경우 목록에 나타난다.


Container 목록 확인

Container 생성 마지막 부분에서 잠깐 살펴봤듯이 docker ps로 조회하면 정지되지 않은 container가 출력된다. 여기에 -a option을 주면 정지된 container 까지 출력할 수 있다.

 ~ % docker ps -a
CONTAINER ID   IMAGE                                 COMMAND                  CREATED          STATUS                      PORTS     NAMES
cba0a2a82fa6   centos:7                              "/bin/bash"              4 minutes ago    Up 4 minutes                          mycentos
84aa7d26b524   ubuntu:14.04                          "/bin/bash"              22 minutes ago   Exited (0) 9 minutes ago              cool_dhawan

출력된 column명이 직관적이라서 대부분 별도 설명은 필요 없을것이다.

COMMAND는 container가 시작될 때 실행될 명령어를 나타낸다. 이전에 docker run -it 명령어를 수행해서 bash shell로 directory 목록을 확인할 수 있었던것은 centos, ubuntu가 container 시작시 /bin/bash를 실행하기 때문이다. 내장된 COMMAND는 명령어 끝에 입력해서 덮어쓸 수 있다.


Container 삭제

docker rm 명령어를 사용하면 container 삭제를 할 수 있다.

~ % docker ps -a
CONTAINER ID   IMAGE                                 COMMAND                  CREATED       STATUS                     PORTS     NAMES
cba0a2a82fa6   centos:7                              "/bin/bash"              7 days ago    Up 7 days                            mycentos
84aa7d26b524   ubuntu:14.04                          "/bin/bash"              7 days ago    Exited (0) 7 days ago                cool_dhawan
304d3afad6ff   gcr.io/k8s-minikube/kicbase:v0.0.34   "/usr/local/bin/entr…"   7 weeks ago   Exited (137) 6 weeks ago             minikube
f9a14271c96f   mongo                                 "docker-entrypoint.s…"   8 weeks ago   Exited (0) 7 days ago                local_mongo_1

~ % docker rm cool_dhawan
cool_dhawan

~ % docker ps -a
CONTAINER ID   IMAGE                                 COMMAND                  CREATED       STATUS                     PORTS     NAMES
cba0a2a82fa6   centos:7                              "/bin/bash"              7 days ago    Up 7 days                            mycentos
304d3afad6ff   gcr.io/k8s-minikube/kicbase:v0.0.34   "/usr/local/bin/entr…"   7 weeks ago   Exited (137) 6 weeks ago             minikube
f9a14271c96f   mongo

만약 실행중인 container를 삭제하고 싶다면 stop으로 실행을 중지시킨 후 삭제해야 한다. 그렇지 않으면 error 가 출력된다.

~ % docker ps -a
CONTAINER ID   IMAGE                                 COMMAND                  CREATED       STATUS                     PORTS     NAMES
cba0a2a82fa6   centos:7                              "/bin/bash"              7 days ago    Up 7 days                            mycentos
304d3afad6ff   gcr.io/k8s-minikube/kicbase:v0.0.34   "/usr/local/bin/entr…"   7 weeks ago   Exited (137) 6 weeks ago             minikube
f9a14271c96f   mongo                                 "docker-entrypoint.s…"   8 weeks ago   Exited (0) 7 days ago                local_mongo_1

~ % docker rm mycentos
Error response from daemon: You cannot remove a running container cba0a2a82fa6a45b0bd7c1fa698dba6c2f388dccc287260f1564601c997641d6. Stop the container before attempting removal or force remove

~ % docker stop mycentos
mycentos

~ % docker rm mycentos
mycentos

~ % docker ps -a
CONTAINER ID   IMAGE                                 COMMAND                  CREATED       STATUS                     PORTS     NAMES
304d3afad6ff   gcr.io/k8s-minikube/kicbase:v0.0.34   "/usr/local/bin/entr…"   7 weeks ago   Exited (137) 6 weeks ago             minikube
f9a14271c96f   mongo                                 "docker-entrypoint.s…"   8 weeks ago   Exited (0) 7 days ago                local_mongo_1

연습용으로 생성했던 정지된 container를 일일이 삭제해주기 귀찮다면 docker container prune 명령어를 이용한다.

 

다른 방법으로는 명령어 2개를 조합하여 응용할 수도 있다.

"docker ps -a -q" 명령어로 container의 상태에 관계없이(-a option) 모든 ID 출력(-q option) 하고 이를 docker stop이나 docker rm 의 인자로 넘긴다. (ex - docker stop $(docker ps -a -q))

 

'Framework and Tool > Docker' 카테고리의 다른 글

Docker network  (0) 2023.06.12
Docker volume  (0) 2023.06.11
Container application example  (0) 2023.06.10
Container port  (0) 2023.06.10
Image와 Container  (0) 2023.05.31

댓글