✔️ Docker Hub 사용법
✔️ Docker Hub 로그인
vagrant@docker ~/node/web 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: ttoii
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
도커 이미지는 web 인터페이스에서 올리지 못한다. 반드시 명령어로만 올릴 수 있다.
/home/vagrant/.docker/config.json.
에 인증 정보가 저장되어 있으므로 주의해야 한다.
이미지를 빌드할 때 home 디렉토리에서 빌드하는 경우가 있다.
특히 ~/.aws 디렉토리에는 credential 파일에 AWS 계정 인증 정보가 담겨 있는데,
실수로 .dockerignore 파일을 생성하지 않고 빌드하면 home 디렉토리와 하위 디렉토리의 모든 파일이 이미지에 담겨져 심각한 보안 사고가 발생할 수 있다.
vagrant@docker ~/node/web docker push pyhello:v1
The push refers to repository [docker.io/library/pyhello]
57b7d5fe8a88: Preparing
bdfe286695e3: Preparing
240b01a8ef06: Preparing
4bc966bb1030: Preparing
99382be4915c: Preparing
ca58f1c44290: Waiting
957a6eed8d1f: Waiting
85fe00380881: Waiting
5d253e59e523: Waiting
b9fd5db9c9a6: Waiting
denied: requested access to the resource is denied
✘ vagrant@docker ~/node/web
예전에 만들어놓은 pyhello:v1 이라는 커스텀 이미지를 push 해본다.
하지만 업로드에 실패한다.
도커의 이미지명은 표준 구성을 가지는데
- docker.io - 레지스트리 주소이다.
- library - 계정 이름이다.
- pyhello - 이미지의 이름이다.
따라서 우리가 빌드할 이미지의 이름을 표준 구성으로 바꿔야 한다.
좀 더 정확하게 말하면 이미지의 이름을 바꾼다기 보다는 이미지에 태그를 달아주는 개념이다.
vagrant@docker ~/node/web docker tag pyhello:v1 ttoii/pyhello:v1
vagrant@docker ~/node/web docker image ls | grep pyhello
pyhello v1-alpine c71d85809b11 26 hours ago 47.5MB
pyhello v1-slim 6a46260fd967 26 hours ago 118MB
pyhello v1 80b1fce6f6d2 26 hours ago 889MB
ttoii/pyhello v1 80b1fce6f6d2 26 hours ago 889MB
docker tag 명령어로 이미지에 태그를 붙인다.
docker tag pyhello:v1 ttoii/pyhello:v1 기존 이미지명에 ttoii/pyhello:v1 태그를 붙인다.
vagrant@docker ~/node/web docker push ttoii/pyhello:v1
Docker Hub에 올릴 때는 docker.io라는 주소를 지정할 필요가 없다. (docker.io를 붙여도 상관없다.)
이미지가 Public 상태라면 누구나 pull 할 수 있다.
public 레포지토리는 몇개를 만들던 무제한이다.
private은 1개 까지만 무료이다. private은 push, pull 모두 인증받은 사용자만이 가능하다.
따라서 기본적으로는 계정주만 가능하다.
Organizations를 만들어서 여러 사람들의 계정을 추가하면 private 레포지토리여도 push, pull을 할 수 있다. (유료 계정만 가능하다.)
Unlimited public repositories - public 레포지토리는 제한이 없다.
Limited image pulls per day - 하나의 이미지를 받을 수 있는 횟수를 100번으로 제한했다.
Docker login한 사용자는 무료 사용자라도 200번까지 가능하다.
일반적으로 우리가 push를 하면 public으로 push된다.
현재 v1 이라는 태그가 있고 Linux OS이며 pull 횟수와 언제 push 되었는지 확인할 수 있다.
public view는 계정주가 아닌 일반 사용자들이 보는 화면이다.
Settings에 보면 Visibility Settings이 있고 Make Private을 누르면 private 레포지토리로 전환할 수 있다.
삭제를 원하면 Delete repository를 하면 된다.
항상 public으로 push되므로 처음부터 private 레포지토리로 사용하고 싶다면 먼저 레포지토리를 만들어야 한다.
sohui_private라고 만들었기 때문에 태그에서 로컬 이미지 이름을 해당 레포지토리로 달아서 push해야 한다.
현재는 Last pushed : Never 로 되어있다.
vagrant@docker ~ docker tag chello ttoii/sohui_private
vagrant@docker ~ docker push ttoii/sohui_private
Using default tag: latest
The push refers to repository [docker.io/ttoii/sohui_private]
e5b008007924: Pushed
22bb36c27697: Pushed
157042911ac3: Pushed
latest: digest: sha256:66c0ef7e1bb790e9a33c88b4faef2e9325a6597ebe02db1be2f723749f9e0461 size: 944
vagrant@docker ~ docker rmi ttoii/sohui_private
Untagged: ttoii/sohui_private:latest
Untagged: ttoii/sohui_private@sha256:66c0ef7e1bb790e9a33c88b4faef2e9325a6597ebe02db1be2f723749f9e0461
vagrant@docker ~ docker logout
Removing login credentials for https://index.docker.io/v1/
vagrant@docker ~ docker pull ttoii/sohui_private
Using default tag: latest
Error response from daemon: pull access denied for ttoii/sohui_private, repository does not exist or may require 'docker login': denied: requested access to the resource is denied
해당 레포지토리는 private 이기 때문에 docker logout 상태에서 pull을 시도하면 다운 받을 수 없다.
인증을 받은 사용자만 받을 수 있기 때문이다.
✔️ 이미지 빌드 및 태그, 푸시
docker build -t ttoii/mygo:latest -t ttoii/mygo:1.0 -t ttoii/mygo:1 .
docker push ttoii/mygo:latest ttoii/mygo:1.0 ttoii/mygo:1
이미지를 어디에 올릴것인지 미리 생각한다면 그에 맞춰 태그를 만드는 것이 좋다.
태그는 한번에 여러개 만들 수 있다.
이렇게 빌드를 실행하면 세개의 이미지가 만들어질 것이다.
docker build -t ttoii/mygo:latest -t ttoii/mygo:1.1 -t ttoii/mygo:1 .
그리고 그 다음 버전을 빌드할 때는 이렇게 한다. 1.0 → 1.1
docker push ttoii/mygo:latest ttoii/mygo:1.1 ttoii/mygo:1
docker build -t ttoii/mygo:latest -t ttoii/mygo:1.2 -t ttoii/mygo:1 .
이렇게 하면 앞서 만든 ttoii/mygo:latest 이미지와 ttoii/mygo:1 이미지는 사라지며 맨 마지막의 ttoii/mygo:latest와 ttoii/mygo:1는 같은 이미지가 된다.
docker push ttoii/mygo:latest ttoii/mygo:1.2 ttoii/mygo:1
그러다가 또 버전이 변경되면
docker build -t ttoii/mygo:latest -t ttoii/mygo:2.0 -t ttoii/mygo:1 .
이렇게 처리하는 것이다.
최종적으로 남아있는 이미지는 7개이다. latest는 매번 없어진다.
docker push ttoii/mygo:latest ttoii/mygo:2.0 ttoii/mygo:1
docker build -t mygo
docker tag mygo ttoii/mygo:2.1
중요한 것은 push 할 때 계정명:레포지토리명 이름을 맞춰주는 것이다.
✔️ Automated Builds
원래 이 기능은 무료였다. Dockerfile을 올리면 자동으로 build해주는 기능이다.
이 기능을 사용하려면 github과 연동되어야 한다.
build는 컴퓨팅 작업이 필요하다.
악성 사용자들이 bit coin 채굴 프로그램을 교묘하게 삽입하여 실행시켜서 도커의 컴퓨터 자원을 무료로 사용했다.
그래서 도커는 이 기능을 유료로 바꾸었다.
Collaborators 기능을 통해 다른 사용자들과 같이 관리할 수 있다.
'DevOps > Docker' 카테고리의 다른 글
[Docker] Docker를 이용하여 wordpress 배포하기 (0) | 2022.05.15 |
---|---|
[Docker] Docker Compose 사용법 (0) | 2022.05.13 |
[Docker] node.js App을 Docker Image로 빌드하기 (0) | 2022.05.12 |
[Docker] Web App을 Docker Image로 빌드하기 (0) | 2022.05.12 |
[Docker] Golang App을 Docker Image로 빌드하기 (0) | 2022.05.12 |
영차영차 성장 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!