docker를 이용한 패키징 및 레지스트리 등록

이동건·2022년 11월 2일

Docker

목록 보기
1/2

docker file

FROM node:12.18.1-alpine

WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install --only=production
COPY ./src ./src
COPY ./videos ./videos
CMD npm start

명령어 입력

docker build -t video-streaming --file Dockerfile .

-t : 이미지 태그나 이름을 부여
--file : 사용할 도커파일 이름 지정
. : 도커파일 경로

결과

[+] Building 12.1s (11/11) FINISHED
 => [internal] load build definition from Dockerfile                                                                         0.0s
 => => transferring dockerfile: 200B                                                                                         0.0s
 => [internal] load .dockerignore                                                                                            0.0s
 => => transferring context: 2B                                                                                              0.0s
 => [internal] load metadata for docker.io/library/node:12.18.1-alpine                                                       3.6s
 => [1/6] FROM docker.io/library/node:12.18.1-alpine@sha256:3af7615925ac3a000990b74cb1f98d1ab33644a895fb88a554cd9288c9da960  6.7s
 => => resolve docker.io/library/node:12.18.1-alpine@sha256:3af7615925ac3a000990b74cb1f98d1ab33644a895fb88a554cd9288c9da960  0.0s
 => => sha256:3af7615925ac3a000990b74cb1f98d1ab33644a895fb88a554cd9288c9da960a 1.43kB / 1.43kB                               0.0s
 => => sha256:40feffc03eb06b7f4435a1dc7e2a3b506f08d21cfc73622c201957a7be1ac0b0 1.16kB / 1.16kB                               0.0s
 => => sha256:393c48988b6f4f6b5ae63f06d75fbd4510c0bd2df766e8c714288b6216b407b8 6.77kB / 6.77kB                               0.0s
 => => sha256:29e5d40040c18c692ed73df24511071725b74956ca1a61fe6056a651d86a13bd 2.72MB / 2.72MB                               0.5s
 => => sha256:1f330c3b5d7dfd93586e0a9cd86305dbb9f20fdd072303b2ab63b5b643476d55 24.79MB / 24.79MB                             5.6s
 => => sha256:895ca0c2289de2ec5eb556dd742d8f2a291a82514d322e900fb587c9d34bca1b 2.30MB / 2.30MB                               1.6s
 => => extracting sha256:29e5d40040c18c692ed73df24511071725b74956ca1a61fe6056a651d86a13bd                                    0.1s
 => => sha256:0a71dcab8e9721c0f38e687383e95097029d807642ab752fd3c59e32f4a9d5bf 280B / 280B                                   2.4s
 => => extracting sha256:1f330c3b5d7dfd93586e0a9cd86305dbb9f20fdd072303b2ab63b5b643476d55                                    0.8s
 => => extracting sha256:895ca0c2289de2ec5eb556dd742d8f2a291a82514d322e900fb587c9d34bca1b                                    0.1s
 => => extracting sha256:0a71dcab8e9721c0f38e687383e95097029d807642ab752fd3c59e32f4a9d5bf                                    0.0s
 => [internal] load build context                                                                                            0.1s
 => => transferring context: 1.15MB                                                                                          0.1s
 => [2/6] WORKDIR /usr/src/app                                                                                               0.1s
 => [3/6] COPY package*.json ./                                                                                              0.0s
 => [4/6] RUN npm install --only=production                                                                                  1.4s
 => [5/6] COPY ./src ./src                                                                                                   0.0s
 => [6/6] COPY ./videos ./videos                                                                                             0.0s
 => exporting to image                                                                                                       0.1s
 => => exporting layers                                                                                                      0.1s
 => => writing image sha256:a802fe39a9b1e2d88e828e9877f3f23543a387c775e6ccb14ee488e0a4406b29                                 0.0s
 => => naming to docker.io/library/video-streaming                                                                           0.0s

Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them

이미지 리스트 확인

docker image list
REPOSITORY                    TAG       IMAGE ID       CREATED             SIZE
video-streaming               latest    a802fe39a9b1   About an hour ago   92.5MB

인스턴스 생성

docker run -d -p 3000:3000 video-streaming
2b0730d3b443953d0cf86f379db8368e40cc6685faf1af1eef5645701f4f3abb

-d : 분리모드로 컨테이너 구동. 즉, 백그라운드로 실행
-p : 호스트 운영체제와 컨테이너 포트를 연결

컨테이너 검사

docker container list
CONTAINER ID   IMAGE             COMMAND                  CREATED         STATUS         PORTS                    NAMES
2b0730d3b443   video-streaming   "docker-entrypoint.s…"   2 minutes ago   Up 2 minutes   0.0.0.0:3000->3000/tcp   quirky_allen

마이크로서비스 검사

docker logs 2b0730d3b443

> example-1@1.0.0 start /usr/src/app
> node ./src/index.js

Microservice listening on port 3000, point your browser at http://localhost:3000/video

애저 컨테이너 레지스트리에 게시하기
donggun.azurecr.io 생성

레시스트리 인증하기
로그인하는 과정이다.

docker login donggun.azurecr.io --username donggun --password 비밀번호
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
Login Succeeded

이미지에 태그하기
이미지를 레지스트리에 게시하기 전에 반드시 푸시한 이미지의 위치를 도커에게 알려야한다. 그래서 태그를 사용.

docker tag video-streaming donggun.azurecr.io/video-streaming:latest

docker tag existing-image registry-url/image-name:version

적용된 태그 확인

image list
REPOSITORY                           TAG       IMAGE ID       CREATED             SIZE
donggun.azurecr.io/video-streaming   latest    a802fe39a9b1   About an hour ago   92.5MB
video-streaming                      latest    a802fe39a9b1   About an hour ago   92.5MB

이건 새로운 이미지를 만든 것이 아니라 기존 이미지에 태그만 붙인것이다.
고유 아이디를 확인해보면 같음을 알 수 있다.

이미지를 레지스트리에 푸시하기

docker push donggun.azurecr.io/video-streaming:latest
The push refers to repository [donggun.azurecr.io/video-streaming]
581b177ef112: Pushed
9cff6ddd662d: Pushed
928980d1da3c: Pushed
efa87777d615: Pushed
8aa884f519b9: Pushed
ad06cfb9547a: Pushed
41a049cd840c: Pushed
de00d7414423: Pushed
678a0785e7d2: Pushed
latest: digest: sha256:4248f40a8b63da6e6c74b54001352ad88d7f60d8ef7604258a7f49cf8e173733 size: 2203

docker push registry-url/image-name:version

푸시된 이미지 확인

로컬 이미지 지우기

docker ps
CONTAINER ID   IMAGE             COMMAND                  CREATED          STATUS          PORTS                    NAMES
2b0730d3b443   video-streaming   "docker-entrypoint.s…"   25 minutes ago   Up 25 minutes   0.0.0.0:3000->3000/tcp   quirky_allen

docker kill 2b0730d3b443
2b0730d3b443
docker rm 2b0730d3b443
2b0730d3b443

docker image list
REPOSITORY                           TAG       IMAGE ID       CREATED        SIZE
video-streaming                      latest    a802fe39a9b1   2 hours ago    92.5MB
donggun.azurecr.io/video-streaming   latest    a802fe39a9b1   2 hours ago    92.5MB

docker rmi a802fe39a9b1 --force
Untagged: video-streaming:latest
Untagged: donggun.azurecr.io/video-streaming:latest
Untagged: donggun.azurecr.io/video-streaming@sha256:4248f40a8b63da6e6c74b54001352ad88d7f60d8ef7604258a7f49cf8e173733
Deleted: sha256:a802fe39a9b1e2d88e828e9877f3f23543a387c775e6ccb14ee488e0a4406b29

레지스트리로부터 직접 컨테이너 실행하기

docker run -d -p 3000:3000 donggun.azurecr.io/video-streaming:l
atest
Unable to find image 'donggun.azurecr.io/video-streaming:latest' locally
latest: Pulling from video-streaming
29e5d40040c1: Already exists
1f330c3b5d7d: Already exists
895ca0c2289d: Already exists
0a71dcab8e97: Already exists
f8f94fdd007c: Already exists
4721e5f3aaaa: Already exists
02da047d7b89: Already exists
a6e9cf2b5f96: Already exists
f622365c9aec: Already exists
Digest: sha256:4248f40a8b63da6e6c74b54001352ad88d7f60d8ef7604258a7f49cf8e173733
Status: Downloaded newer image for donggun.azurecr.io/video-streaming:latest
2646b8c0f9519d3e3acb259789f5c827821757bde802316e6b3bfe029270b7ca

애저의 프라이빗 컨테이너 레지스트리로부터 바로 와서 실행된다.

profile
코드를 통한 세계의 창조

0개의 댓글