본문 바로가기

Devops/Docker

[Docker] Docker Hub에 이미지 올리기

Docker hub 에 가입하고 로그인

 

도커 허브 Url은 다음과 같다. 일반적인 사이트 회원가입처럼 회원가입을 진행하고 로그인을 한다. 

https://hub.docker.com/

 

계정을 생성하고 로그인을 하면 초기화면으로 진입한다.

 

새로운 Repository를 생성해본다 상단 Repositories 메뉴를 선택하고 Create Repository를 선택한다. 본인 계정 밑에 Repository 이름을 입력하고 Public/Private 유무를 체크한다.

 

우측에는 tip으로 tag 생성 방법 및 push로 로컬에 저장된 이미지를 허브로 올리는 방법이 명시되어 있다. 

Test application 도커 빌드 및 허브에 올리기

 

java8위에 올라가는 간단한 war파일을 이미지로 빌드해본다. docker search 명령으로 java8 이미지들을 검색해본다.

아래 제일 먼저 리스트에 나온 williamyeh/java8을 선정해본다.

 

docker.io/williamyeh/java8:latest
root@worker1:~# docker search java8
NAME                                   DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
williamyeh/java8                       Oracle Java 8 image for Docker                  10                   [OK]
fiadliel/java8-jre                     Java 8 JRE image, based off Alpine Linux, in…   6                    [OK]
mykro/java8-jre                        An Oracle Java JRE base to install Java apps…   4                    [OK]
ksimple/java8-mvn-nodejs-npm-python3   java8-mvn-nodejs-npm-python3                    3                    [OK]
...

 

docker pull 명령으로 이미지를 로컬에 다운로드 받는다.

 

root@worker1:~# docker pull williamyeh/java8
Using default tag: latest
latest: Pulling from williamyeh/java8
f2b6b4884fc8: Pull complete
c6c308a14d13: Pull complete
Digest: sha256:174d528516a0eae5c4df69966eeb5e51d7c0dc1a532249af61013953eab1d9f3
Status: Downloaded newer image for williamyeh/java8:latest
docker.io/williamyeh/java8:latest

 

정상적으로 받아졌는지 docker images로 확인한다.

 

root@worker1:~# docker images
REPOSITORY                  TAG       IMAGE ID       CREATED        SIZE
k8s.gcr.io/kube-proxy       v1.23.1   b46c42588d51   3 weeks ago    112MB
calico/node                 v3.21.2   f1bca4d4ced2   4 weeks ago    214MB
calico/pod2daemon-flexvol   v3.21.2   7778dd57e506   4 weeks ago    21.3MB
calico/cni                  v3.21.2   4c5c32530391   4 weeks ago    239MB
k8s.gcr.io/pause            3.6       6270bb605e12   4 months ago   683kB
williamyeh/java8            latest    00bc163fa009   3 years ago    593MB

 

이미지에 포함할 test.war 파일이 있는 곳으로 이동해서 docker build를 위한 dockerfile을 생성한다. 기본적으로 Dockerfile 이름으로 생성하면 디폴트로 해당 파일을 읽는다. 만일 다른 이름의 도커 파일을 생성하고 싶다면 docker build시에 -f로 도커파일명을 명시적으로 설정해준다.

 

root@worker1:~/docker_test# ls -la
total 296700
drwxr-xr-x 2 root   root        4096  1월  7 10:30 .
drwx------ 5 root   root        4096  1월  7 10:33 ..
-rw-r--r-- 1 ubuntu ubuntu 303807335  1월  7 10:27 test.war
root@worker1:~/docker_test# vim Dockerfile

FROM williamyeh/java8
COPY *.war app.war
ENTRYPOINT ["java", "-jar", "app.war"]

 

위와 같이 설정된 도커파일을 가지고 도커 이미지를 빌드한다. -t로 이미지명:tag명 을 설정해준다.

 

root@worker1:~/docker_test# docker build -t kindlove/test:1.0 .
Sending build context to Docker daemon  303.8MB
Step 1/3 : FROM williamyeh/java8
 ---> 00bc163fa009
Step 2/3 : COPY *.war app.war
 ---> f14236bab77b
Step 3/3 : ENTRYPOINT ["java", "-jar", "app.war"]
 ---> Running in 55576a53125b
Removing intermediate container 55576a53125b
 ---> 56205a2a3df8
Successfully built 56205a2a3df8
Successfully tagged kindlove/test:1.0

 

docker images로 정상적으로 생성되어 있는지 확인한다.


root@worker1:~/docker_test# docker images
REPOSITORY                  TAG       IMAGE ID       CREATED         SIZE
kindlove/test               1.0       56205a2a3df8   9 seconds ago   897MB
k8s.gcr.io/kube-proxy       v1.23.1   b46c42588d51   3 weeks ago     112MB
calico/node                 v3.21.2   f1bca4d4ced2   4 weeks ago     214MB
calico/pod2daemon-flexvol   v3.21.2   7778dd57e506   4 weeks ago     21.3MB
calico/cni                  v3.21.2   4c5c32530391   4 weeks ago     239MB
k8s.gcr.io/pause            3.6       6270bb605e12   4 months ago    683kB
williamyeh/java8            latest    00bc163fa009   3 years ago     593MB

 

도커 이미지 허브에 Push 하기

 

도커에 로그인 한다.

root@worker1:~/docker_test# 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: kindlove
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

 

앞서 생성한 이미지를 push 한다. push시에 tag명은 실제 repository 명 (kindlove/test)와 같아야 한다.

root@worker1:~/docker_test# docker push kindlove/test:1.0
The push refers to repository [docker.io/kindlove/test]
cb8282ae10f3: Pushed
0da402cf5915: Mounted from williamyeh/java8
8fad67424c4e: Mounted from williamyeh/java8
1.0: digest: sha256:34c1d5624afbeb112316194317b17e33cea954ea6f2011f45d361129053fec70 size: 955

 

도커를 실제 repository 명과 맞추지 않고 test 이름으로 빌드해본다.

 

root@worker1:~/docker_test# docker build -t test:1.0 .
Sending build context to Docker daemon  303.8MB
Step 1/3 : FROM williamyeh/java8
 ---> 00bc163fa009
Step 2/3 : COPY *.war app.war
 ---> 7a3a7180081c
Step 3/3 : ENTRYPOINT ["java", "-jar", "app.war"]
 ---> Running in 288ef8bf12ec
Removing intermediate container 288ef8bf12ec
 ---> 29317dcfa366
Successfully built 29317dcfa366
Successfully tagged test:1.0


root@worker1:~/docker_test# docker images
REPOSITORY                  TAG       IMAGE ID       CREATED         SIZE
test                        1.0       29317dcfa366   7 seconds ago   897MB
k8s.gcr.io/kube-proxy       v1.23.1   b46c42588d51   3 weeks ago     112MB
calico/node                 v3.21.2   f1bca4d4ced2   4 weeks ago     214MB
calico/pod2daemon-flexvol   v3.21.2   7778dd57e506   4 weeks ago     21.3MB
calico/cni                  v3.21.2   4c5c32530391   4 weeks ago     239MB
k8s.gcr.io/pause            3.6       6270bb605e12   4 months ago    683kB
williamyeh/java8            latest    00bc163fa009   3 years ago     593MB

 

위 이미지 명으로 push를 해보면 실제 repository가 존재하지 않으므로 access denied 에러가 발생하는것을 볼 수 있다.


root@worker1:~/docker_test# docker push test:1.0
The push refers to repository [docker.io/library/test]
cb8282ae10f3: Preparing
0da402cf5915: Preparing
8fad67424c4e: Preparing
denied: requested access to the resource is denied

 

이럴경우 이미지에서 tag를 재생성해서 실제 repository로 push 할 수 있다. tag를 재 생성 하되 kindlove/test 로 실제 repository path로 설정해 준다.

 

root@worker1:~/docker_test# docker tag test:1.0 kindlove/test:1.1
root@worker1:~/docker_test# docker images
REPOSITORY                  TAG       IMAGE ID       CREATED         SIZE
kindlove/test               1.1       29317dcfa366   5 minutes ago   897MB
test                        1.0       29317dcfa366   5 minutes ago   897MB
k8s.gcr.io/kube-proxy       v1.23.1   b46c42588d51   3 weeks ago     112MB
calico/node                 v3.21.2   f1bca4d4ced2   4 weeks ago     214MB
calico/pod2daemon-flexvol   v3.21.2   7778dd57e506   4 weeks ago     21.3MB
calico/cni                  v3.21.2   4c5c32530391   4 weeks ago     239MB
k8s.gcr.io/pause            3.6       6270bb605e12   4 months ago    683kB
williamyeh/java8            latest    00bc163fa009   3 years ago     593MB

 

 

정상적으로 push가 됨을 확인할 수 있다.


root@worker1:~/docker_test# docker push kindlove/test:1.1
The push refers to repository [docker.io/kindlove/test]
cb8282ae10f3: Pushed
0da402cf5915: Pushed
8fad67424c4e: Pushed
1.1: digest: sha256:1f563b177ba3cdcb711cd9556053ec210ac1a6ac91f27e1a2e87a1c89c1eb468 size: 955

 

-- The End --