패스트캠퍼스 챌린지 25일차: Docker Hub & Docker API - 2
- 아된장...
레이어 기반을 헥사고날 아키텍처로 바꾸다가 해매고
작성을 주말에 몰아서 하는것만 5일치네...
시간을 달려서~
...........
잡설은 여기까지.
이 부분의 강의를 요약하자면, '도커 허브에 API를 사용해서 컨테이너를 올리기' 니까,
괜춘한 설명 템플릿으로 정리하도록 한다.
-------------------------
도커 허브에 이미지 올리기
앞서 도커 공식 이미지를 도커 허브에서 받아온다는 것을 확인해보았습니다. 다시 한 번 docker info 명령어로 확인해보겠습니다.
$ docker info | grep Registry Registry: https://index.docker.io/v1/
이론 상 다수의 도커 레지스트리가 존재할 수 있습니다만, 도커 클라이언트는 기본적으로 도커 허브를 사용합니다. 출력 결과에 보이는 https://index.docker.io/v1/이 도커 허브의 API 서버 주소입니다. 실제로 도커 이미지의 풀네임에는 도커 레지스트리의 주소가 포함되어있습니다. 예를 들어 ubuntu:bionic 이미지의 풀네임은 docker.io/library/ubuntu:bionic입니다. docker pull 명령어로 한 번 확인해보겠습니다.
$ docker pull docker.io/library/ubuntu:bionic bionic: Pulling from library/ubuntu Digest: sha256:bec5a2727be7fff3d308193cfde3491f8fba1a2ba392b7546b43a051853a341d Status: Image is up to date for ubuntu:bionic docker.io/library/ubuntu:bionic
이미지가 정상적으로 풀 되는 것을 알 수 있습니다. 이미지의 풀네임은 크게 4부분으로 구성되어있습니다. 맨 앞의 docker.io는 도커 레지스트리의 서버 주소입니다. 슬래시로 구분된 library는 네임스페이스입니다. 도커 허브의 경우 네임스페이스가 곧 사용자 이름이기도 합니다. library는 도커 공식 이미지를 제공하는 특별한 네임스페이스입니다. 다음 슬래시 다음에 오는 문자열이 이미지 고유의 이름입니다. 그리고 : 뒤에는 추가적으로 이미지를 구분해주기 위한 태그가 따라옵니다. 하나의 이미지 저장소는 태그가 다른 다수의 이미지를 가질 수 있습니다. 도커 클라이언트에서는 편의상 docker.io/를 생략하더라도 기본 레지스트리 서버로 사용합니다.
도커 허브는 공식 이미지를 풀 받는 데 사용할 수도 있지만, 직접 만든 이미지를 올리거나 배포하는 데도 사용할 수 있습니다. 퍼블릭 도커 이미지의 경우는 무료로 제공되며, 프라이빗 이미지를 사용하는 경우 비용이 발생합니다. 도커 허브를 사용하려면 먼저 회원 가입을 진행해야합니다.
도커 허브를 사용하려면 먼저 계정을 생성해야합니다
계정을 생성하고 나면 도커 클라이언트를 사용해 로그인할 수 있습니다.
$ 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: Password: WARNING! Your password will be stored unencrypted in /home/vagrant/.docker/config.json. Configure a credential helper to remove this warning. See https://docs.docker.com/engine/reference/commandline/login/#credentials-store Login Succeeded
ID와 패스워드를 입력하면 로그인이 됩니다. 로그인 명령어에도 서버를 지정할 수 있는데, 지정하지 않으면 기본값으로 도커 허브에 로그인을 합니다. 이제 이미지를 바로 도커 허브에 올려보겠습니다. 앞서 모니위키 이미지 이름을 nacyot/moniwiki:latest라고 지었습니다. 여기서 nacyot은 네임스페이스에 해당하는 부분으로 도커 허브에서는 사용자 이름을 의미합니다. 즉, 자신의 아이디로 이미지 이름을 변경해줍니다.
$ docker tag nacyot/moniwiki:latest <DOCKER_HUB_ID>/moniwiki:latest
이름이 변경되었으면 바로 이미지를 푸시해봅니다. 푸시한 이미지는 공개 저장소로 등록됩니다.
$ docker push <DOCKER_HUB_ID>/moniwiki:latest
이름 규칙만 맞으면 도커 허브는 아직 <DOCKER_HUB_ID>/moniwiki 이미지 저장소가 없더라도, 푸시 작업 과정에서 이미지 저장소를 생성해줍니다. 도커 허브에서도 푸시한 이미지를 확인할 수 있습니다.
도커 허브에서 푸시한 이미지 저장소를 확인할 수 있습니다
이제 로컬에서 이 이미지를 삭제하더라도 도커 허브에서 다시 풀 받을 수 있습니다. 또한 다른 서버에서 이 이미지를 풀 받아 실행하는 것도 가능합니다.
디지털오션(Digital Ocean)에서 도커로 모니위키 컨테이너 실행
도커 허브에 이미지를 푸시했으니 이번에는 정말 다른 서버에서 배포를 해보겠습니다. 어떤 서버를 준비해도 무방하지만, 여기서는 디지털오션DigitalOcean의 가상 서버를 사용하고자 합니다. 디지털오션을 사용하려면 계정 생성을 해야하고, 사용 시간에 따라 비용이 발생할 수 있습니다.
디지털오션 메인 페이지
자신의 계정으로 로그인을 하고 드롭릿(가상 서버)를 하나 생성합니다.
디지털오션에 드롭릿(가상 머신)을 생성합니다
우분투 18.04, 스탠다드 플랜, $5/mo(1GB RAM, 1 CPU), 싱가폴 리전, 원타임 패스워드를 선택했습니다. 월 $5지만 시간당으로 요금이 계산되므로 몇 시간 실행한다고 가정하면 몇 십원 정도의 요금이 발생합니다. 서버를 생성합니다. 서버가 생성되고 나면 이메일로 IP, 사용자, 임시 패스워드가 전달됩니다.
Droplet Name: ubuntu-s-1vcpu-1gb-sgp1-01 IP Address: 128.199.131.36 Username: root Password: <PASSWORD>
이 정보를 바탕으로 서버에 접속해봅니다. 서버에 처음 접속하면 패스워드를 변경해야합니다. 적절한 값으로 변경해줍니다.
$ ssh root@128.199.131.36 root@128.199.131.36's password: root@ubuntu-s-1vcpu-1gb-sgp1-01:~#
먼저 도커를 설치합니다.
$ curl -s https://get.docker.com | sudo sh $ docker --version Docker version 19.03.8, build afacb8b7f0
이제 앞서 푸시했던 모니위키 이미지로 컨테이너를 실행해주기만 하면 됩니다.
$ docker run -d -p 9999:80 <DOCKER_HUB_ID>/moniwiki:latest $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 59f10c4efe3d <DOCKER_HUB_ID>/moniwiki:latest "/bin/sh -c 'bash -c..." 7 seconds ago Up 3 seconds 0.0.0.0:9999->80/tcp relaxed_bohr
웹브라우저에서 9999 포트로 접근해보면 모니위키 서버가 실행중인 것을 확인할 수 있습니다.
디지털오션 드롭릿에서 실행중인 모니위키 서버. 이 서버는 인터넷으로 접근할 수 있습니다
도커 허브에 이미지를 푸시해놓으니, 도커 설치하고, 컨테이너 실행하고, 딱 2단계로 애플리케이션 배포가 끝났네요.
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
패스트캠퍼스 [직장인 실무교육]
프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.
fastcampus.co.kr