Docker Hub 소개
1. node.js로 Hello World를 프린트하는 프로그램을 작성합니다.
2. 그 프로그램을 Docker Image로 만듭니다.
3. 만든 이미지를 컨테이너에서 실행합니다.
4. Docker Hub에 로딩합니다.
5. 다른 컴퓨터에서 Pull해 Container에서 실행합니다.
이전 시간에 1~3의 과정을 살펴보았습니다. 4~5 과정에 대해 살펴보겠습니다.
4. Docker Hub에 로딩
Docker Registry에 등록 (1): Docker Hub 회원등록
먼저 Docker Hub에 회원 등록: https://hub.docker.com/
ID와 Password를 기억해둘 것
Docker Registry에 등록 (2): hello-world-docker repo 만들기

Create repository 선택
이름을 “hello-world-docker”로 지정. Public 속성 지정:
(본인의 Docker Hub ID)/hello-world-docker(repo 이름)
Docker Registry에 등록 (3)
터미널로 이동하여 다음 명령을 실행
먼저 현재 이미지의 repo 이름을 (본인 ID)/hello-world-docker로 변경

docker tag 명령에 2개의 인자를 줍니다.
첫번째 인자의 이름과 버전에 두번째 인자의 이름과 버전을 별칭으로 준다는 명령입니다.
첫번째 인자 hello-world-docker:latest는 우리가 이전에 만든 (도커 이미지의 이름):(자동으로 붙은 latest 태그) 도커 이미지 입니다. 두번째 인자 keeyong/hello-world-docker:latest는 우리가 Docker Hub에서 만들었던 이미지 이름 keeyong/hello-world-docker입니다. 정리하자면 버전(latest)는 그대로 둔채 hello-world-docker에게 아까 Docker Hub에서 만든 keeyong/hello-world-docker를 별칭으로 주겠다는 뜻입니다.
keeyong은 이미지의 이해를 돕기위한 지칭이니 본인의 Docker Hub ID로 바꿔주세요.
docker login으로 keeyong/hello-world-docker repo에 접근 가능한 것을 증명하고
docker push로 방금 이름을 바꾼 Docker Image를 Docker Hub서버로 업로드합니다.
Git과 거의 동일하죠?
Docker Registry에 등록 (4): Docker Hub에서 결과 확인

5. Docker Hub로부터 받은 Image 실행
다른 서버에서 이미지를 다운로드 받아 컨테이너로 실행하기 (1)

https://labs.play-with-docker.com/ 를 사용해서 4시간동안 서버를 하나 무료로 사용
Docker Hub에 로그인이 되어있다면 그냥 계정 연결을 허용하면 됨
다른 서버에서 이미지를 다운로드 받아 컨테이너로 실행하기 (2)
터미널 윈도우를 Option+Enter(윈도우는 Alt+Enter)로 최대화하고 아래 명령 실행

keeyong/hello-world-docker repo에 이미 이미지를 업로드 했습니다. 그리고 이미 Docker Hub로 로그인을 한 다음이기 때문에 서버는 이미 repo에 대한 접근 권한이 있다는 것을 알고 있어 docker login과 같은 과정이 필요 없고 pull을 진행하면 됩니다.
사실 docker run만 진행해도 됩니다. 만일 로컬에 다운로드 받은 이미지가 없다면 docker hub에서 pull을 알아서 수행하기 때문입니다.(빨간색 박스 부분)
실행시 아래 에러가 난다면 build할때 --platform 옵션 사용 필요:
WARNING: The requested image's platform
(linux/arm64/v8) does not match the detected host
platform (linux/amd64/v3) and no specific platform was
requested exec /usr/local/bin/docker-entrypoint.sh: exec
format error
$ docker build --platform linux/amd64 -t hello-world-docker .
에러를 방지하려면 이미지를 생성할 때 --platform으로 platform을 지정해야 합니다.
다른 서버에서 이미지를 다운로드 받아 컨테이너로 실행하기 (3)

Docker Desktop에서 로그인
(불필요하지만) Docker Desktop에서 Docker Hub으로 로그인해두면 Desktop에서 Pull, Push 등을 수행 가능

여기서 사용해본 Docker 명령 요약
docker version
docker build -t
이미지 이름과 버전을 설정
-t 이후에 이름과 콜론(:)까지 붙여 버전까지 지정 가능
docker push
docker login
docker tag
별칭을 만들어주기
docker pull
docker run
CMD와 ENTRYPOINT
p option (port mapping)
v option (volume mapping)
docker run vs. docker exec
docker run과 docker exec의 차이점은 무엇일까?
docker run은 새로 Container를 실행하는 것
docker exec는 이미 실행된 Container에 작업을 하는 것
그래서 이 명령은 Container ID가 필요함
두 명령 모두 --user root 혹은 -u root를 통해 루트 유저로 연결가능
Dockerfile에 지정된 default 유저가 아닌 루트 유저로 연결
'Docker & K8S' 카테고리의 다른 글
| Docker & K8S - 데모 (0) | 2023.12.18 |
|---|---|
| Docker & K8S - IMAGE와 TAG 보충 설명 (0) | 2023.12.18 |
| Docker & K8S - 실습 간단한 Hello World 프로그램(1) (0) | 2023.12.18 |
| Docker & K8S - Docker 프로그램 개발 프로세스 (0) | 2023.12.18 |
| Docker & K8S - Docker 설치 (0) | 2023.12.18 |