Docker Command
Table of contents
- docker container ps -a
- docker image ls -a
- docker image inspect
- docker image rm
- docker login
- docker image pull
- docker image tag
- docker system prune
- docker container commit
- docker image history
- docker container create
- docker container start
- docker container stop
- docker container run
- docker container attach
- docker container cp
- docker container rm
- docker container diff
도커 컨테이너 실행을 위한 개념과 관련 명령어를 정리한다.
  docker container ps -a
컨테이너는 프로세스이므로 ps 로 조회한다.
실시간 상태 조회 :
watch -n 1 docker container ps -a
  docker image ls -a
이미지는 파일이므로 ls 로 조회한다.
root@docker1:~# docker image ls -a
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
nginx        latest    1403e55ab369   2 weeks ago     142MB
centos       latest    5d0da3dc9764   16 months ago   231MB
root@docker1:~#
  docker image inspect
이미지의 상세정보를 출력한다.
root@docker1:~# docker image inspect centos
[
    {
        "Id": "sha256:5d0da3dc976460b72c77d94c8a1ad043720b0416bfc16c52c45d4847e53fadb6",
        "RepoTags": [
            "centos:latest"
        ],
        "RepoDigests": [
            "centos@sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177"
        ],
        "Parent": "",
        "Comment": "",
        "Created": "2021-09-15T18:20:05.184694267Z",
        "Container": "9bf8a9e2ddff4c0d76a587c40239679f29c863a967f23abf7a5babb6c2121bf1",
        "ContainerConfig": {
            "Hostname": "9bf8a9e2ddff",
            "Domainname": "",
  docker image rm
호스트에서 이미지를 삭제한다.
root@docker1:~# docker image ls
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
nginx        latest    1403e55ab369   2 weeks ago     142MB
centos       latest    5d0da3dc9764   16 months ago   231MB
root@docker1:~#
root@docker1:~#
root@docker1:~# docker image rm centos
Untagged: centos:latest
Untagged: centos@sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177
Deleted: sha256:5d0da3dc976460b72c77d94c8a1ad043720b0416bfc16c52c45d4847e53fadb6
Deleted: sha256:74ddd0ec08fa43d09f32636ba91a0a3053b02cb4627c35051aff89f853606b59
root@docker1:~#
root@docker1:~# docker image ls
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
nginx        latest    1403e55ab369   2 weeks ago   142MB
root@docker1:~#
// 사용하지 않는 이미지 일괄 삭제
root@docker1:~# docker image prune -a
WARNING! This will remove all images without at least one container associated to them.
Are you sure you want to continue? [y/N] y
  docker login
도커 레지스트리에 업로드를 하려면 docker login 명령을 통해 로그인해야 한다.
// 로그인
root@docker1:~# 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: testuser
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
root@docker1:~#
root@docker1:~# cat /root/.docker/config.json
{
        "auths": {
                "https://index.docker.io/v1/": {
                        "auth": "ABCDEFJXXXXXXjg1M0Bzag=="
                }
        }
}root@docker1:~#
root@docker1:~#
// 로그 아웃
root@docker1:~# docker logout
Removing login credentials for https://index.docker.io/v1/
  docker image pull
Docker Hub 등의 Docker Registry 로 부터 Docker 이미지를 다운로드한다.
root@docker1:~# docker image pull docker.io/library/busybox:latest
latest: Pulling from library/busybox
205dae5015e7: Pull complete
Digest: sha256:7b3ccabffc97de872a30dfd234fd972a66d247c8cfc69b0550f276481852627c
Status: Downloaded newer image for busybox:latest
docker.io/library/busybox:latest
  docker image tag
이미지를 구분하기 위한 tag 를 새롭게 붙일 때 사용한다.
root@docker1:~# docker image ls -a
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
busybox      latest    66ba00ad3de8   5 days ago    4.87MB
nginx        latest    1403e55ab369   2 weeks ago   142MB
root@docker1:~#
// busybox 다운로드
root@docker1:~# docker image pull busybox
Using default tag: latest
latest: Pulling from library/busybox
Digest: sha256:7b3ccabffc97de872a30dfd234fd972a66d247c8cfc69b0550f276481852627c
Status: Image is up to date for busybox:latest
docker.io/library/busybox:latest
root@docker1:~#
// testuser/box 의 1.0 으로 생성
root@docker1:~# docker image tag busybox testuser/box:1.0
root@docker1:~#
// nginx 다운로드
root@docker1:~# docker image pull nginx
Using default tag: latest
latest: Pulling from library/nginx
Digest: sha256:0047b729188a15da49380d9506d65959cce6d40291ccfb4e039f5dc7efd33286
Status: Image is up to date for nginx:latest
docker.io/library/nginx:latest
root@docker1:~#
// testuser/web-server 1.0 태그로 생성
root@docker1:~# docker image tag nginx testuser/web-server:1.0
root@docker1:~#
// 생성됐는지 조회
// 원래 이미지와 생성한 이미지의 IMAGE ID 가 동일하다.
root@docker1:~# docker image ls -a
REPOSITORY          TAG       IMAGE ID       CREATED       SIZE
testuser/box          1.0       66ba00ad3de8   5 days ago    4.87MB
busybox             latest    66ba00ad3de8   5 days ago    4.87MB
nginx               latest    1403e55ab369   2 weeks ago   142MB
testuser/web-server   1.0       1403e55ab369   2 weeks ago   142MB
root@docker1:~#
Docker 레지스트리로부터
pull할 때는 로그인이 필요없으나push할 때는 로그인이 필요하다.
root@docker1:~# docker image push testuser/web-server:1.0
The push refers to repository [docker.io/testuser/web-server]
c72d75f45e5b: Mounted from library/nginx
9a0ef04f57f5: Mounted from library/nginx
d13aea24d2cb: Mounted from library/nginx
2b3eec357807: Mounted from library/nginx
2dadbc36c170: Mounted from library/nginx
8a70d251b653: Mounted from library/nginx
1.0: digest: sha256:9a821cadb1b13cb782ec66445325045b2213459008a41c72d8d87cde94b33c8c size: 1570
root@docker1:~#
도커 이미지가 아래와 같이 PUSH 된 것을 확인할 수 있다.

호스트에서 지운 후 Pull 하면 이미지가 다운로드 된 것을 확인할 수 있다.
root@docker1:~# docker image rm testuser/web-server:1.0
Untagged: testuser/web-server:1.0
Untagged: testuser/web-server@sha256:9a821cadb1b13cb782ec66445325045b2213459008a41c72d8d87cde94b33c8c
root@docker1:~#
root@docker1:~# docker image ls
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
testuser/box   1.0       66ba00ad3de8   5 days ago    4.87MB
busybox      latest    66ba00ad3de8   5 days ago    4.87MB
nginx        latest    1403e55ab369   2 weeks ago   142MB
root@docker1:~#
root@docker1:~# docker image pull testuser/web-server:1.0
1.0: Pulling from testuser/web-server
Digest: sha256:9a821cadb1b13cb782ec66445325045b2213459008a41c72d8d87cde94b33c8c
Status: Downloaded newer image for testuser/web-server:1.0
docker.io/testuser/web-server:1.0
root@docker1:~#
root@docker1:~# docker image ls
REPOSITORY          TAG       IMAGE ID       CREATED       SIZE
testuser/box          1.0       66ba00ad3de8   5 days ago    4.87MB
busybox             latest    66ba00ad3de8   5 days ago    4.87MB
testuser/web-server   1.0       1403e55ab369   2 weeks ago   142MB
nginx               latest    1403e55ab369   2 weeks ago   142MB
root@docker1:~#
  docker system prune
더 이상 사용하지 않는 이미지/컨테이너/네트워크를 일괄 삭제한다.
  docker container commit
이미지 생성에는 두가지 방법이 있다.
- docker container commit와 같이 컨테이너 상태를 기반으로 이미지를 생성하는 방법
- Dockerfile을 빌드(Build) 해서 생성하는 방법이 있다. 후자가 많이 쓰이는 방법이다.

[도커 이미지 생성의 2가지 방법 ]
// ubuntu 를  sample 컨테이너로 만든다.
root@docker1:~# docker run -it --name sample ubuntu
Unable to find image 'ubuntu:latest' locally
latest: Pulling from library/ubuntu
6e3729cf69e0: Pull complete
Digest: sha256:27cb6e6ccef575a4698b66f5de06c7ecd61589132d5a91d098f7f3f9285415a9
Status: Downloaded newer image for ubuntu:latest
root@8a80c4cde61e:/# apt-get update
Get:1 http://security.ubuntu.com/ubuntu jammy-security InRelease [110 kB]
 ...
Get:18 http://archive.ubuntu.com/ubuntu jammy-backports/main amd64 Packages [3520 B]
Fetched 25.1 MB in 1min 38s (257 kB/s)
Reading package lists... Done
root@8a80c4cde61e:/#
// 컨테이너에서 nginx 를 설치한다.
root@8a80c4cde61e:/# apt-get install -y nginx
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
  fontconfig-config fonts-dejavu-core iproute2 libatm1 libbpf0 libbrotli1 libbsd0 libcap2-bin
  libdeflate0 libelf1 libexpat1 libfontconfig1 libfreetype6 libgd3 libicu70 libjbig0 libjpeg-turbo8
  libjpeg8 libmaxminddb0 libmd0 libmnl0 libnginx-mod-http-geoip2 libnginx-mod-http-image-filter
  libnginx-mod-http-xslt-filter libnginx-mod-mail libnginx-mod-stream libnginx-mod-stream-geoip2
  libpam-cap libpng16-16 libtiff5 libwebp7 libx11-6 libx11-data libxau6 libxcb1 libxdmcp6 libxml2
  libxpm4 libxslt1.1 libxtables12 nginx-common nginx-core ucf
Suggested packages:
Setting up nginx (1.18.0-6ubuntu14.3) ...
Processing triggers for libc-bin (2.35-0ubuntu3.1) ...
root@8a80c4cde61e:/# CTRL+PQ
// detach 모드로 전환
root@docker1:~#
root@docker1:~# echo Hello world  > index.html
root@docker1:~# docker container cp index.html   sample:/var/www/html/index.html
// index.html 수정 후 sample 컨테이너를 testuser/web-nginx:1.0 이미지 생성
root@docker1:~# docker container commit -a "TESTUSER" -m "Customized image" sample testuser/web-nginx:1.0
sha256:6f10cf278ad2f4ba4017850c0ced7b77230671e613773bc46dd7822cbcccaba1
root@docker1:~#
// testuser/web-nginx    1.0 이미지 생성 확인
root@docker1:~# docker image ls
REPOSITORY          TAG       IMAGE ID       CREATED         SIZE
testuser/web-nginx    1.0       6f10cf278ad2   8 seconds ago   174MB
busybox             latest    66ba00ad3de8   5 days ago      4.87MB
testuser/box          1.0       66ba00ad3de8   5 days ago      4.87MB
testuser/web-server   1.0       1403e55ab369   2 weeks ago     142MB
nginx               latest    1403e55ab369   2 weeks ago     142MB
ubuntu              latest    6b7dfa7e8fdb   4 weeks ago     77.8MB
root@docker1:~#
// 이미지 상세 확인 (Comment, Author)
root@docker1:~# docker image inspect testuser/web-nginx:1.0
[
    {
        "Id": "sha256:6f10cf278ad2f4ba4017850c0ced7b77230671e613773bc46dd7822cbcccaba1",
        "RepoTags": [
            "testuser/web-nginx:1.0"
        "Comment": "Customized image",
        "Created": "2023-01-09T14:06:44.617231726Z",
        "DockerVersion": "20.10.22",
        "Author": "TESTUSER",
| [##_Image | kage@da6tcx/btsjkiihTDb/zgfvyFqTXkcOQVUDunVck0/img.png | CDM | 1.3 | {“originWidth”:881,”originHeight”:130,”style”:”alignCenter”,”caption”:”도커 이미지 Push 상태 확인”,”filename”:”edited_blob”}_##] | 
 // 도커이미지에서 testuser/web-nginx:1.0 를 가져와 컨테이너를 생성한다.
 root@docker1:~# docker container run -d --name web -p 8080:80 testuser/web-nginx:1.0  nginx -g 'daemon off; '
Unable to find image 'testuser/web-nginx:1.0' locally
1.0: Pulling from testuser/web-nginx
6e3729cf69e0: Already exists
7c9aaa2fac99: Pull complete
Digest: sha256:4150994823e51b64caa7b5ccdbb543703e776d519596562b02a9a127ffe770c0
Status: Downloaded newer image for testuser/web-nginx:1.0
dd4e6613c4cf4ada677b19c67cfb2656d2849d72410850a80a0d6c76cc4f35bb
// 가져온 이미지가 있다!!
root@docker1:~# docker image ls
REPOSITORY          TAG       IMAGE ID       CREATED          SIZE
testuser/web-nginx    1.0       6f10cf278ad2   23 minutes ago   174MB
testuser/box          1.0       66ba00ad3de8   5 days ago       4.87MB
busybox             latest    66ba00ad3de8   5 days ago       4.87MB
testuser/web-server   1.0       1403e55ab369   2 weeks ago      142MB
nginx               latest    1403e55ab369   2 weeks ago      142MB
ubuntu              latest    6b7dfa7e8fdb   4 weeks ago      77.8MB
web 이란 이름의 컨테이너 생성확인
Every 1.0s: docker container ps -a                                                                                                docker1: Mon Jan  9 14:23:23 2023
CONTAINER ID   IMAGE                  COMMAND                  CREATED          STATUS          PORTS                                   NAMES
dd4e6613c4cf   testuser/web-nginx:1.0   "nginx -g 'daemon of…"   36 seconds ago   Up 35 seconds   0.0.0.0:8080->80/tcp, :::8080->80/tcp   web
8a80c4cde61e   ubuntu                 "bash"                   20 minutes ago   Up 20 minutes                                           sample
localhost:8080 접속 확인
| [##_Image | kage@bzUgM6/btsjkFYTbkU/8AzXGVzjQqZ50V21OfSdKK/img.png | CDM | 1.3 | {“originWidth”:675,”originHeight”:181,”style”:”alignLeft”}_##] | 
  docker image history
이미지를 생성할 때 어떤 명령이 실행됐는지 확인
root@docker1:~/labfile/dockerfile_dir# docker image history file00
IMAGE          CREATED          CREATED BY                                      SIZE      COMMENT
5a0fa506014b   24 minutes ago   /bin/sh -c #(nop) COPY file:d1f4434c224263e4…   182B
b19bf7d0d6c5   24 minutes ago   /bin/sh -c #(nop) ADD file:93679052316aa8731…   60B
48bbcf3a8eb9   24 minutes ago   /bin/sh -c #(nop) ADD 622787ee69d99fd65381b7…   210kB
f5909d2eaad6   24 minutes ago   /bin/sh -c #(nop) COPY file:c849731474b116b7…   163kB
a9ad95733e3c   24 minutes ago   /bin/sh -c #(nop) ADD file:c849731474b116b74…   163kB
6b7dfa7e8fdb   4 weeks ago      /bin/sh -c #(nop)  CMD ["bash"]                 0B
<missing>      4 weeks ago      /bin/sh -c #(nop) ADD file:481dd2da6de715252…   77.8MB
root@docker1:~/labfile/dockerfile_dir#
root@docker1:~/labfile/dockerfile_dir# docker image history file00 --no-trunc
IMAGE                                                                     CREATED          CREATE                                     D BY                                                                                                                                                  SIZE      COMMENT
sha256:5a0fa506014b34bacab3717be24c1351aff9ecab9e2368d9d1e3e7b7347ded77   24 minutes ago   /bin/s                                     h -c #(nop) COPY file:d1f4434c224263e494ca1d96889c7976f80fd60648af4bdcd9e8dcae32cbc46c in /test_d                                     ir/             182B
sha256:b19bf7d0d6c5ff52dc1086f5f58e9390bbe72c1c6f2e77d208bfd40321ddcebd   24 minutes ago   /bin/s                                     h -c #(nop) ADD file:93679052316aa8731d3a54bb37cece254064b24078712f99a20746f969b526cb in /test_di                                     r/              60B
sha256:48bbcf3a8eb99f0536f15ff731e412ae7aec8c94d4f411a81403cc3d0844f3b5   24 minutes ago   /bin/s                                     h -c #(nop) ADD 622787ee69d99fd65381b70cc87bbe47bdbe82213236bc5e33db771e6fa11228 in /test_dir/                                                        210kB
sha256:f5909d2eaad6bf5abf0693a7b00a034c091ae7120b58f0cce23f35faafdd560d   24 minutes ago   /bin/s                                     h -c #(nop) COPY file:c849731474b116b7485f4172a68fe1206ec51f0a405cfbf72a11d4eb3fb81fc6 in /test_d                                     ir/copy.html    163kB
sha256:a9ad95733e3c3243ea1cc62669a88fb9e48defc9012039c385f49e503c84ad82   24 minutes ago   /bin/s                                     h -c #(nop) ADD file:c849731474b116b7485f4172a68fe1206ec51f0a405cfbf72a11d4eb3fb81fc6 in /test_di                                     r/add.html      163kB
sha256:6b7dfa7e8fdbe18ad425dd965a1049d984f31cf0ad57fa6d5377cca355e65f03   4 weeks ago      /bin/s                                     h -c #(nop)  CMD ["bash"]                                                                                                                             0B
<missing>                                                                 4 weeks ago      /bin/s                                     h -c #(nop) ADD file:481dd2da6de71525248eba186feeeafcc73cc956ade0a196a4e8b0c2424e74b9 in /                                                            77.8MB
--no-trunc : 전체 문자열 넣기
  docker container create
컨테이너를 생성하고 자동으로 시작하지는 않는다.
root@docker1:~# docker container ps -a <-- 컨테이너는 프로세스이므로 ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
root@docker1:~# docker image ls -a <-- 이미지는 파일이므로 ls
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE
root@docker1:~#
root@docker1:~# docker container create -it --name testos centos
unknown flag: --names
See 'docker container create --help'.
root@docker1:~# docker container create -it --name testos centos
Unable to find image 'centos:latest' locally
latest: Pulling from library/centos
a1d0c7532777: Pull complete
Digest: sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177
Status: Downloaded newer image for centos:latest
d2acdab7c45dc1cc2d273839f607bb2b24dfca153714360eb532a0237c56d093
root@docker1:~#
root@docker1:~# docker container ps -a
CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS    PORTS     NAMES
d2acdab7c45d   centos    "/bin/bash"   6 seconds ago   Created             testos
root@docker1:~# docker image ls -a
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
centos       latest    5d0da3dc9764   15 months ago   231MB
root@docker1:~#
docker container create -it --name testos centos
옵션 -i :interactive의미로 표준 입출력을 받을 수 있도록 한다. 컨테이너 내에 shell 같은 기능이 있을 경우 사용한다.
옵션 -t :tty의미로 컨테이너의 가상 터미널을 의미한다.
--name testos:testos라는 이름의 컨테이너명을 지정한다.
centos: 로컬 레포지토리에 이미지가 없으면, 기본은docker image에서 이미지를 pull 한다. 한 번 pull 한 이미지는 재사용이 가능하다.
  docker container start
컨테이너를 시작한다.
root@docker1:~# docker container start -ai testos <-- 기존 생성했던 컨테이너
[root@d2acdab7c45d /]# ps -e <-- 컨테이너 내부로 들어옴.
  PID TTY          TIME CMD
    1 pts/0    00:00:00 bash
   14 pts/0    00:00:00 ps
[root@d2acdab7c45d /]# <-- ctrl+P+Q 단축키로 detach 모드로 전환(컨테이너 살아있음, exit 명령을 사용하면 bin/bash 종료되면서 컨테이너도 함께 종료된다.
[root@d2acdab7c45d /]# root@docker1:~#
root@docker1:~#
root@docker1:~# docker container ps -a
CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS              PORTS     NAMES
d2acdab7c45d   centos    "/bin/bash"   14 minutes ago   Up About a minute             testos
root@docker1:~#
옵션 -a :
attach의 의미로 해당 컨테이너 내부로 접근하는 것을 의미한다
  docker container stop
컨테이너를 종료한다.
root@docker1:~# docker container stop testos
testos
root@docker1:~# docker container ps -a
CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS                     PORTS     NAMES
d2acdab7c45d   centos    "/bin/bash"   18 minutes ago   Exited (0) 3 seconds ago             testos
root@docker1:~#
  docker container run
컨테이너를 시작하고(없으면 생성), COMMAND(PID=1 프로세스, 도커 엔진에 의해서 격리될 프로세스) 를 실행한다.
root@docker1:~# docker container run -it --name testos centos
[root@2b87afc91519 /]# ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 06:39 pts/0    00:00:00 /bin/bash
root        17     1  0 06:40 pts/0    00:00:00 ps -ef
[root@2b87afc91519 /]# hostname
2b87afc91519
Detach 모드로 전환 후 생성한 컨테이너 조회한다.
[root@2b87afc91519 /]# root@docker1:~# 
root@docker1:~# docker container ps -a
CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS         PORTS     NAMES
2b87afc91519   centos    "/bin/bash"   4 minutes ago   Up 4 minutes             testos
root@docker1:~#
컨테이너를 생성 이후 시작할 때 COMMAND 를 임의로 정의할 수 있다.
root@docker1:~# docker container run -it --name testos1 centos /bin/date
Sun Jan  8 06:46:12 UTC 2023
root@docker1:~#
root@docker1:~# docker container ps -a
CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS                      PORTS     NAMES
cfd15085385b   centos    "/bin/date"   38 seconds ago   Exited (0) 37 seconds ago             testos1
2b87afc91519   centos    "/bin/bash"   7 minutes ago    Up 7 minutes                          testos
root@docker1:~#
여기서
/bin/date는 시작 후 바로 종료되는 프로세스이므로 해당 컨테이너는 종료된다. 다른 예로서 AI 계산에 이용되는 컨테이너가 될 수 있다.
-d (--detach) : 컨테이너 PID 1 번 프로세스를 백그라운드로 실행하기 위해서는 -d 옵션을 사용한다.
root@docker1:~# docker container run -d --name testos2 centos /bin/ping localhost
49301e70f50e8a954ec3974a5cfbd5fecee85ded760b38abbfeff385681acfdf
root@docker1:~#
root@docker1:~# docker container logs testos2 <-- 로그 파일이 아닌 1번의 출력 내용
PING localhost (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.072 ms
64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.054 ms
64 bytes from localhost (127.0.0.1): icmp_seq=3 ttl=64 time=0.051 ms
64 bytes from localhost (127.0.0.1): icmp_seq=4 ttl=64 time=0.064 ms
64 bytes from localhost (127.0.0.1): icmp_seq=5 ttl=64 time=0.102 ms
64 bytes from localhost (127.0.0.1): icmp_seq=6 ttl=64 time=0.053 ms
root@docker1:~#
root@docker1:~# docker container exec -it testos2 /bin/bash <-- exec: 1번 프로세스 외의 추가 프로그램 실행
[root@49301e70f50e /]# ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 06:58 ?        00:00:00 /bin/ping localhost
root         6     0  0 06:59 pts/0    00:00:00 /bin/bash
root        19     6  0 06:59 pts/0    00:00:00 ps -ef
[root@49301e70f50e /]#
[root@49301e70f50e /]# read escape sequence
root@docker1:~# docker container ps -a
CONTAINER ID   IMAGE     COMMAND                 CREATED              STATUS                      PORTS                     NAMES
49301e70f50e   centos    "/bin/ping localhost"   About a minute ago   Up About a minute                                     testos2
cfd15085385b   centos    "/bin/date"             13 minutes ago       Exited (0) 13 minutes ago                             testos1
2b87afc91519   centos    "/bin/bash"             20 minutes ago       Up 20 minutes                                         testos
  docker container attach
컨테이너 내부에 접근하여 PID 1 번 프로세스에 접근한다.
root@docker1:~# docker container run -it --name testos3 centos
[root@f1817a32d216 /]# root@docker1:~# <-- detach 모드로 변경
root@docker1:~# docker container ps -a
CONTAINER ID   IMAGE     COMMAND                 CREATED          STATUS                      PORTS     NAMES
f1817a32d216   centos    "/bin/bash"             17 seconds ago   Up 16 seconds                         testos3
49301e70f50e   centos    "/bin/ping localhost"   7 minutes ago    Up 7 minutes                          testos2
cfd15085385b   centos    "/bin/date"             19 minutes ago   Exited (0) 19 minutes ago             testos1
2b87afc91519   centos    "/bin/bash"             26 minutes ago   Up 26 minutes                         testos
root@docker1:~#
root@docker1:~# docker container attach testos3 <-- testos3 의 컨테이너로 접근
[root@f1817a32d216 /]# ps -e
  PID TTY          TIME CMD
    1 pts/0    00:00:00 bash
   14 pts/0    00:00:00 ps
[root@f1817a32d216 /]#
  docker container cp
컨테이너와 호스트 간의 파일을 복사할 수 있따.
root@docker1:~# docker container run -itd --name=testos5 centos
8133bc90c42bb60337c4c43bacac0dc081c3994710b2973d45b5fbd81283103f
root@docker1:~#
root@docker1:~# docker container ps -a
CONTAINER ID   IMAGE     COMMAND                 CREATED          STATUS                      PORTS     NAMES
8133bc90c42b   centos    "/bin/bash"             8 seconds ago    Up 7 seconds                          testos5
76cd9ce3f900   centos    "/bin/bash"             2 minutes ago    Exited (0) 2 minutes ago              testos4
f1817a32d216   centos    "/bin/bash"             5 minutes ago    Up 5 minutes                          testos3
49301e70f50e   centos    "/bin/ping localhost"   12 minutes ago   Up 12 minutes                         testos2
cfd15085385b   centos    "/bin/date"             24 minutes ago   Exited (0) 24 minutes ago             testos1
2b87afc91519   centos    "/bin/bash"             31 minutes ago   Up 31 minutes                         testos
root@docker1:~#
root@docker1:~# echo "hello world.." > hostfile <-- 호스트에서 파일 생성
root@docker1:~#
root@docker1:~# docker container cp hostfile testos5:/containerfile <-- 호스트에서 컨테이너로 복사
root@docker1:~#
root@docker1:~# docker container exec testos5 ls -l /containerfile <-- 컨테이너에 접근 및 파일 조회
-rw-r--r-- 1 root root 14 Jan  8 07:11 /containerfile
root@docker1:~#
root@docker1:~#
root@docker1:~# ls -l containerfile
ls: cannot access 'containerfile': No such file or directory
root@docker1:~#
root@docker1:~# docker container cp testos5:/containerfile containerfile  <-- 컨테이너에서 호스트로 파일 복사
root@docker1:~# ls -l containerfile <-- 호스트에 파일 조회
-rw-r--r-- 1 root root 14 Jan  8 07:11 containerfile
  docker container rm
컨테이너 삭제할 수 있으며 강제 삭제의 경우에는 -f 옵션을 추가한다.
root@docker1:~# docker container ps -a
CONTAINER ID   IMAGE     COMMAND                 CREATED          STATUS                      PORTS     NAMES
8133bc90c42b   centos    "/bin/bash"             7 minutes ago    Up 7 minutes                          testos5
76cd9ce3f900   centos    "/bin/bash"             10 minutes ago   Exited (0) 10 minutes ago             testos4
f1817a32d216   centos    "/bin/bash"             12 minutes ago   Up 12 minutes                         testos3
49301e70f50e   centos    "/bin/ping localhost"   20 minutes ago   Up 20 minutes                         testos2
cfd15085385b   centos    "/bin/date"             32 minutes ago   Exited (0) 32 minutes ago             testos1
2b87afc91519   centos    "/bin/bash"             39 minutes ago   Up 39 minutes                         testos
root@docker1:~#
root@docker1:~# docker container rm testos5 <-- 삭제
Error response from daemon: You cannot remove a running container 8133bc90c42bb60337c4c43bacac0dc081c3994710b2973d45b5fbd81283103f. Stop the container before attempting removal or force remove
root@docker1:~#
root@docker1:~# docker container rm -f testos5 <-- 강제 삭제
testos5
root@docker1:~# docker container ps -a
CONTAINER ID   IMAGE     COMMAND                 CREATED          STATUS                      PORTS     NAMES
76cd9ce3f900   centos    "/bin/bash"             10 minutes ago   Exited (0) 10 minutes ago             testos4
f1817a32d216   centos    "/bin/bash"             13 minutes ago   Up 13 minutes                         testos3
49301e70f50e   centos    "/bin/ping localhost"   21 minutes ago   Up 21 minutes                         testos2
cfd15085385b   centos    "/bin/date"             33 minutes ago   Exited (0) 33 minutes ago             testos1
2b87afc91519   centos    "/bin/bash"             39 minutes ago   Up 39 minutes                         testos
root@docker1:~#
- 컨테이너 상태 실시간 조회
watch -n 1 docker container ps -a 
Every 1.0s: docker container ps -a                                                      docker1: Sun Jan  8 07:31:20 2023
CONTAINER ID   IMAGE     COMMAND                 CREATED          STATUS                      PORTS     NAMES
76cd9ce3f900   centos    "/bin/bash"             22 minutes ago   Exited (0) 8 minutes ago              testos4
f1817a32d216   centos    "/bin/bash"             25 minutes ago   Up 25 minutes                         testos3
49301e70f50e   centos    "/bin/ping localhost"   33 minutes ago   Up 33 minutes                         testos2
cfd15085385b   centos    "/bin/date"             45 minutes ago   Exited (0) 45 minutes ago             testos1
2b87afc91519   centos    "/bin/bash"             51 minutes ago   Up 51 minutes     
- 이미 종료된 컨테이너들을 일괄 삭제
root@docker1:~# docker container prune
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
Deleted Containers:
76cd9ce3f9004b782084e9f0d54521e6db482f38a2d4d5dcde558a3bac19c789
cfd15085385b656c48a35c4f634984524bf98b406ff6f33d10a33b3d5b852f41
Total reclaimed space: 0B
root@docker1:~#
root@docker1:~#
# docker container rm -f $(docker container ps -aq): up, exited 모든 컨테이너를 일괄삭제
  docker container diff
컨테이너 생성 시점부터 변경된 이력(파일 또는 디렉토리) 을 확인한다.
root@docker1:~# docker container ps -a
CONTAINER ID   IMAGE     COMMAND                 CREATED          STATUS                      PORTS     NAMES
76cd9ce3f900   centos    "/bin/bash"             14 minutes ago   Exited (0) 3 seconds ago              testos4
f1817a32d216   centos    "/bin/bash"             17 minutes ago   Up 17 minutes                         testos3
49301e70f50e   centos    "/bin/ping localhost"   24 minutes ago   Up 24 minutes                         testos2
cfd15085385b   centos    "/bin/date"             36 minutes ago   Exited (0) 36 minutes ago             testos1
2b87afc91519   centos    "/bin/bash"             43 minutes ago   Up 43 minutes                         testos
root@docker1:~# docker container attach testos3 <-- testos3 에 접근
[root@f1817a32d216 /]#
[root@f1817a32d216 /]# useradd containeruser <-- user 추가
[root@f1817a32d216 /]# read escape sequence
root@docker1:~# docker container diff testos3 <-- 이력 조회
C /var
C /var/log
C /var/log/lastlog
C /var/spool
C /var/spool/mail
A /var/spool/mail/containeruser
C /home
A /home/containeruser
A /home/containeruser/.bashrc
A /home/containeruser/.bash_logout
A /home/containeruser/.bash_profile
C /etc
C /etc/group
C /etc/gshadow-
C /etc/passwd
C /etc/shadow
C /etc/passwd-
C /etc/group-
A /etc/subgid-
C /etc/subgid
C /etc/subuid
C /etc/shadow-
A /etc/subuid-
C /etc/gshadow
root@docker1:~#
C: Change,A: Add,D: Delete