Docker Hub 사용법 push pull
Docker Hub는 로컬에서 생성한 이미지를 업로드해서 클라우드로 관리할 수 있는 환경입니다. CI/CD 를 구성하실 때 Docker Hub를 통해 코드를 컨테이너 단위로 관리할 수 있습니다.
이번 콘텐츠에서는 Docker Hub를 어떻게 사용하는지 알아보도록 하겠습니다.
기본 프로젝트 구성
아래 명령어로 기본 Node.js 기반 프로젝트를 실행합니다.
$ npm init -y
간단한 서버를 구성하기 위해 index.js파일을 생성하고 아래 코드를 입력합니다.
추가적으로 express 모듈을 설치합니다.
const express = require('express');
const app = express();
app.get('/', (req, res)=>{
res.status(200).json("hello server");
})
app.listen('9191', ()=>{
console.log('server is running on 9191 PORT');
})
~
$ npm install express
package.json 파일을 수정해줍니다.
{
"name": "docker-push",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"start" : "node index",
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"express": "^4.18.2"
}
}
Dockerfile을 생성해줍니다.
$ touch Dockerfile
Docker Image build
Node.js를 Docker Image로 빌드합니다.
$ docker build -t my-node-image:1.0.0 .
Sending build context to Docker daemon 2.413MB
Step 1/6 : FROM node:16
---> aa2c07b3a605
Step 2/6 : LABEL author="about-tech"
---> Running in b79337a56800
Removing intermediate container b79337a56800
---> 52c44f2f38c3
Step 3/6 : WORKDIR /usr/src/app
---> Running in e9cf16667c11
Removing intermediate container e9cf16667c11
---> aeb2b3449d47
Step 4/6 : COPY package.json ./
---> f8be45ca5d0c
Step 5/6 : RUN npm install
---> Running in 2bfd29d2210e
added 57 packages, and audited 58 packages in 3s
7 packages are looking for funding
run `npm fund` for details
found 0 vulnerabilities
Removing intermediate container 2bfd29d2210e
---> 5a5d8942516f
Step 6/6 : CMD ["npm","run","start"]
---> Running in 202a43d13ac3
Removing intermediate container 202a43d13ac3
---> 9f10d47c3331
Successfully built 9f10d47c3331
Successfully tagged my-node-image:1.0.0
생성된 도커 이미지를 확인합니다.
$ docker images
Docker Hub Create Account
DockerHub 사이트로 이동해서 새로운 계정을 생성합니다.
계정생성 후 CLI 환경에서 DockerHub에 로그인 해줍니다.
$ 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: myaccount
Password:
DockerHub 계정이 생성되면 해당 계정에 무제한의 이미지를 빌드해서 push 할 수 있습니다.
push하기 위해서는 {계정}/{repositoryName:tagname}을 입력하시면 됩니다.
$ docker push my-node-image:1.0.0
이렇게 입력하면 아래 에러가 발생합니다. Repository이름과 Hub 이름이 같아야 정상적으로 push 할 수 있기 때문입니다.
The push refers to repository [docker.io/account/my-repo]
An image does not exist locally with the tag: account/my-repo
생성된 태그이름을 변경&복사 해줍니다.
$ docker image tag {기존태그이름} {새로운태그이름}
$ docker image tag my-node-image:1.0.0 myaccount/my-node-image:1.0.0
새로운 이름의 이미지가 생성되었습니다.
REPOSITORY TAG IMAGE ID CREATED SIZE
my-node-image 1.0.0 9f10d47c3331 8 minutes ago 917MB
{myaccount}/my-node-image 1.0.0 9f10d47c3331 8 minutes ago 917MB
다시 DockerHub에 push 를 진행하면 정상적으로 이미지가 DockerHub에 올라갑니다.
$ docker push {myaccount}/my-node-image:1.0.0
The push refers to repository [docker.io/{myaccount}/my-node-image]
365a5fc631e4: Pushed
0184d8759632: Pushed
94d4edd99e59: Pushed
136668aad748: Mounted from {myaccount}/pserver-image
0146fd3bfbe1: Mounted from {myaccount}/pserver-image
c93502166d2b: Mounted from {myaccount}/pserver-image
0b1c009597ad: Mounted from {myaccount}/pserver-image
b9b05a3855c6: Mounted from {myaccount}/pserver-image
132e6b0c0edd: Mounted from {myaccount}/pserver-image
d5ce45249ce1: Mounted from {myaccount}/pserver-image
b7392dc58749: Mounted from {myaccount}/pserver-image
083aacb889b3: Mounted from {myaccount}/pserver-image
1.0.0: digest: sha256:65a78994a106d97555f5c6f434f80464ab9c78d7ff6de44a5c24d435f476fc9e size: 2840
DockerHub에 myProfile에 접속하시면 업로드된 이미지를 확인 할 수 있습니다.
DockerHub Pull
이제 이미지를 올렸으니 가져와서 이미지를 실행해보도록 하겠습니다.
DockerHub Repository에 들어가시면 오른쪽에 pull 방법이 나와있습니다.
아래 명령어로 DockerHub에 올라간 이미지를 가져올 수 있습니다.
$ docker pull {myaccount}/my-node-image:1.0.0
Digest: sha256:65a78994a106d97555f5c6f434f80464ab9c78d7ff6de44a5c24d435f476fc9e
Status: Downloaded newer image for {myaccount}/my-node-image:1.0.0
docker.io/{myaccount}/my-node-image:1.0.0
기존 로컬에 이미지가 있으면 덮어쓰기 때문에 기존 이미지를 삭제하시고 정상적으로 pull 이 되는지 확인해보세요
$ docker rmi {REPOSITORY:TAG}
🚀️ 도움이 되셨다면 구독과 좋아요 부탁드립니다 👍️
당신을 위한 추천 글
'Programming' 카테고리의 다른 글
Naver 광고 API 사용법 (Javascript) (0) | 2023.01.26 |
---|---|
CI/CD #5 배포 구성하기 Github Actions EC2 Docker .env 생성하기 [추가자료] (0) | 2023.01.20 |
React 정적 웹 페이지 배포하기(S3, AWS CodePipeline, 환경변수) (0) | 2023.01.19 |
HTML5 웹페이지 만들기 #3 CSS3 선택자(seletor) (0) | 2023.01.16 |
CSSOM 트리 DOM과 무엇이 다른가? (0) | 2023.01.16 |
댓글