Docker에서는 이미 주어진 Image들을 다운로드 받아서 사용하고 있다.
그러면, 이러한 Image들은 어디에 있는 것일까?!
"Docker Hub"라는 공식적으로 운영하고 있는 Image Server가 바로 그 곳이다.
이름에서 떠오르는 것과 같이.... GitHub와 같은 역할을 하는 아이다.
소스코드가 아닌 Docker Image를 저장하는 그 곳!
명령어도 유사하다~
그런데, 우리는 (나 혼자만?) 공식적인 것 말고.... 사적인 것, 나만의 것을 갖고 싶은 욕구가 있다.
즉, 나만의 Docker Hub를 운영하고 싶으면 어떻게 해야할까?
이럴 때 필요한 구글신께 외치는 주문~!!!
- Docker Registry Server Install
그러면, 게시를 내려주시는 우리의 구글신님~!!!
- https://docs.docker.com/registry/deploying/
우리가 지금부터 해야할 것은 "Docker Registry Server"를 구축하는 것이다.
Docker와 관련이 있는 것이니만큼, Docker Registry Server 역시 Docker 이미지로 배포가 된다.
즉, 별도의 설치과정 없이 이미지를 다운로드 받아서 실행하면 된다는...
하지만, 언제나처럼 제대로 사용하기 위해서는 공부를 해야하고, 시행착오를 겪어야 한다는... ^^
일단, Docker를 설치해야한다.
- [ Docker Install (Ubuntu 14.04 - 64bit) - using Download ] : http://www.whatwant.com/863
이제 우리가 필요한 Registry Server의 이미지를 땡겨오자.
Using default tag: latest
latest: Pulling from library/registry
90f4dba627d6: Pull complete
3a754cdc94a5: Pull complete
0756a217635f: Pull complete
f82b9495c796: Pull complete
154ef19ddee6: Pull complete
Digest: sha256:5eaafa2318aa0c4c52f95077c2a68bed0b13f6d2b464835723d4de1484052299
Status: Downloaded newer image for registry:latest
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
registry latest c2a449c9f834 3 days ago 33.2 MB
hello-world latest 1815c82652c0 2 weeks ago 1.84 kB
실행은 간단하다.
--restart=always
-p 5000:5000 registry0af462462b05ea13191470dff48ab52edf2206b65c885d2d82fd5c319daca63a
$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0af462462b05 registry "/entrypoint.sh /e..." 9 seconds ago Up 8 seconds 0.0.0.0:5000->5000/tcp my-registry
"--name" 옵션 뒤에 앞으로 사용할 Container 이름을 임의로 지어주면 되고...
"-d" 옵션을 통해서 Daemon으로 실행하고 싶다고 알려주고~
"--restart=always" 옵션을 통해서 Container 안에서 프로세스가 죽더라도 항상 재시작을 하도록 하고~
"-p" 옵션으로 포트 매핑을 해주면 된다.
제일 뒤에는 원본(?)으로 사용할 이미지를 지정해준다.
ps를 통해서 실행되고 있는 모습을 확인해볼 수 있다.
지금 실행해 놓은 Registry를 실험해보기 위해서, 등록해볼 마루타를 하나 만들어보자.
Dockerfile을 하나 만들어보자.
방금 만든 마루타의 Dockerfile을 빌드해서 이미지로 만들어보자.
Sending build context to Docker daemon 2.048 kB
Step 1/3 : FROM busybox
---> c30178c5239f
Step 2/3 : MAINTAINER whatwant <whatwant@gmail.com>
---> Running in 6115aa49c789
---> efaf526395ee
Removing intermediate container 6115aa49c789
Step 3/3 : CMD /bin/echo "hi-world!!"
---> Running in b57e417ec463
---> 0983858cdd37
Removing intermediate container b57e417ec463
Successfully built 0983858cdd37
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hi-world latest 0983858cdd37 14 seconds ago 1.11 MB
registry latest c2a449c9f834 3 days ago 33.2 MB
busybox latest c30178c5239f 2 weeks ago 1.11 MB
hello-world <none> 1815c82652c0 2 weeks ago 1.84 kB
이미지를 만들었으면, 이제는 우리의 Registry Server에 등록을 해보자.
$ sudo docker push localhost:5000/hi-world
The push refers to a repository [localhost:5000/hi-world]
3a1dff9afffd: Pushed
latest: digest: sha256:b182254942f5ffeb903b7125c4693e12c2330db6c16a75681e76c633535edade size: 527
잘 등록되었는지 확인도 해보자.
{"repositories":["hi-world"]}
$ curl -X GET http://localhost:5000/v2/hi-world/tags/list
{"name":"hi-world","tags":["latest"]}
이번에는 Registry Server를 제대로 사용할 수 있는지 확인해보자.
그런데, 이미 가지고 있는 이미지들이 있으니 테스트를 위해서 확인하고 지워놓자.
REPOSITORY TAG IMAGE ID CREATED SIZE
hi-world latest 81d1537591cc 32 minutes ago 1.11 MB
localhost:5000/hi-world latest 81d1537591cc 32 minutes ago 1.11 MB
registry latest c2a449c9f834 3 days ago 33.2 MB
busybox latest c30178c5239f 2 weeks ago 1.11 MB
hello-world latest 1815c82652c0 2 weeks ago 1.84 kB
hi-world, localhost:5000/hi-world 2개의 이미지가 있다. 지우자!
Untagged: hi-world:latest
$ sudo docker rmi localhost:5000/hi-world
Untagged: localhost:5000/hi-world:latest
Untagged: localhost:5000/hi-world@sha256:410ad4c96024f632bde893190d71a3c10457419c50375ab1d878f2ad67d76775
Deleted: sha256:81d1537591cc43e879aeed3e0556788f9b6b75ab6377fd1db6c9266472f27f09
Deleted: sha256:358acd2e8b9f52adffcdd2870487bdc36d7842677d602ffdf533776ac55a7574
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
registry latest c2a449c9f834 3 days ago 33.2 MB
busybox latest c30178c5239f 2 weeks ago 1.11 MB
hello-world latest 1815c82652c0 2 weeks ago 1.84 kB
hi-world 이미지가 없는 것을 확인했다.
이제 땡겨오자.
Using default tag: latest
latest: Pulling from hi-world
27144aa8f1b9: Already exists
Digest: sha256:410ad4c96024f632bde893190d71a3c10457419c50375ab1d878f2ad67d76775
Status: Downloaded newer image for localhost:5000/hi-world:latest
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
localhost:5000/hi-world latest 81d1537591cc 33 minutes ago 1.11 MB
registry latest c2a449c9f834 3 days ago 33.2 MB
busybox latest c30178c5239f 2 weeks ago 1.11 MB
hello-world latest 1815c82652c0 2 weeks ago 1.84 kB
잘 받아온 것을 확인했다.
동작이 잘되는지도 확인해보자.
hi-world!!
물론 잘된다.
혹시 아래와 같은 에러가 발생할 경우에는...
$ sudo docker pull xxx.xxx.xx.xx:5000/asdf
Using default tag: latest
Error response from daemon: Get https://xxx.xxx.xxx.xxx:5000/v1/_ping: http: server gave HTTP response to HTTPS client
아래와 같이 환경설정을 해주면 된다.
$ sudo nano /etc/default/docker
...
# Use DOCKER_OPTS to modify the daemon startup options.
#DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4"
DOCKER_OPTS="--insecure-registry xxx.xxx.xxx.xxx:5000"
$ sudo service docker restart
기본적인 사항은 여기까지 해서 살펴보았지만...
아직 사용하기에는 문제가 많이 있는 상태이다.
당장 인증 관련한 부분에 있어서 문제가 있다. 아무나 쓸 수 있도록 한다면 뭐 무방하지만.... ^^
LDAP과 같은 계정서버와의 연계라던지 아니면 로드밸런싱이라던지... 등 알아봐야할게 아직 많다.
뭐 일단, 이번 포스트는 여기까지~
'Dev Tools > Docker' 카테고리의 다른 글
docker-compose Install (18.04) (0) | 2019.07.15 |
---|---|
Docker Install (Ubuntu 16.04/18.04 - 64bit) - using Download (0) | 2019.07.07 |
Docker Install (Ubuntu 14.04 - 64bit) - using Download (0) | 2017.05.09 |
Docker Install (Ubuntu 14.04 - 64bit) - using Repository (0) | 2017.05.09 |
Dockerfile 이게 뭐지 ? (0) | 2016.01.08 |