728x90

Docker Hub 연동


docker login [옵션] [서버]

Docker Hub에 로그인

  • Docker 리포지토리에 이미지 업로드를 위해 Docker Hub 로그인
  • 옵션
옵션 설명
--password, -p 비밀번호
--username, -u 사용자명

 

  • Docker Hub에 로그인
[root@localhost ~]# docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: khj708
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

 

 


 

docker image tag <Docker Hub 사용자명>/이미지명[:태그명]

이미지 태그

  • 이미지에 대한 태그 설정
  • [apline:latest]: 사용할 이미지
  • khj708: Docker Hub 사용자명
  • goorm: 이미지명
  • alpine: 태그명
[root@localhost ~]# docker image tag alpine:latest khj708/goorm:alpine

[root@localhost ~]# docker image ls
REPOSITORY     TAG       IMAGE ID       CREATED        SIZE
khj708/goorm   alpine    e66264b98777   3 weeks ago    5.53MB
alpine         latest    e66264b98777   3 weeks ago    5.53MB

 


 

docker image push <Docker Hub 사용자명>/이미지명[:태그명]

이미지 업로드

  • Docker Hub에 이미지 업로드를 위한 명령
  • 업로드할 이미지 이름 형식: <Docker Hub 사용자명>/이미지명:태그명 
  • docker login 명령으로 로그인이 되어야 함
  • 이미지 업로드
[root@localhost ~]# docker image push khj708/goorm:alpine
The push refers to repository [docker.io/khj708/goorm]
24302eb7d908: Mounted from library/alpine
alpine: digest: sha256:4ff3ca91275773af45cb4b0834e12b7eb47d1c18f770a0b151381cd227f4c253 size: 528

# 이름 형식이 맞지 않는 경우 이미지 업로드에 실패함
[root@localhost ~]# docker image push khj708/alpine:latest
The push refers to repository [docker.io/khj708/alpine]
An image does not exist locally with the tag: khj708/alpine

 

 


 

 

Dockerfile을 사용한 구성 관리


Dockerfile이란?

인프라 구성을 기술한 파일

  • Dockerfile은 Docker 상에서 작동시킬 컨테이너의 구성 정보를 기술하기 위한 파일
  • docker build: Dockerfile에 기술된 구성 정보를 바탕으로 Docker 이미지 작성

 

[출처] https://jfrog.com/knowledge-base/a-beginners-guide-to-understanding-and-building-docker-images/

 


 

Dockerfile의 기본 구문

Dockerfile은 텍스트 형식의 파일로 에디터 등을 사용하여 작성

  • 확장자 X
  • 인프라의 구성 정보 기술
  • Dockerfile에서 이미지를 빌드할 때 파일명을 명시적으로 지정해야 함

 

Dockerfile 명령

  • 명령은 대/소문자 상관없지만 관례적으로 대문자로 통일해서 사용
명령 설명
FROM 베이스 이미지 지정
RUN 명령 실행
CMD 컨테이너 실행 명령
LABEL 라벨 설정
EXPOSE 포트 익스포트
ENV 환경 변수
ADD 파일/디렉토리 추가
COPY 파일 복사
ENTRYPOINT 컨테이너 실행 명령
VOLUME 볼륨 마운트
USER 사용자 지정
WORKDIR 작업 디렉토리
ARG Dockerfile 안의 변수
ONBUILD 빌드 완료 후 실행되는 명령
STOPSIGNAL 시스템 콜 시그널 설정
HEALTHCHECK 컨테이너의 헬스 체크
SHELL 기본 쉘 설정

 

 


 

Dockerfile 작성

Dockerfile에는 'Docker 컨테이너를 어떤 Docker 이미지로부터 생성할지'라는 정보를 반드시 기술해야 함

=> 베이스 이미지

 

FROM 명령

  • FROM [이미지명]
  • FROM [이미지명]:[태그명]
  • FROM [이미지명]@[다이제스트]

 

  • CentOS를 베이스 이미지로 한 Dockerfile
  • 태그명을 생략하면 베이스 이미지의 최신 버전이 적용됨
# 베이스 이미지 설정
FROM centos:centos7

 

  • 다이제스트 확인
  • 이미지를 고유하게 특정할 때 사용
  • 다이제스트: Docker Hub에 업로드하면 자동으로 부여되는 식별자, 업로드하지 않은 이미지는 없음
[root@localhost ~]# docker image ls --digests khj708/goorm
REPOSITORY     TAG       DIGEST                                                                    IMAGE ID       CREATED       SIZE
khj708/goorm   alpine    sha256:4ff3ca91275773af45cb4b0834e12b7eb47d1c18f770a0b151381cd227f4c253   e66264b98777   3 weeks ago   5.53MB

# 다이제스트가 없음
[root@localhost ~]# docker image ls --digests khj/os
REPOSITORY   TAG       DIGEST    IMAGE ID       CREATED       SIZE
khj/os       1.1       <none>    a608bf012429   2 hours ago   231MB
khj/os       1.0       <none>    7c82097ba542   3 hours ago   231MB
728x90
728x90

Docker 이미지 생성


docker container commit [옵션] <컨테이너 식별자> 이미지명[:태그명]

컨테이너로부터 이미지 작성

  • 옵션
옵션 설명
--author, -a 작성자 지정
--message, -m 메시지 지정
--change, -c commit 시 Dockerfile 명령 지정
--pause, -p 컨테이너를 일시정지하고 commit
  • 컨테이너로부터 이미지 작성
  • osa 컨테이너를 khj/os라는 이름으로 1.0 태그명을 지정하고 작성자는 jinkim으로 새로운 이미지를 작성함
[root@localhost ~]# docker container commit -a "jinkim" osa khj/os:1.0
sha256:7c82097ba5426a4fd95f6365d32486bf1312cee7d2dfaa29d121f777f6b37e6f

[root@localhost ~]# docker image ls
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
khj/os       1.0       7c82097ba542   4 seconds ago   231MB

 

  • 이미지 상세 정보 확인
[root@localhost ~]# docker image inspect khj/os:1.0 | grep -i "Author"
        "Author": "jinkim",

 


 

docker container export <컨테이너 식별자>

컨테이너를 tar 파일로 출력

  • 가동 중인 컨테이너의 디렉토리/파일들을 모아서 tar 파일을 만들 수 있음
  • 생성한 tar 파일을 바탕으로 다른 서버에서 컨테이너를 가동시킬 수 있음

 

  • 파일 출력
  • osa 컨테이너를 latest.tar 라는 tar 파일로 출력
[root@localhost ~]# docker container export osa > latest.tar

[root@localhost ~]# ls -l
...
-rw-r--r--. 1 root root 238571520 Jun 16 12:11 latest.tar
...

 


 

docker image import <파일 또는 URL> | - 이미지명[:태그명]

tar 파일로부터 이미지 작성

  • Linux OS 이미지의 디렉토리/파일로부터 Docker 이미지를 생성할 수 있음
  • 압축된 디렉토리나 파일도 취급 가능
  • root 권한으로 실행하지 않으면 액세스 권한이 없는 파일이 포함되지 않는 경우 발생할 수 있음

 

  • 이미지 작성
  • latest.tar로 모아놓은 디렉토리나 파일을 바탕으로 khj/os라는 이름의 태그명이 1.1인 이미지 작성
[root@localhost ~]# cat latest.tar | docker image import - khj/os:1.1
sha256:a608bf012429b77bb7f1b9eced459b710b002f69f2be0cd9b6c06838925f9a9e

 

  • 이미지 확인
[root@localhost ~]# docker image ls
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
khj/os       1.1       a608bf012429   6 seconds ago    231MB
khj/os       1.0       7c82097ba542   13 minutes ago   231MB

 


 

docker image save [옵션] <저장 파일명> [이미지명]

Docker 이미지를 tar 파일로 저장

  • tensorflow라는 이름의 이미지를 export.tar로 저장
  • -o 옵션: 저장할 파일명
docker image save -o export.tar tensorflow

 


 

docker image load [옵션]

 

tar 파일로부터 이미지를 읽어옴

  • export.tar 파일로부터 이미지 읽어 오기
  • -i 옵션: 읽어 올 파일명
docker image load -i export.tar
728x90
728x90

가동 중인 Docker 컨테이너 조작


docker container attach

가동 컨테이너 연결

  • 가동 중인 컨테이너에 연결할 때 사용
  • 컨테이너에 연결
  • /bin/bash가 실행되고 있는 os 컨테이너에 연결
  • 연결한 컨테이너 종료: ctrl + d
  • 컨테이너에서 분리 (컨테이너 실행 유지): ctrl + p + q
[root@localhost ~]# docker container attach os

# ctrl + p + q: 컨테이너 실행을 유지하고 빠져나옴
[root@134edd645e3f /]#
[root@134edd645e3f /]# read escape sequence
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE       COMMAND                  CREATED             STATUS             PORTS                                       NAMES
109beea4e76b   centos      "/bin/bash"              36 minutes ago      Up 12 minutes                                                  osb
03002e13460e   centos      "/bin/bash"              37 minutes ago      Up 37 minutes                                                  osa
763e42cf5bd9   mysql:5.6   "docker-entrypoint.s…"   44 minutes ago      Up 44 minutes      0.0.0.0:3306->3306/tcp, :::3306->3306/tcp   db
134edd645e3f   centos      "/bin/bash"              About an hour ago   Up About an hour                                               os
64ebf94e8142   httpd       "httpd-foreground"       About an hour ago   Up About an hour   80/tcp                                      web

# ctrl + d: 컨테이너를 종료하고 빠져나옴
[root@134edd645e3f /]# exit
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE       COMMAND                  CREATED             STATUS             PORTS                                       NAMES
109beea4e76b   centos      "/bin/bash"              37 minutes ago      Up 13 minutes                                                  osb
03002e13460e   centos      "/bin/bash"              38 minutes ago      Up 38 minutes                                                  osa
763e42cf5bd9   mysql:5.6   "docker-entrypoint.s…"   45 minutes ago      Up 45 minutes      0.0.0.0:3306->3306/tcp, :::3306->3306/tcp   db
64ebf94e8142   httpd       "httpd-foreground"       About an hour ago   Up About an hour   80/tcp                                      web

 


 

docker container exec [옵션] <컨테이너 식별자> <실행할 명령> [인수]

가동 컨테이너에서 추가(새로운) 프로세스 실행

  • 가동 중인 컨테이너에서 새로운 프로세스를 실행할 때 사용
  • docker container attach 명령으로 연결을 시도했지만 쉘이 작동하지 않는 경우
  • 반드시 컨테이너가 실행 중인 상태에서만 명령 사용이 가능함
  • 새로운 프로세스는 종료되더라도 컨테이너는 유지됨
  • 옵션
옵션 설명
--detach, -d 명령을 백그라운드에서 실행
--interactive, -i 컨테이너의 표준 입력을 연다
--tty, -t tty 사용
--user, -u 사용자명 지정
  • 컨테이너에서 sh 실행
  • 가동 중인 osa 컨테이너에서 /bin/sh 실행
[root@localhost ~]# docker container ls
CONTAINER ID   IMAGE       COMMAND                  CREATED             STATUS             PORTS                                       NAMES
109beea4e76b   centos      "/bin/bash"              48 minutes ago      Up 24 minutes                                                  osb
03002e13460e   centos      "/bin/bash"              49 minutes ago      Up 49 minutes                                                  osa

[root@localhost ~]# docker container exec -it osa /bin/sh
sh-4.4#
sh-4.4#

# attach 명령은 새로운 프로세스를 실행할 수 없음
[root@localhost ~]# docker container attach osa /bin/sh
"docker container attach" requires exactly 1 argument.
See 'docker container attach --help'.

Usage:  docker container attach [OPTIONS] CONTAINER

Attach local standard input, output, and error streams to a running container

 

  • 컨테이너에서 echo 실행
[root@localhost ~]# docker container exec -it osa /bin/echo "Hello world"
Hello world

 


 

docker container top

가동 컨테이너의 프로세스 확인

  • 가동 중인 컨테이너에서 실행되고 있는 프로세스를 확인할 때 사용
  • 프로세스 확인
  • osa 컨테이너의 프로세스를 확인함
[root@localhost ~]# docker container top osa
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                4067                4046                0                   10:46               pts/0               00:00:00            /bin/bash
root                5275                4046                0                   11:35               ?                   00:00:00            /bin/bash
root                5421                4046                0                   11:42               ?                   00:00:00            /bin/sh

 

docker container port

가동 컨테이너의 포트 전송 확인

  • 가동 중인 컨테이너에서 실행되고 있는 프로세스가 전송되고 있는 포트를 확인할 때 사용
  • 컨테이너의 포트 전송
[root@localhost ~]# docker container port db
3306/tcp -> 0.0.0.0:3306
3306/tcp -> :::3306
728x90
728x90

Docker 컨테이너 네트워크


docker network ls [옵션]

네트워크 목록 표시

  • 옵션
옵션 설명
-f, --filter=[] 출력을 필터링함
--no-trunc 상세 정보를 출력함
-quiet, -q 네트워크 ID만 표시
  • 네트워크 목록 표시
  • Docker는 기본 값으로 세 개의 네트워크를 생성함
[root@localhost ~]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
d23b09200f46   bridge    bridge    local
c78bf6a69ecb   host      host      local
8c71f2b03802   none      null      local

 

  • 네트워크 목록 표시의 필터링
  • bridge 네트워크 ID
[root@localhost ~]# docker network ls -q --filter driver=bridge
d23b09200f46

 

  • 컨테이너 시작
  • 네트워크를 지정하지 않고 컨테이너를 시작하면 기본 값인 bridge 네트워크로 컨테이너를 시작함
  • ubuntu 이미지로 시작한 sample 컨테이너의 네트워크 확인
  • NetworkID가 bridge 네트워크로 설정된 것을 확인할 수 있음 (sample NetworkID = Bridge NetworkID = d23b09200f46)
[root@localhost ~]# docker container run -itd --name=sample ubuntu:latest

[root@localhost ~]# docker container inspect sample
...
            "Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "d23b09200f46b11d3c6e055e7114e33f8e572c8adde78736b25d993021ae4896",
...

 


 

docker network create [옵션] 네트워크

새로운 네트워크 작성

  • 옵션
옵션 설명
--driver, -d 네트워크 브릿지 또는 오버레이
--ip-range 컨테이너에 할당하는 IP 주소의 범위 지정
--subnet 서브넷을 CIDR 형식으로 지정
--ipv6 IPv6 네트워크를 유효화할지 말지 (true/false)
-label 네트워크에 설정하는 라벨
  • bridge 네트워크 작성
  • --driver 옵션에서 지정할 수 있는 네트워크 드라이버는 bridge 또는 overlay 중 하나임
  • 오버레이 네트워크란 여러 개의 호스트에 걸쳐 있는 네트워크를 말함
[root@localhost ~]# docker network create --driver=bridge web-network
a6280d86d915869091c639d22f8a46cd7e2a534de09b64bad8c39b6fe3df97d1

 

  • 작성한 네트워크 확인
[root@localhost ~]# docker network ls --filter driver=bridge
NETWORK ID     NAME          DRIVER    SCOPE
d23b09200f46   bridge        bridge    local
a6280d86d915   web-network   bridge    local

 


 

docker network connect / disconnect [옵션] 네트워크 컨테이너

네트워크 연결

  • 옵션
옵션 설명
--ip IPv4 주소
--ip6 IPv6 주소
--alias 앨리어스명
--link 다른 컨테이너에 대한 링크
  • 네트워크에 대한 연결
  • webfront 컨테이너를 web-network 네트워크에 연결
  • 정지 상태인 컨테이너도 네트워크 연결 가능
# webfront 컨테이너 생성 및 실행
[root@localhost ~]# docker container run -itd --name webfront centos:7
74a67f0859d80c6f27319e7c9c01fd381d233fe4ece86759d342e00e32454137

[root@localhost ~]# docker ps
CONTAINER ID   IMAGE           COMMAND       CREATED          STATUS          PORTS     NAMES
74a67f0859d8   centos:7        "/bin/bash"   3 seconds ago    Up 1 second               webfront
737f0cb28b37   ubuntu:latest   "bash"        19 minutes ago   Up 19 minutes             sample

# web-network 네트워크 연결
[root@localhost ~]# docker network connect web-network webfront

 

  • 컨테이너 네트워크 상세 정보 확인: docker container inspect
[root@localhost ~]# docker container inspect webfront

...
                "web-network": {
                    "IPAMConfig": {},
                    "Links": null,
                    "Aliases": [
                        "74a67f0859d8"
                    ],
                    "NetworkID": "a6280d86d915869091c639d22f8a46cd7e2a534de09b64bad8c39b6fe3df97d1",
                    "EndpointID": "68f80895e20265fb35a156219f2cb981fdac5af493b4822d2c906a9a303ac9ff",
                    "Gateway": "172.19.0.1",
                    "IPAddress": "172.19.0.2",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:13:00:02",
                    "DriverOpts": {}
...

 

  • 네트워크를 지정한 컨테이너 시작
  • 컨테이너 시작 시에도 네트워크 연결을 할 수 있음
[root@localhost ~]# docker container run -itd --name=webap --net=web-network nginx

[root@localhost ~]# docker container inspect webap
...
            "Networks": {
                "web-network": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": [
                        "0ed860715c0e"
                    ],
                    "NetworkID": "a6280d86d915869091c639d22f8a46cd7e2a534de09b64bad8c39b6fe3df97d1",
                    "EndpointID": "4f1ea7cc44544eca88ae92304141015ed2467dc87ada6726155e5feb8a7f00e4",
                    "Gateway": "172.19.0.1",
                    "IPAddress": "172.19.0.2",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:13:00:02",
                    "DriverOpts": null
...

 

  • 네트워크에 대한 연결 해제
[root@localhost ~]# docker network disconnect web-network webfront

 


 

docker network rm [옵션] 네트워크

네트워크 삭제

  • 네트워크 삭제를 위해서는 연결 중인 모든 컨테이너와 연결 해제 작업이 필요함
  • 해제하지 않고 네트워크를 삭제할 경우 에러 발생
[root@localhost ~]# docker network rm web-network
Error response from daemon: error while removing network: network web-network id a6280d86d915869091c639d22f8a46cd7e2a534de09b64bad8c39b6fe3df97d1 has active endpoints

 

  • 네트워크에 연결되어 있는 컨테이너 정보 확인: webap
[root@localhost ~]# docker network inspect web-network
       "Containers": {
            "0ed860715c0ef997ca3a73ceeb7d0d3d7b0b81abc17766c82720fd49648de72a": {
                "Name": "webap",
                "EndpointID": "4f1ea7cc44544eca88ae92304141015ed2467dc87ada6726155e5feb8a7f00e4",
                "MacAddress": "02:42:ac:13:00:02",
                "IPv4Address": "172.19.0.2/16",
                "IPv6Address": ""
            }
        },

 

  • web-network 네트워크와 연결된 webap 컨테이너 연결 해제
[root@localhost ~]# docker network disconnect web-network webap

 

  • web-network 네트워크 삭제
[root@localhost ~]# docker network rm web-network
web-network

# 네트워크 목록 확인
[root@localhost ~]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
d23b09200f46   bridge    bridge    local
c78bf6a69ecb   host      host      local
8c71f2b03802   none      null      local
728x90
728x90

docker container run


docker container run [옵션] 이미지명[:태그명] [인수]

컨테이너 생성 및 시작

  • 옵션
옵션 설명
--attach, -a 표준 입력(STDIN), 표준 출력(STDOUT), 표준 오류 출력(STDERR)에 어태치
--cidfile 컨테이너 ID를 파일로 출력
--detach, -d 컨테이너를 생성하고 백그라운드에서 실행
--interactive, -i 컨테이너의 표준 입력을 연다
--tty, -t 단말기 디바이스 사용

 

  • docker container run 대화식 실행
  • -it: 콘솔에 결과를 출력하는 옵션
  • [--name: cal-test]: 컨테이너명
  • centos: 이미지명
  • /bin/cal: 컨테이너에서 실행할 명령
# cal 명령의 실행에 의한 달력 표시
[root@localhost ~]# docker container run -it --name cal-test centos /bin/cal
      June 2022
Su Mo Tu We Th Fr Sa
          1  2  3  4
 5  6  7  8  9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30
# bash 실행
[root@localhost ~]# docker container run -it --name bash-test centos /bin/bash
[root@e2f2d745e33f /]#

 


 

docker container run [실행 옵션] 이미지명[:태그명] [인수]

컨테이너의 백그라운드 실행

  • 옵션
옵션 설명
-detach, -d 백그라운드에서 실행
--user, -u 사용자명 지정
--restart=[no | on-failure | on-failure:횟수n | always | unless-stopped] 명령의 실행 결과에 따라 재시작을 하는 옵션
--rm 명령 실행 완료 후에 컨테이너 자동 삭제
  • docker container run 백그라운드 실행
  • -d: 백그라운드에서 실행하는 옵션
  • centos: 이미지명
  • [/bin/ping localhost]: 컨테이너에서 실행할 명령 (로컬 호스트에 대해 ping 명령 실행)
  • 대화식으로 실행하지 않았기 때문에 콘솔에 바로 표시되지 않음
  • 시작된 컨테이너의 컨테이너 ID가 표시됨 (83dd78~)
# ping 명령 실행에 의한 컨테이너의 백그라운드 시작
[root@localhost ~]# docker container run -d centos /bin/ping localhost
83dd784a5b425f16ee4a36a9777b88782aa8cae207925d3e769ccc796e17bfce

# 컨테이너 로그 확인
[root@localhost ~]# docker container logs -t 83dd78
2022-06-15T05:19:21.676187304Z PING localhost (127.0.0.1) 56(84) bytes of data.
2022-06-15T05:19:21.676205133Z 64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.030 ms
2022-06-15T05:19:22.675664824Z 64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.041 ms

 

  • --restart 옵션
옵션 설명
no 재시작하지 않음
on-failure 종료 status가 0이 아닐 때 재시작
on-failure:횟수n 종료 status가 0이 아닐 때 n번 재시작
always 항상 재시작
unless-stopped 최근 컨테이너가 정지 상태가 아니라면 항상 재시작
  • 컨테이너를 항상 재시작
  • /bin/bash를 exit 명령으로 종료해도 자동으로 컨테이너를 재시작함
[root@localhost ~]# docker container run -it --restart=always centos /bin/bash
[root@f993f6095f32 /]# exit
exit
[root@localhost ~]# docker container ps
CONTAINER ID   IMAGE     COMMAND                 CREATED          STATUS          PORTS     NAMES
f993f6095f32   centos    "/bin/bash"             19 seconds ago   Up 5 seconds              musing_bouman

 


 

docker container run [네트워크 옵션] 이미지명[:태그명] [인수]

컨테이너 네트워크 설정

  • 옵션
옵션 설명
--add-host=[호스트명:IP 주소] 컨테이너의 /etc/hosts에 호스트명과 IP 주소 정의
--dns=[IP 주소] 컨테이너용 DNS 서버의 IP 주소 지정
--expose 지정한 범위의 포트 번호 할당
--mac-address=[MAC 주소] 컨테이너의 MAC 주소 지정
--net=[bridge | none | container:<name | id> | host | NETWORK] 컨테이너의 네트워크 지정
--hostname, -h 컨테이너 자신의 호스트명 지정
--publish, -p [호스트의 포트번호]:[컨테이너의 포트번호] 호스트와 컨테이너의 포트 매핑
--publish-all, -P 호스트의 임의의 포트를 컨테이너에 할당
  • 컨테이너의 포트 매핑
  • nginx 이미지를 이용하여 컨테이너를 생성하고 백그라운드에서 실행
  • 호스트의 8080 포트와 컨테이너의 80 포트 매핑
  • 호스트(enp0s8)의 8080 포트로 액세스하면 작동 중인 nginx 서비스 확인
[root@localhost ~]# docker container run -d -p 8080:80 nginx
8e2c60372da5ed39d14b14a8a11e439c8d71ab4e7e665dcd8ccf67035908434e

 

  • 컨테이너의 DNS 서버 지정
[root@localhost ~]# docker container run -d --dns 192.168.1.1 nginx

 

  • MAC 주소 지정
  • docker container inspect 명령을 실행하여 컨테이너 안의 네트워크 구성을 확인하면 설정한 MAC 주소를 확인할 수 있음
[root@localhost ~]# docker container run -d --mac-address="92:d0:c6:0a:29:33" centos
16b2643245d497d2aa5346f227cee7ef5b144da7033112810cbc45b18baf030d

[root@localhost ~]# docker container inspect --format="{{ .Config.MacAddress }}" 16b2
92:d0:c6:0a:29:33

 

  • 호스트명과 IP 주소 정의
  • 컨테이너 안의  /etc/hosts에 호스트명과 IP 주소 정의
[root@localhost ~]# docker container run -it --add-host khj.com:192.168.1.1 centos
[root@1357bdec42db /]# cat /etc/hosts
...
192.168.1.1     khj.com
...

 

  • 사용자 정의 네트워크 생성: docker network create
  • 네트워크 생성을 위해서는 Docker 네트워크 드라이버 또는 외부 네트워크 드라이버 플러그인 필요
  • 같은 네트워크에 여러 대의 컨테이너 연결 가능
  • 오버레이 네트워크 또는 커스텀 플러그인 사용 시 멀티 호스트에 대한 연결 가능
  • --net 옵션
옵션 설명
bridge 브릿지 연결 사용
none 네트워크에 연결하지 않음
container:[name | id] 다른 컨테이너의 네트워크 사용
host 컨테이너가 호스트 OS의 네트워크 사용
NETWORK 사용자 정의 네트워크 사용

 

  • 사용자 정의 네트워크 생성
  • 외부 브릿지 네트워크 드라이버를 사용하여 'webap-net'이라는 이름의 네트워크 생성 후 실행
[root@localhost ~]# docker network create -d bridge webap-net
bda159d95e530e25471534edd29a58423f3f8797281d3319e5b660d5331153a4

[root@localhost ~]# docker container run --net=webap-net -it centos
[root@5dbfdf6153fc /]#

 


 

docker container run [자원 옵션] 이미지명[:태그명] [인수]

자원을 지정하여 컨테이너 생성 및 실행

  • 옵션
옵션 설명
--cpu-shares, -c CPU의 사용 배분 (비율)
--memory, -m 사용할 메모리를 제한하여 실행
(단위: b, k, m, g)
--volume=[호스트의 디렉토리]:[컨테이너의 디렉토리], -v 호스트와 컨테이너의 디렉토리 공유

 

  • CPU 시간의 상대 비율과 메모리 사용량 지정
[root@localhost ~]# docker container run --cpu-shares=512 --memory=1g centos

 

  • 디렉토리 공유
  • 호스트의 /tmp 디렉토리를 컨테이너의 /mnt 디렉토리와 공유
  • 컨테이너의 /mnt 디렉토리에서 생성한 testfile을 호스트의 /tmp 디렉토리에서 확인되므로 디렉토리가 공유됐음을 알 수 있음
[root@localhost ~]# docker container run -it -v /tmp:/mnt centos:7
[root@309a5c28e6df /]# cd /mnt
[root@309a5c28e6df mnt]# touch testfile
[root@2e82850e1fa5 mnt]# exit
exit

[root@localhost ~]# cd /tmp
[root@localhost tmp]# ls
...
testfile
...

 


 

docker container run [환경 설정 옵션] 이미지명[:태그명] [인수]

컨테이너를 생성 및 시작하는 환경 지정

  • 컨테이너의 환경 변수 또는 컨테이너 안의 작업 디렉토리 등을 지정하여 컨테이너를 생성 및 실행할 수 있음
  • 옵션
옵션 설명
--env=[환경 변수], -e 환경 변수 설정
--env-file=[파일명] 환경 변수를 파일로부터 설정
--read-only=[true | false] 컨테이너의 파일 시스템을 읽기 전용으로 생성
--workdir=[패스], -w 컨테이너의 작업 디렉토리 지정
-u, --user=[사용자명] 사용자명 또는 UID 지정
  • 환경 변수 설정
[root@localhost ~]# docker container run -it -e kim=jin centos /bin/bash
[root@2c246b8eefdc /]# set
BASH=/bin/bash
...
kim=jin

 

  • 환경 변수의 일괄 설정
  • 환경 변수를 정의할 파일(env_list)을 생성하여 일괄 등록
[root@localhost ~]# vi env_list
[root@localhost ~]# cat env_list
hoge=fuge
foo=bar

[root@localhost ~]# docker container run -it --env-file=env_list centos /bin/bash
[root@330e6b907a21 /]# set
BASH=/bin/bash
..
foo=bar
hoge=fuge
..

 

  • 작업 디렉토리 설정
  • 컨테이너의 작업 디렉토리를 /tensorflow로 지정하여 실행
[root@localhost ~]# docker container run -it -w=/tensorflow centos /bin/bash
[root@ca9c3494106b tensorflow]# pwd
/tensorflow

 


 

docker container ls


docker container ls [옵션]

가동 컨테이너 목록 표시

  • 옵션
옵션 설명
--all, -a 실행 또는 정지 상태인 모든 컨테이너 표시
--filter, -f 표시할 컨테이너 필터링
--format 표시 포맷 지정
--last, -n 마지막으로 실행된 n 건의 컨테이너만 표시
--latest, -l 마지막으로 실행된 컨테이너만 표시
--no-trunc 정보를 생략하지 않고 표시
--quiet, -q 컨테이너 ID만 표시
--size, -s 파일 크기 표시
  • 컨테이너 목록 표시
  • -a 옵션 지정 시 정지된 컨테이너도 모두 표시
[root@localhost ~]# docker container ls
CONTAINER ID   IMAGE     COMMAND                  CREATED             STATUS             PORTS                                   NAMES
45325b667e38   nginx     "/docker-entrypoint.…"   About an hour ago   Up About an hour   80/tcp                                  kind_shockley
8e2c60372da5   nginx     "/docker-entrypoint.…"   2 hours ago         Up 2 hours         0.0.0.0:8080->80/tcp, :::8080->80/tcp   infallible_babbage
f993f6095f32   centos    "/bin/bash"              2 hours ago         Up 2 hours                                                 musing_bouman
83dd784a5b42   centos    "/bin/ping localhost"    2 hours ago         Up 2 hours                                                 thirsty_blackwell

 

  • 컨테이너 목록 필터링
  • 필터링 조건은 key=value로 지정
[root@localhost ~]# docker container ls -a -f name=kind_shockley
CONTAINER ID   IMAGE     COMMAND                  CREATED             STATUS             PORTS     NAMES
45325b667e38   nginx     "/docker-entrypoint.…"   About an hour ago   Up About an hour   80/tcp    kind_shockley

필터링 옵션 목록

 

  • 컨테이너 목록의 출력 형식 지정
  • --format 옵션 지정
  • 컨테이너 이름과 컨테이너의 상태를 콜론으로 구분하여 표시
[root@localhost ~]# docker container ls -a --format "{{.Names}}: {{.Status}}"
gifted_hoover: Exited (0) 50 minutes ago
kind_clarke: Exited (0) 51 minutes ago
gifted_hodgkin: Exited (0) 55 minutes ago
hungry_ramanujan: Exited (0) 59 minutes ago

 

  • 컨테이너 목록을 표 형식으로 출력
[root@localhost ~]# docker container ls -a --format "table {{.Names}}\t{{.Status}}\t {{.Mounts}}"
NAMES                   STATUS                            MOUNTS
gifted_hoover           Exited (0) 52 minutes ago         /tmp
kind_clarke             Exited (0) 53 minutes ago         /tmp
gifted_hodgkin          Exited (0) 57 minutes ago         /tmp
hungry_ramanujan        Exited (0) About an hour ago      /khj

 


 

docker container stats


docker container stats [컨테이너 식별자]

컨테이너 가동 확인

  • 작동하고 있는 컨테이너의 가동 상태 확인
  • 상태 확인이 끝나면 ctrl + c를 눌러 명령을 종료함
[root@localhost ~]# docker container stats test1
CONTAINER ID   NAME      CPU %     MEM USAGE / LIMIT   MEM %     NET I/O   BLOCK I/O   PIDS
932901bf1889   test1     0.00%     0B / 0B             0.00%     0B / 0B   0B / 0B     0

 

  • 프로세스 확인
  • 컨테이너에서 실행 중인 프로세스를 확인할 때는 docker container top 명령 사용
  • kind_shockley라는 이름의 컨테이너에서 작동하고 있는 프로세스 확인
[root@localhost ~]# docker container top kind_shockley
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                8392                8373                0                   14:52               ?                   00:00:00            nginx: master process nginx -g daemon off;
101                 8442                8392                0                   14:52               ?                   00:00:00            nginx: worker process

 

728x90
728x90

Docker 컨테이너 생성 / 시작 / 정지


docker container create 

컨테이너 생성

  • 이미지 종류에 따라 옵션이 다름
  • 쉘을 실행하는 이미지는 컨테이너 생성 시 -it 옵션 필요 > 실행 시 -ai 옵션을 사용할 경우에만 연결 가능
  • 서비스(데몬프로세스)를 실행하는 이미지는 생성 시 옵션 불필요 > 실행 시 -ai 옵션을 사용하면 이후 작업 불가
  • 옵션
옵션 설명
-it 입출력이 필요한 경우 (쉘을 실행할 때)
--rm 컨테이너 종료 시 자동 삭제
--name 컨테이너 이름 지정
[root@localhost ~]# docker container create -it --name con alpine
f2bb03a8c49cf20355c79ea82957b6c9f9fbb338945b448cfbd71edacb5ddd1b
[root@localhost ~]#
[root@localhost ~]# docker container ls
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@localhost ~]# docker container start -ai con
/ # echo hello world
hello world

 


 

docker container start [옵션] <컨테이너 식별자> [컨테이너 식별자]

컨테이너 시작

  • 정지하고 있는 컨테이너를 시작할 때 사용
  • 옵션
옵션 설명
--attach, -a 표준 출력, 표준 오류 출력을 연다
--interactive, -i 컨테이너의 표준 입력을 연다
  • Docker 컨테이너 시작
  • 여러 개의 컨테이너를 한꺼번에 시작하고 싶을 경우 인수에 컨테이너 식별자를 여러 개 지정
[root@localhost ~]# docker container ps -a
CONTAINER ID   IMAGE      COMMAND                  CREATED             STATUS                           PORTS                                   NAMES
ca9c3494106b   centos     "/bin/bash"              28 minutes ago      Exited (0) 21 minutes ago                                                clever_williams

[root@localhost ~]# docker container start ca9c3494106b
ca9c3494106b

[root@localhost ~]# docker container ps
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS         PORTS                                   NAMES
ca9c3494106b   centos    "/bin/bash"              29 minutes ago   Up 8 seconds                                           clever_williams

 


 

docker container stop [옵션] <컨테이너 식별자> [컨테이너 식별자]

컨테이너 정지

  • 실행 중인 컨테이너를 정지할 때 사용
  • 옵션
옵션 설명
--time, -t 컨테이너의 정지 시간 지정 (기본 값: 10초)
  • 컨테이너 정지
  • 컨테이너 강제 정지: docker container kill [컨테이너 식별자]
  • 컨테이너 ID가 ca9c3494106b인 컨테이너를 2초 후에 정지
[root@localhost ~]# docker container stop -t 2 ca9c3494106b
ca9c3494106b

 

 


 

docker container restart [옵션] <컨테이너 식별자> [컨테이너 식별자]

컨테이너 재시작

  • 옵션
옵션 설명
--time, -t 컨테이너의 재시작 시간 지정 (기본 값: 10초)
  • 컨테이너 재시작
[root@localhost ~]# docker container restart -t 2 ca9c3494106b
ca9c3494106b

[root@localhost ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS         PORTS     NAMES
ca9c3494106b   centos    "/bin/bash"              38 minutes ago   Up 2 seconds             clever_williams

 

 


 

docker container rm [옵션] <컨테이너 식별자> [컨테이너 식별자]

컨테이너 정지

  • 옵션
옵션 설명
--force, -f 실행 중인 컨테이너 강제 삭제
--volumes, -v 할당한 볼륨 삭제

 

  • 컨테이너 삭제
# 정지 상태인 e2f2d745e33f 컨테이너 삭제
[root@localhost ~]# docker container rm e2f2d745e33f
e2f2d745e33f

# 실행 상태인 ca9c3494106b 컨테이너 강제 삭제
[root@localhost ~]# docker container rm -f ca9c3494106b
ca9c3494106b

 

  • 정지 상태인 모든 컨테이너 삭제: docker container prune
[root@localhost ~]# docker container prune
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
...
Total reclaimed space: 2.363kB
728x90
728x90

Docker 이미지 조작


docker image pull [옵션] 이미지명:태그명

이미지 다운로드

  • 태그명 생략 시 최신 버전 다운로드 (latest)
  • centos 이미지 다운로드
docker image pull centos:7
  • centos의 모든 태그 이미지 다운로드 (-a)
docker image pull -a centos

 

docker image ls [옵션] [레포지토리명]

이미지 목록 출력

  • 옵션
옵션 설명
-all, -a 모든 이미지 표시
--digests *다이제스트를 표시할지 말지
--no-trunc 결과를 모두 표시
--quiet, -q Docker 이미지 ID만 표시
    * 다이제스트: 이미지를 고유하게 식별하기 위해 부여됨
  • 이미지 목록 표시
docker image ls

 

docker image inspect

이미지 상세 정보 확인

  • 이미지 ID
  • 작성일
  • Docker 버전
  • CPU 아키텍처
docker image inspect centos:7

 

docker image tag

이미지 태그 설정

  • 일반적으로 식별하기 쉬운 버전명으로 지정
  • nginx 이미지에 대해 사용자명이 khj, 컨테이너명이 web, 버전 정보가 1.0인 태그 설정
  • 태그를 붙인 이미지(khj/web)와 원래 이미지(nginx)의 IMAGE ID가 동일한 것을 확인할 수 있음 => 실체가 같음
  • 태그는 별명과 같음
[root@localhost ~]# docker image ls

REPOSITORY   TAG        IMAGE ID       CREATED        SIZE
nginx        latest     0e901e68141f   2 weeks ago    142MB

[root@localhost ~]# docker image tag nginx khj/web:1.0
[root@localhost ~]# docker image ls

REPOSITORY   TAG        IMAGE ID       CREATED        SIZE
khj/web      1.0        0e901e68141f   2 weeks ago    142MB
nginx        latest     0e901e68141f   2 weeks ago    142MB

 

docker image rm [옵션] 이미지명 [이미지명]

이미지 삭제

  • 이미지명은 [REPOSITORY] 또는 [IMAGE ID]를 지정
  • 옵션
옵션 설명
--force, -f 이미지 강제 삭제
--no-prune 중간 이미지를 삭제하지 않음
[root@localhost ~]# docker image ls
REPOSITORY   TAG        IMAGE ID       CREATED        SIZE
nginx        latest     0e901e68141f   2 weeks ago    142MB
khj/web      1.0        0e901e68141f   2 weeks ago    142MB

[root@localhost ~]# docker image rm nginx
[root@localhost ~]# docker image rm 0e901e68141f

 

docker image prune [옵션]

사용하지 않는 Docker 이미지 삭제

  • 사용하지 않는 Docker 이미지는 디스크 용량을 차지하므로 정기적으로 삭제하는 것을 권장
  • 옵션
옵션 설명
--all, -a 사용하지 않는 이미지 모두 삭제
--force, -f 이미지 강제 삭제

 

728x90
728x90

실습 가이드


실습 환경 정리

모든 컨테이너 및 이미지 삭제

docker container rm $(docker ps -aq)
docker image prune

 

이미지 다운로드

apline 이미지를 제외한 나머지 이미지 다운로드 시 태그 입력

  • centos:7
  • alpine
  • httpd:latest
  • mysql:5.6

 

설치한 이미지 확인

  • 목록 확인
  • centos:7 이미지의 상세 정보 확인
  • 상세 정보에서 쉘을 실행하는 이미지 확인 (CMD 부분)

 

컨테이너 실행

컨테이너 이름 컨테이너 이미지 사용 명령어
web / web2 httpd create, start / run
os / os2 centos:7 create, start / run
지정하지 않음 hello-world 컨테이너 생성 후 자동 삭제되도록 생성
a1 alpine x
x mysql x

 

리소스 정리

1. 동작 중인 컨테이너들을 하나씩 종료할 것

2. 종료된 컨테이너들 모두 삭제

3. 로컬 이미지들 중 hello-world 이미지 삭제

 


실습


이미지 다운로드

[root@localhost ~]# docker image pull centos:7
[root@localhost ~]# docker image pull alpine
[root@localhost ~]# docker image pull httpd:latest
[root@localhost ~]# docker image pull mysql:5.6

 


 

설치한 이미지 확인

다운로드한 이미지 목록 확인

[root@localhost ~]# docker image ls

 

 

centos:7 이미지의 상세 정보 확인 및 쉘(CMD)을 실행하는 이미지 확인

[root@localhost ~]# docker image inspect centos:7

 

 


 

컨테이너 실행

web 컨테이너 생성 후 시작

[root@localhost ~]# docker container create -it --name web httpd
799485e6b3597d82fdfb225f6deb6eceae4a8b689cc7d84b3365e42b35da61fe

[root@localhost ~]# docker container start web
web
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE     COMMAND              CREATED         STATUS         PORTS     NAMES
799485e6b359   httpd     "httpd-foreground"   2 minutes ago   Up 3 seconds   80/tcp    web

 

os 컨테이너 생성 후 시작

[root@localhost ~]# docker container create -it --name os centos:7
9296e610d97cc497b7737340db3f72395553cc0d92728311097892f5d28aa3b0

[root@localhost ~]# docker container start os
os
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE      COMMAND              CREATED          STATUS         PORTS     NAMES
9296e610d97c   centos:7   "/bin/bash"          10 seconds ago   Up 2 seconds             os
799485e6b359   httpd      "httpd-foreground"   6 minutes ago    Up 3 minutes   80/tcp    web

[root@localhost ~]# docker container start -ai os
[root@9296e610d97c /]#

 

run 명령어를 사용하여 컨테이너 실행

[root@localhost ~]# docker container run -itd --name web2 httpd
193ab34ff573679a5e8f55333ff09bf43b7e0e83647a68d41d7cab6d77423d4e

[root@localhost ~]# docker container run -itd --name os2 centos:7
99c412c8b7f0632f3acbe163c151194a40deee805909ca8597ec22eaba0dc97b

[root@localhost ~]# docker ps
CONTAINER ID   IMAGE      COMMAND              CREATED              STATUS              PORTS     NAMES
99c412c8b7f0   centos:7   "/bin/bash"          3 seconds ago        Up 2 seconds                  os2
193ab34ff573   httpd      "httpd-foreground"   About a minute ago   Up About a minute   80/tcp    web2

 

hello-world 이미지로 컨테이너 생성, 실행 종료 후 자동 삭제

[root@localhost ~]# docker container run -it --rm hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
2db29710123e: Pull complete
Digest: sha256:80f31da1ac7b312ba29d65080fddf797dd76acfb870e677f390d5acba9741b17
Status: Downloaded newer image for hello-world:latest

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/

[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE      COMMAND              CREATED              STATUS              PORTS     NAMES
99c412c8b7f0   centos:7   "/bin/bash"          About a minute ago   Up About a minute             os2
193ab34ff573   httpd      "httpd-foreground"   3 minutes ago        Up 3 minutes        80/tcp    web2
799485e6b359   httpd      "httpd-foreground"   18 minutes ago       Up 15 minutes       80/tcp    web

 

alpine 이미지로 a1이라는 이름의 컨테이너 실행

[root@localhost ~]# docker container run -itd --name a1 alpine
21036dfa3e9a8addac5f26182f84c5458f03d9c982b0f88f8b948237d30b35c0

[root@localhost ~]# docker ps
CONTAINER ID   IMAGE      COMMAND              CREATED          STATUS          PORTS     NAMES
21036dfa3e9a   alpine     "/bin/sh"            4 seconds ago    Up 2 seconds              a1

 

mysql 이미지 실행

# mysql 이미지를 사용한 mysql-cont 컨테이너 생성 및 실행
[root@localhost ~]# docker container run --name mysql-cont -e MYSQL_ROOT_PASSWORD=123 -d -p 3306:3306 mysql:5.6
296611bf58024dd2002b03f765d71431f2e66049d2b23def092111fc5d2f9c9c

# 실행 상태인 mysql-cont 확인
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE       COMMAND                  CREATED          STATUS          PORTS                                       NAMES
296611bf5802   mysql:5.6   "docker-entrypoint.s…"   5 seconds ago    Up 3 seconds    0.0.0.0:3306->3306/tcp, :::3306->3306/tcp   mysql-cont

# mysql-cont 컨테이너 접속
[root@localhost ~]# docker exec -it mysql-cont bash
root@296611bf5802:/# mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.51 MySQL Community Server (GPL)

Copyright (c) 2000, 2021, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

 


 

리소스 정리

동작 중인 컨테이너들을 하나씩 종료

[root@localhost ~]# docker ps
CONTAINER ID   IMAGE       COMMAND                  CREATED          STATUS          PORTS                                       NAMES
296611bf5802   mysql:5.6   "docker-entrypoint.s…"   3 minutes ago    Up 3 minutes    0.0.0.0:3306->3306/tcp, :::3306->3306/tcp   mysql-cont
21036dfa3e9a   alpine      "/bin/sh"                13 minutes ago   Up 13 minutes                                               a1
99c412c8b7f0   centos:7    "/bin/bash"              17 minutes ago   Up 17 minutes                                               os2
193ab34ff573   httpd       "httpd-foreground"       18 minutes ago   Up 18 minutes   80/tcp                                      web2
799485e6b359   httpd       "httpd-foreground"       33 minutes ago   Up 31 minutes   80/tcp                                      web

[root@localhost ~]# docker container stop mysql-cont
mysql-cont

[root@localhost ~]# docker container stop a1
a1

[root@localhost ~]# docker container stop os2 web2 web
os2
web2
web

[root@localhost ~]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

 

종료된 컨테이너들을 모두 삭제

# 실행 중인 컨테이너 목록 확인
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

# 종료 또는 실행 상태의 모든 컨테이너 목록 확인
[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE       COMMAND                  CREATED          STATU   S                          PORTS     NAMES
296611bf5802   mysql:5.6   "docker-entrypoint.s…"   6 minutes ago    Exite   d (0) About a minute ago             mysql-cont
4e9e5157f459   mysql:5.6   "docker-entrypoint.s…"   13 minutes ago   Exite   d (1) 9 minutes ago                  mysql-con
d19fc975900a   mysql:5.6   "docker-entrypoint.s…"   15 minutes ago   Exite   d (1) 15 minutes ago                 sweet_greider
21036dfa3e9a   alpine      "/bin/sh"                16 minutes ago   Exite   d (137) 56 seconds ago               a1
99c412c8b7f0   centos:7    "/bin/bash"              20 minutes ago   Exite   d (137) 35 seconds ago               os2
193ab34ff573   httpd       "httpd-foreground"       21 minutes ago   Exite   d (0) 44 seconds ago                 web2
799485e6b359   httpd       "httpd-foreground"       37 minutes ago   Exite   d (0) 44 seconds ago                 web

# 컨테이너 이름으로 하나씩 삭제
[root@localhost ~]# docker container rm mysql-cont
mysql-cont

[root@localhost ~]# docker container rm mysql-con
mysql-con

# 컨테이너 ID를 이용하여 여러 개 한 번에 삭제
[root@localhost ~]# docker container rm d19fc975900a 21036dfa3e9a 99c412c8b7f0
d19fc975900a
21036dfa3e9a
99c412c8b7f0

# 남아있는 컨테이너 목록 확인
[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE     COMMAND              CREATED          STATUS                     PORTS     NAMES
193ab34ff573   httpd     "httpd-foreground"   23 minutes ago   Exited (0) 2 minutes ago             web2
799485e6b359   httpd     "httpd-foreground"   38 minutes ago   Exited (0) 2 minutes ago             web

# 실행하고 있지 않은 모든 컨테이너 삭제
[root@localhost ~]# docker container prune
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
Deleted Containers:
193ab34ff573679a5e8f55333ff09bf43b7e0e83647a68d41d7cab6d77423d4e
799485e6b3597d82fdfb225f6deb6eceae4a8b689cc7d84b3365e42b35da61fe

Total reclaimed space: 0B

[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

 

로컬 이미지들 중 hello-world 이미지 삭제

[root@localhost ~]# docker image ls
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
httpd         latest    b260a49eebf9   33 hours ago   145MB
alpine        latest    e66264b98777   3 weeks ago    5.53MB
mysql         5.6       dd3b2a5dcb48   5 months ago   303MB
hello-world   latest    feb5d9fea6a5   8 months ago   13.3kB
centos        7         eeb6ee3f44bd   9 months ago   204MB

[root@localhost ~]# docker image rm hello-world
Untagged: hello-world:latest
Untagged: hello-world@sha256:80f31da1ac7b312ba29d65080fddf797dd76acfb870e677f390d5acba9741b17
Deleted: sha256:feb5d9fea6a5e9606aa995e879d862b825965ba48de054caab5ef356dc6b3412
Deleted: sha256:e07ee1baac5fae6a26f30cabfe54a36d3402f96afda318fe0a96cec4ca393359

[root@localhost ~]# docker image ls
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
httpd        latest    b260a49eebf9   33 hours ago   145MB
alpine       latest    e66264b98777   3 weeks ago    5.53MB
mysql        5.6       dd3b2a5dcb48   5 months ago   303MB
centos       7         eeb6ee3f44bd   9 months ago   204MB
728x90

+ Recent posts