Data science/MLOps

도커 이미지 푸시하기

연금(Pension)술사 2022. 12. 12. 23:03

0. PUSH할 원격저장소를 만든다. docker hub (https://hub.docker.com/) 에서 로그인 후, 원격저장소를 생성한다. github저장소처럼 "ID/원격저장소명"으로 주소가 만들어진다.

 

 

1. 도커 로그인

$ 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: [YourID]
Password: ******

Login Succeeded

 

 

2. Docker hub에 올릴 이미지를 찾는다. 여기서 필자는 REPOSITOY에 simple-nlp-app, TAG은 v1을 올릴 것이다. 그렇지만, 도커허브에 올릴 때는 ID/repository명  = docker image ls에서의 REPOSITORY 명이 동일해야한다. 따라서, 한번 변경이 필요하다. 

$ docker image ls
REPOSITORY                                                TAG                                                                          IMAGE ID       CREATED         SIZE  
simple-nlp-app                                            v1                                                                           7108c8dbe574   6 minutes ago   2.73GB
simple-nlp-app                                            v0                                                                           c82b9d4786fe   9 minutes ago   2.73GB
simple-nlp-app                                            latest                                                                       798c7cf60156   2 days ago      2.72GB
nginx                                                     latest                                                                       ac8efec875ce   6 days ago      142MB 
alpine/git                                                latest                                                                       22d84a66cda4   3 weeks ago     43.6MB
hubproxy.docker.internal:5000/docker/desktop-kubernetes   kubernetes-v1.25.2-cni-v1.1.1-critools-v1.24.2-cri-dockerd-v0.2.5-1-debian   09d7e1dbc2c4   2 months ago    363MB 
k8s.gcr.io/kube-apiserver                                 v1.25.2                                                                      97801f839490   2 months ago    128MB 
k8s.gcr.io/kube-controller-manager                        v1.25.2                                                                      dbfceb93c69b   2 months ago    117MB 
k8s.gcr.io/kube-scheduler                                 v1.25.2                                                                      ca0ea1ee3cfd   2 months ago    50.6MB
k8s.gcr.io/kube-proxy                                     v1.25.2                                                                      1c7d8c51823b   2 months ago    61.7MB
k8s.gcr.io/pause                                          3.8                                                                          4873874c08ef   5 months ago    711kB 
k8s.gcr.io/etcd                                           3.5.4-0                                                                      a8a176a5d5d6   6 months ago    300MB 
k8s.gcr.io/coredns                                        v1.9.3                                                                       5185b96f0bec   6 months ago    48.8MB
docker/desktop-vpnkit-controller                          v2.0                                                                         8c2c38aa676e   19 months ago   21MB  
docker/desktop-storage-provisioner                        v2.0                                                                         99f89471f470   19 months ago   41.9MB
nginx                                                     1.14.2                                                                       295c7be07902   3 years ago     109MB 
dattarajrao/simple-app                                    latest                                                                       3f4a466b587c   4 years ago     132M

 

3. 두 가지 방법이 있는데, 첫 번째는 docker image tag을 이용하는 방법.

  • docker image tag SOURCE_IMAGE[:TAG] TARGET[:TAG]  . 이 명령어는 원본 이미지에서 타겟이이지로 리포지토리 명을 다시 테그를 달 수 있게한다.
  • docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]] : 이 명령어는 실행중인 컨테이너를 다시 이미지화하는 방법이다.

아래의 예시는 docker image tag을 이용한 방법이다. tag을 이용할 때, 미리 생성한 원격저장소의 이름과 동일하게 해준다. 그렇지 않으면 아래와 같이 에러가 뜬다.

$ docker push 4pymgalion/simple-nlp-app:v1
The push refers to repository [docker.io/4pymgalion/simple-nlp-app]
An image does not exist locally with the tag

 

따라서, 아래와 같이 원격저장소의 ID/저장소명과 같이 도커 이미지를 테그를 다시 달아준다. 그러면 추가로 "4pygmalion/simple-nlp-app"라는 리포지토리 이름을 가진 이미지가 생성된다.

$ docker tag simple-nlp-app:v1 4pygmalion/simple-nlp-app:latest
$ docker images
REPOSITORY                                                TAG                                                                          IMAGE ID       CREATED          SIZE
4pygmalion/simple-nlp-app                                 latest                                                                       7108c8dbe574   14 minutes ago   2.73GB
simple-nlp-app                                            v1                                                                           7108c8dbe574   14 minutes ago   2.73GB
nginx                                                     latest                                                                       ac8efec875ce   6 days ago       142MB 
alpine/git                                                latest                                                                       22d84a66cda4   3 weeks ago      43.6MB
hubproxy.docker.internal:5000/docker/desktop-kubernetes   kubernetes-v1.25.2-cni-v1.1.1-critools-v1.24.2-cri-dockerd-v0.2.5-1-debian   09d7e1dbc2c4   2 months ago     363MB 
k8s.gcr.io/kube-apiserver                                 v1.25.2                                                                      97801f839490   2 months ago     128MB 
k8s.gcr.io/kube-scheduler                                 v1.25.2                                                                      ca0ea1ee3cfd   2 months ago     50.6MB

 

4. 푸시: Docker push 도커이미지/리포지토리명

$ docker push 4pygmalion/simple-nlp-app:latest
The push refers to repository [docker.io/4pygmalion/simple-nlp-app]
e56c84262ba7: Pushing [>                                                  ]  35.33kB/2.22MB
cec010fb56f8: Pushing [>                                                  ]  544.8kB/2.262GB
5af9244c08c5: Pushing [==================================================>]  5.632kB
fac360d91a98: Preparing
c43e4ddc5992: Preparing
e5896e4ce6c3: Waiting
7c40600bc52d: Waiting
d326469892d9: Waiting
b5ebffba54d3: Waiting

 

반응형