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
애저의 프라이빗 컨테이너 레지스트리로부터 바로 와서 실행된다.