본문 바로가기

Java/Deploy

[Docker] 도커 이미지 사용을 위한 명령어

반응형

 

도커 이미지는 한마디로 정의해보면, 도커 컨테이너를 만들기 위한 템플릿이다.

이러한 도커 이미지를 사용하기 위한 기본 명령어를 살펴보자!

 

도커의 명령행 도구는 하위 명령 형태로 구성돼 있어, 아래와 같은 형태로 사용해야한다.

% docker COMMAND SUBCOMMAND 

⌗ 도커 도움말 

% docker help

Usage:	docker [OPTIONS] COMMAND

A self-sufficient runtime for containers

Options:
      --config string      Location of client config files (default
                           "/Users/jenny/.docker")
  -c, --context string     Name of the context to use to connect to the
                           daemon (overrides DOCKER_HOST env var and
                           default context set with "docker context use")
  -D, --debug              Enable debug mode
  -H, --host list          Daemon socket(s) to connect to
  -l, --log-level string   Set the logging level
                           ("debug"|"info"|"warn"|"error"|"fatal")
                           (default "info")
      --tls                Use TLS; implied by --tlsverify
      --tlscacert string   Trust certs signed only by this CA (default
                           "/Users/jenny/.docker/ca.pem")
      --tlscert string     Path to TLS certificate file (default
                           "/Users/jenny/.docker/cert.pem")
      --tlskey string      Path to TLS key file (default
                           "/Users/jenny/.docker/key.pem")
      --tlsverify          Use TLS and verify the remote
  -v, --version            Print version information and quit

...

 

⌗ 도커 이미지를 다루는 하위 명령어 도움말

% docker image --help

Usage:	docker image COMMAND

Manage images

Commands:
  build       Build an image from a Dockerfile
  history     Show the history of an image
  import      Import the contents from a tarball to create a filesystem image
  inspect     Display detailed information on one or more images
  load        Load an image from a tar archive or STDIN
  ls          List images
  prune       Remove unused images
  pull        Pull an image or a repository from a registry
  push        Push an image or a repository to a registry
  rm          Remove one or more images
  save        Save one or more images to a tar archive (streamed to STDOUT by default)
  tag         Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE

 

⌗ 생성된 도커 이미지의 Repository, tag, image ID, created SIZE 등 확인

% docker image ls                       
REPOSITORY                           TAG                                              IMAGE ID            CREATED             SIZE
docker101tutorial                    latest                                           72aa80c28588        4 days ago          26.5MB
<none>                               <none>                                           c31a8d2204e2        4 days ago          122MB
<none>                               <none>                                           cfb57bb470d4        4 days ago          108MB
<none>                               <none>                                           f4843f035582        4 days ago          224MB
node                                 12-alpine                                        057fa4cc38c2        11 days ago         89.3MB
python                               alpine                                           8ecf5a48c789        5 weeks ago         78.9MB
nginx                                alpine                                           7d0cdcc60a96        5 weeks ago         21.3MB
docker/desktop-storage-provisioner   v1.1                                             e704287ce753        3 months ago        41.8MB
docker/desktop-vpnkit-controller     v1.0                                             79da37e5a3aa        4 months ago        36.6MB
docker/desktop-kubernetes            kubernetes-v1.16.5-cni-v0.7.5-critools-v1.15.0   a86647f0b376        5 months ago        279MB
k8s.gcr.io/kube-controller-manager   v1.16.5                                          441835dd2301        5 months ago        151MB
k8s.gcr.io/kube-apiserver            v1.16.5                                          fc838b21afbb        5 months ago        159MB
k8s.gcr.io/kube-proxy                v1.16.5                                          0ee1b8a3ebe0        5 months ago        82.7MB
k8s.gcr.io/kube-scheduler            v1.16.5                                          b4d073a9efda        5 months ago        83.5MB
docker/kube-compose-controller       v0.4.25-alpha1                                   129151cdf35f        8 months ago        35.6MB
docker/kube-compose-api-server       v0.4.25-alpha1                                   989749268895        8 months ago        50.7MB
docker/kube-compose-installer        v0.4.25-alpha1                                   2a71ac5a1359        8 months ago        42.3MB
k8s.gcr.io/etcd                      3.3.15-0                                         b2756210eeab        10 months ago       247MB
k8s.gcr.io/coredns                   1.6.2                                            bf261d157914        11 months ago       44.1MB
k8s.gcr.io/pause                     3.1                                              da86e6ba6ca1        2 years ago         742kB

 


⌗ 도커 이미지 빌드

% docker image build -t 이미지명[:태그명] dockerfile의경로

 docker image build 명령은 기본적으로 Dockerfile이라는 이름으로된 파일을 찾아 빌드한다.

한번 빌드되면 도커 이미지를 일부러 삭제하지 않는 한 호스트 운영 체제에 저장된다.

그러므로 이미지를 빌드할 때 매번 베이스 이미지를 받아오지는 않는다.

 

즉, 로컬에 베이스 이미지 캐시가 있으면 도커는 변경된 부분만 반영해 빌드를 시도한다.

 

[option]

  • -t : 이미지명 및 태그명 설정
         ★ 실제 사용에서 거의 필수적으로 사용
  • -f : 기본(Dockerfile) 외 다른 이름의 dockerfile을 설정
  • --pull : 매번 베이스 이미지를 강제로 새로 받아옴 = 최신 베이스 이미지를 사용
               → 빌드 속도가 느림 
               ★ latest로 지정하는 것을 피하고, 태그로 지정한 베이스 이미지를 사용

[Command]

% docker image build -t example/echo:latest .
% docker image build -f Dockerfile-test -t example/eho:latest .
% docker image build --pull=true -t example/echo:latest .

 


⌗ 도커 이미지 검색

도커 허브는 도커 이미지 레지스트리로,

사용자나 조직 이름으로 저장소(Repository)를 만들 수 있고, 이 Repository를 사용해 도커 이미지를 관리한다.

 

도커 이미지 검색 명령어를 사용하면, 도커 허브에 등록된 Repository를 검색할 수 있다.

 

[option]

  • --limit : 검색 최대 건수를 제한

[Command]

% docker search --limit 5 mysql

NAME                  DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
mysql                 MySQL is a widely used, open-source relation…   9727                [OK]                
mysql/mysql-server    Optimized MySQL Server Docker images. Create…   710                                     [OK]
mysql/mysql-cluster   Experimental MySQL Cluster Docker images. Cr…   73                                      
bitnami/mysql         Bitnami MySQL Docker Image                      44                                      [OK]
circleci/mysql        MySQL is a widely used, open-source relation…   19                                      

 

그러나, 이 Repository에 공개된 이미지의 태그를 알고 싶다면, 도커 허브의 해당 Repository 페이지에서 Tags를 보는 방법이나, 다음과 같이 API를 사용하는 방법 중 하나를 사용하며면된다.

 

[Command]

 % curl -s 'https://hub.docker.com/v2/repositories/library/golang/tags/?page_size=10' \|jq -r '.results[].name'

{"count":1509,"next":"https://hub.docker.com/v2/repositories/library/golang/tags/?page=2\u0026page_size=10","previous":null,"results":[{"creator":7,"id":15946,"image_id":null,"images":[{"architecture":"arm","features":"","variant":"v7","digest":"sha256:192ac62fcc68673a7a793c80d0da5cbf1daba1e429623bbcd1710eafcfe2ddaf","os":"linux","os_features":"","os_version":null,"size":264572970},{"architecture":"arm64","features":"","variant":"v8","digest":"sha256:e418737c8e38829dba12c52267c6f06bcd6c6bf8b40d11ebc9762428e9b82538","os":"linux","os_features":"","os_version":null,"size":282552051}]}

 


⌗ 도커 이미지 내려받기

도커 Repository 에서 도커 image를 내려받으려면 아래의 명령어를 쓰면 된다.

단, 인자로 지정한 저장소(Repository)명과 태그(tag)명은 도커 허브에 이미 존재하는 것이어야 한다 !

태그명을 생략하면 기본값으로 지정된 태그가 적용된다.

 

이렇게 docker image pull 을 통해 내려받은 이미지는 그대로 도커 컨테이너를 생성하는 데 사용할 수 있다.

 

% docker image pull [옵션] [저장소명[:태그명]]
% docker image pull jenkins:latest
latest: Pulling from library/jenkins
55cbf04beb70: Already exists 
1607093a898c: Already exists 
9a8ea045c926: Already exists 
d4eee24d4dac: Already exists 
c58988e753d7: Pull complete 
...
1322ea3e7bfd: Pull complete 
Digest: sha256:eeb4850eb65f2d92500e421b430ed1ec58a7ac909e91f518926e02473904f668
Status: Downloaded newer image for jenkins:latest
docker.io/library/jenkins:latest

 


⌗ 보유한 도커 이미지 목록 보기

현재 호스트 운영체제(도커 데몬이 동작하는 호스트 환경)에 저장된 도커 이미지의 목록을 보여준다.

 

즉, docker image pull 명령으로 원격 도커 레지스트리에서 내려받은 이미지 및 docker image build 명령을 실행하며 내려받은 이미지 모두 호스트 운영 체제에 저장된다.

 

% docker image ls [옵션] [저장소명[:태그명]]
% docker image ls

REPOSITORY                           TAG                                              IMAGE ID            CREATED             SIZE
example/echo                         latest                                           58c20071e472        30 hours ago        750MB
docker101tutorial                    latest                                           72aa80c28588        5 days ago          26.5MB
node                                 12-alpine                                        057fa4cc38c2        12 days ago         89.3MB
..
jenkins                              latest                                           cd14cecfdb3a        24 months ago       696MB

 

여기서, IMAGE ID에 나온 해시값은 이미지마다 다르게 할당된 식별자로, 이미지를 구별하기 위해 사용한다.

그리고 이는 도커 이미지의 버전 넘버 역할을 한다.

애플리케이션을 수정하고 이미지를 빌드하면, 매번 다른 이미지가 된다.

 

(예시)

% docker image ls

REPOSITORY                           TAG                                              IMAGE ID            CREATED             SIZE
example/echo                         latest                                           58c20071e472        29 hours ago        750MB
<none>                               <none>                                           ac4b96c6fb78        29 hours ago        750MB
<none>                               <none>                                           25ba805d10fe        29 hours ago        750MB
<none>                               <none>                                           5e39adee5384        29 hours ago        750MB

 

그리고, REPOSITORY와 TAG 칼럼을 보면 최신 이미지가 example/echo:latest이고, 그 이전의 이미지는 <none>이라고 돼있다.

<none>는 이전에 example/echo였던 도커 이미지의 잔재다.

 

도커에서 태크 하나에 연결될 수 있는 이미지는 하나뿐이다 !!

여기 나온 latest 태그는 최신 이미지에만 붙을 수 있고, 그 보다 오래된 태그가 해제됐기 때문에 <none>가 된다.

 


⌗ 도커 이미지에 태그 붙이기

도커  이미지는 빌드할때 마다 다시 생성되는데, 그 내요으이 해시값을 이미지 ID로 삼기 떄문에 내용이 바뀌면 이미지 ID도 새값이 부여된다.

즉, 도커 이미지의 태그는 '어떤 특정 이미지ID를 갖는 도커 이미지를 쉽게 식별하는 것'을 목적으로 한다.

 

태그를 지정하지 않고 빌드한 이미지는 기본적으로 latest 태그가 부여된다.

따라서, ★ 도커를 사용할 때는 latest의 특정 시점에 버전 넘버 등을 태그로 붙여두고, 이 특정 버전 이미지를 사용하도록 하는 것이 좋다.

 

% docker image tag 기반이미지명[:태그] 새이미지명[:태그]
% docker image tag example/echo:latest example/echo:0.1.0

% docker image ls
REPOSITORY                           TAG                                              IMAGE ID            CREATED             SIZE
example/echo                         0.1.0                                            58c20071e472        31 hours ago        750MB
example/echo                         latest                                           58c20071e472        31 hours ago        750MB

 


⌗ 도커 이미지를 외부에 공개하기

현재 저장된 도커 이미지를 도커 허브등의 레지스트리에 등록하기 위해 사용한다.

 

% docker image push [옵션] [저장소명[:태그]]

 

1 ) 도커 허브(hub.docker.com)에서 계정을 생성한 후 docker longin 명령을 통해 도커 허브에 로그인 한다.

% docker login
 
Authenticating with existing credentials...
Login Succeeded

or

% docker login -u [계정 ID] -p [계정 패스워드]

WARNING! Using --password via the CLI is insecure. Use --password-stdin.
Login Succeeded

 

2 ) 태그 설정 명령을 사용해 도커 이미지의 네임스페이스를 바꿔야한다.
     ⇢ 도커 허브는 자신 혹은 소속 기관이 소유한 저장소(Repository)에만 도커 이미지를 등록할 수 있다.

          따라서, 네임스페이스를 도커 허브 ID와 같이 변경한다.

% docker image tag example/echo:latest [계정ID]/echo:latest

 

3 ) docker image push 명령을 통해 등록할 이미지를 지정한다. 정상 등록이 되면 SHA256 해시값이 출력된다.

% docker image push lilylee9292/echo:latest

The push refers to repository [docker.io/lilylee9292/echo]
e99a749ec99e: Pushed 
e9528af6e9d4: Pushed 
186d94bd2c62: Mounted from library/golang 
24a9d20e5bee: Mounted from library/golang 
e7dc337030ba: Mounted from library/golang 
920961b94eb3: Mounted from library/golang 
fa0c3f992cbd: Mounted from library/jenkins 
ce6466f43b11: Mounted from library/jenkins 
719d45669b35: Mounted from library/jenkins 
3b10514a95be: Mounted from library/jenkins 
latest: digest: sha256:b04410f8f717d886038831ffdd6dc290edc2b06f62614a65baa8b9c1f38539c6 size: 2418

 

4 ) 도커 허브에 접속하면 아래와 같이 저장소(Repository)가 등록된 것을 확인할 수 있다.

  • 이 저장소는 공개 Repository로 누구나 docker image pull 명령으로 이미지를 내려받을 수 있다.
  • 따라서 공개 Repository에 등록할 이미지나 Dockerfile에는 민감한 정보(패스워드, API 키 값, ...)가 포함되지 않도록 주의하자 !

 


[참고] chati.tistory.com/123

 

[Docker] 도커 이미지 / 컨테이너 다루기

도커의 사용법은 크게 아래와 같이 나뉜다. 이미지를 대상으로 하는 것 컨테이너를 대상으로 하는 것 그러면 도커 이미지는 무엇일까? 도커 이미지는 도커 컨테이너를 만들기 위한 템플릿 이다.

chati.tistory.com

 

반응형

❥ CHATI Github