컨테이너/도커

Run : 도커 컨테이너 작동

비니화이팅 2022. 10. 18. 01:57

도커 허브

https://hub.docker.com

 

Docker Hub Container Image Library | App Containerization

Build and Ship any Application Anywhere Docker Hub is the world's easiest way to create, manage, and deliver your team's container applications.

hub.docker.com

기능

  1. 이미지 관리
  • 도커 공식 이미지(Official Images) 및 사용자가 작성한 도커 이미지(Verified Publisher) 공개
  1. Github나 Bitbucket과 같은 소스코드 관리툴과 연계하여 코드 빌드

Tag

  • 이미지명 [:태그명]
  • 태그 정보는 베이스가 되는 OS의 버전에 따라 내용이 달라짐
  • Ex) debian:7 → debian의 버전 7을 베이스 이미지로 갖고 있는 도커 이미지

도커 이미지 조작

이미지 목록 표시(docker image ls)

  • docker image ls [옵션] [리포지토리명]
c:\\>docker image ls
REPOSITORY          TAG        IMAGE ID       CREATED         SIZE
docker101tutorial   latest     bbd7bd738e6b   19 hours ago    28.8MB
ubuntu              latest     54c9d81cbb44   10 days ago     72.8MB
nginx               latest     c316d5a335a5   2 weeks ago     142MB
alpine/git          latest     c6b70534b534   2 months ago    27.4MB
centos              6.10       f1af727749c4   4 months ago    194MB
centos              6          5bf9684f4720   4 months ago    194MB
centos              7          eeb6ee3f44bd   4 months ago    204MB
centos              7.9.2009   eeb6ee3f44bd   4 months ago    204MB
centos              8          5d0da3dc9764   4 months ago    231MB
centos              7.8.2003   afb6fca791e0   21 months ago   203MB
centos              8.1.1911   470671670cac   2 years ago     237MB
centos              7.7.1908   08d05d1d5859   2 years ago     204MB
centos              6.6        368c96d786ae   2 years ago     203MB
centos              6.7        9f1de3c6ad53   2 years ago     191MB
centos              6.8        82f3b5f3c58f   2 years ago     195MB
centos              6.9        2199b8eb8390   2 years ago     195MB
centos              7.0.1406   cc2cf48cc784   2 years ago     210MB
centos              7.1.1503   e1430271e2f9   2 years ago     212MB
centos              7.2.1511   9aec5c5fe4ba   2 years ago     195MB
centos              7.3.1611   c5d48e81b986   2 years ago     192MB
centos              7.4.1708   9f266d35e02c   2 years ago     197MB
centos              7.5.1804   cf49811e3cdb   2 years ago     200MB
centos              7.6.1810   f1cb7c7d58b7   2 years ago     202MB
centos              5.11       b424fba01172   5 years ago     284MB
centos              5          1ae98b2c895d   5 years ago     285MB
  • IMAGE ID : 도커 이미지 작성 시 랜덤한 고유의 문자열인 IMAGE ID가 생성
  • DIGEST : 도커 레지스트리에 업로드한 이미지는 이미지를 고유하게 식별하기 위한 다이제스트를 부여

옵션

  • **--digest**
  • docker image ls --digest
    • DIGEST도 출력

이미지 상세 정보 확인(docker image inspect)

  • docker image inspect [이미지명[:태그명]]
    • 이미지 ID, 작성일, 도커 버전, CPU 아키텍처 등 결과가 JSON 형식으로 표시
hbeen@DESKTOP-EDC39JU:~$ docker image inspect ubuntu:latest
[
    {
        "Id": "sha256:f643c72bc25212974c16f3348b3a898b1ec1eb13ec1539e10a103e6e217eb2f1",
        "RepoTags": [
            "ubuntu:latest"
        ],
        "RepoDigests": [
            "ubuntu@sha256:c95a8e48bf88e9849f3e0f723d9f49fa12c5a00cfc6e60d2bc99d87555295e4c"
        ],
        "Parent": "",
        "Comment": "",
        "Created": "2020-11-25T22:25:29.546718343Z",
        "Container": "0672cd8bc2236c666c647f97effe707c8f6ba9783da7e88763c8d46c69dc174a",
        "ContainerConfig": {
            "Hostname": "0672cd8bc223",
            "Domainname": "",
            "User": "",
... 이하 생략 ...

옵션

  • --format
  • docker image inspect --format=”{{포맷}}” [이미지명[:태그명]]
    • JSON 포맷 지정하여 원하는 값 출력
hbeen@DESKTOP-EDC39JU:~$ docker image inspect --format="{{ .ID}}" ubuntu:latest
sha256:f643c72bc25212974c16f3348b3a898b1ec1eb13ec1539e10a103e6e217eb2f1
hbeen@DESKTOP-EDC39JU:~$ ^C
hbeen@DESKTOP-EDC39JU:~$ docker image inspect --format="{{ .ContainerConfig.Hostname}}" ubuntu:latest
0672cd8bc223

이미지 태그 설정(docker image tag)

  • docker image tag [이미지명] [사용자명/컨테이너명:태그]
    • 이미지에 별명을 붙임(이미지를 복사하거나 이름을 바꾼 것이 아님)

이미지 검색(docker search)

  • docker searh [옵션] [검색 키워드]
    • 도커 허브에 공개되어 있는 이미지 검색
hbeen@DESKTOP-EDC39JU:~$ docker search nginx
NAME                              DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
nginx                             Official build of Nginx.                        16299     [OK]
jwilder/nginx-proxy               Automated Nginx reverse proxy for docker con…   2118                 [OK]
richarvey/nginx-php-fpm           Container running Nginx + PHP-FPM capable of…   822                  [OK]
jc21/nginx-proxy-manager          Docker container for managing Nginx proxy ho…   326
linuxserver/nginx                 An Nginx container, brought to you by LinuxS…   162
jlesage/nginx-proxy-manager       Docker container for Nginx Proxy Manager        152                  [OK]

옵션

  • --limit
  • docker searh --limit [숫자]
    • n건의 검색 결과 표시
hbeen@DESKTOP-EDC39JU:~$ docker search --limit 5 nginx
NAME                          DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
nginx                         Official build of Nginx.                        16299     [OK]
jwilder/nginx-proxy           Automated Nginx reverse proxy for docker con…   2118                 [OK]
richarvey/nginx-php-fpm       Container running Nginx + PHP-FPM capable of…   822                  [OK]
nginx/nginx-ingress           NGINX and  NGINX Plus Ingress Controllers fo…   60
nginxinc/nginx-unprivileged   Unprivileged NGINX Dockerfiles                  59
  • --filter=stars
  • docker searh --filter=stars=[숫자]
    • 사용자가 즐겨찾기로 표시한 건수로 검색
hbeen@DESKTOP-EDC39JU:~$ docker search --filter=stars=1000 nginx
NAME                  DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
nginx                 Official build of Nginx.                        16299     [OK]
jwilder/nginx-proxy   Automated Nginx reverse proxy for docker con…   2118                 [OK]

이미지 삭제(docker iamge rm)

  • docker image rm [옵션] [이미지명(REOPSITORY 또는 IMAGE ID)]
    • IMAGE ID 지정 시 앞 3자리만 지정해도 됨
hbeen@DESKTOP-EDC39JU:~$ docker image ls
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
ubuntu       <none>    54c9d81cbb44   10 days ago     72.8MB
ubuntu       latest    f643c72bc252   14 months ago   72.9MB
hbeen@DESKTOP-EDC39JU:~$ docker image rm ubuntu
Untagged: ubuntu:latest
Untagged: ubuntu@sha256:c95a8e48bf88e9849f3e0f723d9f49fa12c5a00cfc6e60d2bc99d87555295e4c
Deleted: sha256:f643c72bc25212974c16f3348b3a898b1ec1eb13ec1539e10a103e6e217eb2f1
Deleted: sha256:9386795d450ce06c6819c8bc5eff8daa71d47ccb9f9fb8d49fe1ccfb5fb3edbe
Deleted: sha256:3779241fda7b1caf03964626c3503e930f2f19a5ffaba6f4b4ad21fd38df3b6b
Deleted: sha256:bacd3af13903e13a43fe87b6944acd1ff21024132aad6e74b4452d984fb1a99a
hbeen@DESKTOP-EDC39JU:~$ docker image ls
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
ubuntu       <none>    54c9d81cbb44   10 days ago   72.8MB

옵션

  • --force
  • docker image rm --force [이미지명(REOPSITORY 또는 IMAGE ID)]
    • 이미지 강제로 삭제
  • --no-prune
  • docker image rm --no-prune [이미지명(REOPSITORY 또는 IMAGE ID)]
    • 중간 이미지를 삭제하지 않음

사용하지 않은 이미지 삭제(docker image prune)

  • docker image prune [옵션]
    • 사용하지 않은 도커 이미지 삭제

도커 컨테이너 생성/시작/정지

컨테이너 생성(docker container create)

  • 이미지로부터 컨테이너를 생성
  • 생성 시 스냅샷(이미지에 포함된 파일과 디렉터리를 특정 타이밍에서 추출)
  • 컨테이너를 시작한 것은 아님

컨테이너 생성 및 시작(docker conatiner run)

  • docker container run [옵션] [이미지명:태그] [인수]
  • 컨테이너 생성 후 임의의 프로세스 시작

옵션

    • i : 컨테이너의 표준 출력
  • -t : tty(단말 디바이스) 확보
  • --name : 컨테이너 이름 임의 지정
  • -d : 백그라운드에서 실행(detach)
  • -u : 사용자명 지정
  • --restart : 명령 실행 후에 컨테이너를 재시작
  • --rm : 명령 실행 후에 컨테이너를 자동으로 삭제

대화식 실행

hbeen@DESKTOP-EDC39JU:~$ docker container run -it --name "test1" centos /bin/cal
    February 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

hbeen@DESKTOP-EDC39JU:~$ docker container run -it --name "test2" centos /bin/bash
[root@ceedbe3c751e /]# 

백그라운드 실행

hbeen@DESKTOP-EDC39JU:~$ docker container run -d centos /bin/ping localhost
5317d0ed7fe9f48b52b7d3c4b16635bbca6d550d40b37cf327c56920dae143a5

백그라운드 실행 결과 확인

  • docker container logs [컨테이너 ID]
hbeen@DESKTOP-EDC39JU:~$ docker container logs -t 5317d0ed7
2022-02-13T04:04:15.157660000Z PING localhost (127.0.0.1) 56(84) bytes of data.
2022-02-13T04:04:15.157692800Z 64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.021 ms
2022-02-13T04:04:16.217546300Z 64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.018 ms
2022-02-13T04:04:17.257621200Z 64 bytes from localhost (127.0.0.1): icmp_seq=3 ttl=64 time=0.040 ms
2022-02-13T04:04:18.297685900Z 64 bytes from localhost (127.0.0.1): icmp_seq=4 ttl=64 time=0.019 ms

옵션

  • t : 타임스탬프 표시

컨테이너 네트워크 설정

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

옵션

  • -p [호스트포트:컨테이너포트] : 호스트의 임의의 포트를 컨테이너에 할당
hbeen@DESKTOP-EDC39JU:~$ docker container run -d -p 8080:80 nginx
8c02f51deb59e068f95e0d2ff5855c04c863ba45d3b6d02f433b49784d40401e
  • --dns [IP 주소] : dns 서버 설정
hbeen@DESKTOP-EDC39JU:~$ docker container run -d --dns 192.168.1.1 nginx
  • --mac-address=”[MAC주소]” : MAC 주소 설정
hbeen@DESKTOP-EDC39JU:~$ docker container run -d --mac-address="92:d0:c6:0a:29:33" centos
262911515a5e652080e514acf6f062c586bc23ab01d12298751042b03001ceed

hbeen@DESKTOP-EDC39JU:~$ docker container inspect --format="{{ .Config.MacAddress}}" 262911515a5
92:d0:c6:0a:29:33
  • --add-host : 호스트명과 IP 주소 설정(설정 후 /etc/hosts 파일에 설정 결과 확인 가능)
hbeen@DESKTOP-EDC39JU:~$ docker container run -it --hostname www.test.com --add-host node1.test.com:192.168.1.1 centos
[root@www /]# cat /etc/hosts
127.0.0.1       localhost
::1     localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
192.168.1.1     node1.test.com
172.17.0.5      www.test.com
  • --net : 네트워크 방식 설정bridge 브리지 연결(기본 값)
    none 네트워크에 연결하지 않음
    container:[name id]
    host 컨테이너가 호스트 os의 네트워크를 사용
    NETWORK 사용자 정의 네트워크 사용(docker network create 명령어로 사용자 정의 네트워크 작성)

컨테이너 자원 지정

  • docker container run [자원옵션] [이미지명:태그] [인수]
    • 공평한 리소스(CPU, Memory, Disk I/O) 배분을 위해 리소스 사용을 측정하고 제한 단일 컨테이너가 리소스를 모두 소비하는것을 방지

옵션

  • -c=[숫자] : CPU의 사용 비율(default:1024)
  • -m=[숫자b/k/m/g] : 사용할 메모리 제한
  • -v [호스트폴더:컨테이너폴더] : 호스트와 컨테이너 디렉터리 공유
hbeen@DESKTOP-EDC39JU:~$ docker container run -v /Users/test:/usr/share/nginx/ht

컨테이너 환경 지정

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

옵션

  • -e : 환경 변수 설정
hbeen@DESKTOP-EDC39JU:~$ docker container run -it -e foo=bar centos /bin/bash
[root@284c13ce4b79 /]# set
BASH=/bin/bash
...중간 생략...
foo=bar
  • --env-file=[파일명] : 파일로 환경 변수 설정
  • --read-only=[true|false] : 파일시스템을 읽기 전용으로 지정
  • -w : 컨테이너의 작업 디렉터리 지정
hbeen@DESKTOP-EDC39JU:~$ docker container run -it -w /tensorflow centos /bin/bash
[root@af5c2c6f7036 tensorflow]# pwd
/tensorflow
  • -u : 사용자명 또는 UID 지정

컨테이너 목록 표시

  • docker container ls
hbeen@DESKTOP-EDC39JU:~$ docker container ls
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS     NAMES
b5b62df9e574   nginx     "/docker-entrypoint.…"   7 seconds ago   Up 5 seconds   80/tcp    sad_cannon
  • COMMAND : 컨테이너에서 실행중인 명령

옵션

  • -a : 정지중인 컨테이너도 표시

컨테이너 상세 정보 확인(docker container inspect)

  • docker container inspect [컨테이너ID]
  • 소속된 네트워크 등 상세 정보 확인
hbeen@DESKTOP-EDC39JU:~$ docker container inspect 262911515a5e
[
    {
        "Id": "262911515a5e652080e514acf6f062c586bc23ab01d12298751042b03001ceed",
        "Created": "2022-02-13T04:27:37.5626938Z",
        "Path": "/bin/bash",
        "Args": [],
        "State": {
            "Status": "exited",
            "Running": false,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 0,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2022-02-13T04:27:38.1292276Z",
            "FinishedAt": "2022-02-13T04:27:38.13049Z"
        },
        "Image": "sha256:0d120b6ccaa8c5e149176798b3501d4dd1885f961922497cd0abef155c869566",
        "ResolvConfPath": "/var/lib/docker/containers/262911515a5e652080e514acf6f062c586bc23ab01d12298751042b03001ceed/resolv.conf",
        "HostnamePath": "/var/lib/docker/containers/262911515a5e652080e514acf6f062c586bc23ab01d12298751042b03001ceed/hostname",
... 이하 생략 ...

옵션

  • --format
  • docker container inspect --format=”{{포맷}}” [컨테이너ID]
    • JSON 포맷 지정하여 원하는 값 출력
hbeen@DESKTOP-EDC39JU:~$ docker container inspect --format="{{ .Config.MacAddress}}" 262911515a5
92:d0:c6:0a:29:33

컨테이너 상세 정보 확인(docker container status)

  • docker container status [컨테이너ID]
^Chbeen@DESKTOP-EDC39JU:~$ docker container stats b5b62df9e574
CONTAINER ID   NAME         CPU %     MEM USAGE / LIMIT     MEM %     NET I/O       BLOCK I/O   PIDS
b5b62df9e574   sad_cannon   0.00%     1.973MiB / 12.35GiB   0.02%     1.26kB / 0B   0B / 0B     2

옵션

  • --format
  • docker container inspect --format=”{{포맷}}” [컨테이너ID]
    • JSON 포맷 지정하여 원하는 값 출력
hbeen@DESKTOP-EDC39JU:~$ docker container inspect --format="{{ .Config.MacAddress}}" 262911515a5
92:d0:c6:0a:29:33

컨테이너 프로세스 확인(docker container ps)

  • docker container ps

컨테이너 시작(docker container start)

  • docker container start [옵션] [컨테이너ID...컨테이너ID]

컨테이너 재시작(docker container restart)

  • docker container restart [옵션] [컨테이너ID...컨테이너ID]

컨테이너 정지(docker container stop)

  • docker container stop[옵션] [컨테이너ID...컨테이너ID]

컨테이너 일시정지 및 재개(docker container pause/unpause)

  • docker container pause [컨테이너ID]
  • docker container punause [컨테이너ID]

컨테이너 삭제(docker container rm)

  • docker container rm [옵션] [컨테이너ID...컨테이너ID]

정지중인 컨테이너 모두 삭제(docker container prune)

컨테이너 상태 확인(docker container ps)