대충 알고 있는 Docker ~ Docker file 편을 다시 만나보도록 하겠습니다.
7765 단어 Docker
시원시원하다
제3회
지난번에 node를 실행할 수 있는 용기를 준비했습니다. 거기
git clone
에서 프로그램을 가져와서 실행할 수 있습니다.초고에 계속 남아 있는 것을 공개했다.
이번에 하고 싶은 거.
조사
중요한 것은 기초적인 인상, 그리고 +α나는 항상 사람들에게 이런 인상을 남길 것이라고 생각한다.
"Docker 인상 제작 방법"으로 조사하면 두 가지 방법이 있는 것 같습니다.
지난번에 용기
git clone
와npm install
에 들어갔지만 이 용기를 바탕으로 이미지를 만들었습니다.만든 이미지를 Docker Hub에 업로드합니다.Docker Hub에 다른 사람의 pull이 배치된 이미지입니다.이미지의 디자인 파일을 작성하여 다른 사람에게 전달합니다.
Dockerfile에서 이미지를 작성합니다.
만든 컨테이너 제작 이미지에서 Docker Hub로 로그인
복습할 때 용기를 만들고 프로그램을 시작한 후 그림을 만들어 보세요.
[ホスト]
# node公式のイメージでコンテナ起動
$ docker run -itd -p 8080:3000 --name node-react node:12.16.0-buster
# コンテナの中に入る
$ docker exec -it node-react /bin/bash
[コンテナ]
# 適当なディレクトリへアプリケーションをclone
root@af16fea41c03:/# cd /usr/src/
root@af16fea41c03:/usr/src# git clone https://github.com/wol-827/first-step.git
root@af16fea41c03:/usr/src# cd first-step/
# React起動用のモジュールインストール
root@af16fea41c03:/usr/src/first-step# npm i
root@af16fea41c03:/usr/src/first-step# npm start
[ホスト]
# コンテナ停止
$ docker stop node-react
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
af16fea41c03 node:12.16.0-buster "docker-entrypoint.s…" 6 minutes ago Exited (137) About a minute ago node-react
# コンテナからイメージを作成
$ docker commit [コンテナ名] [お好みのイメージ名]
$ docker commit node-react image_node-react
sha256:6545cd03fcf1615f339f3176a25aa7eb28380ac2690f8eb34c0b2aa5f9825c2d
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
image_node-react latest 6545cd03fcf1 26 seconds ago 1.06GB
node 12.16.0-buster ce43ce61c1de 31 hours ago 882MB
image_node-react
라는 이름의 이미지 메이킹 완료!그래도 사이즈가 크네요.
생성된 이미지를 사용하여 my-image라는 용기를 시작합니다.
[ホスト]
$ docker run -itd -p 8080:3000 --name my-image image_node-react
7116b515f71565b38cc86c399768ba43d918e7cea6b99a957dcd5a5121e46698
$ docker exec -it my-image /bin/bash
[コンテナ]
root@7116b515f715:/# cd /usr/src/first-step/
root@7116b515f715:/usr/src/first-step# npm start
git clone
및 npm install
를 건너뛸 수 있습니다.하지만이번 목표는 "1발 명령으로 응용 프로그램을 시작하는 것"이다.
이렇게 하면 용기에 들어가 프로그램이 있는 디렉터리로 이동하고 시작하는 과정이 남았다.
다음 명령을 통해 용기를 시작하면 초기 디렉터리를 지정할 수 있지만 그렇지 않습니다.
$ docker exec -it -w /usr/src/first-step my-image /bin/bash
Docker 이미지는 환경을 정의할 수 있지만 응용 프로그램이 시작되기 전에는 하지 않습니까?이미지 업데이트 시간?나는 이런 물건을 파악하지 못해서 그런 것 같다.
TODO: 이미지가 업데이트되는 시기(?)이런 걸 조사해.commit 명령도 있습니다.
이미지를 잘 만들지 못하기 때문에 Docker Hub의push에 또 다른 기회가 생겼습니다.
일단
docker commit
모드를 사용하면 여기까지입니다.문서 파일 만들기
Dockerfile을 찾아봤는데 컨테이너 구성 정보를 설명하는 파일이었습니다.
$ docker build [Dockerfile]
에서 Dockerfile에 설명된 대로 이미지를 생성합니다.그리고 제작된 이미지로 용기를 시작하면
즉시 기술방법을 조사하다.참고일본어 참조로 쓰세요.
기본적으로 여러 개
命令 引数
를 쓴 후에 위에서 집행한다.용기에 들어가는 명령만 기술하면 돼요!
이번에 만든 것을 토대로 평론을 하다.
Dockerfile
# ベースになるイメージをタグ付きで
FROM node:12.16.0-buster
# 作成したユーザ名(maintener)を記述 他にも色々ラベル付けできそう
LABEL maintainer=wol
# 作業ディレクトリを指定
WORKDIR /usr/src/app
# RUN: docker build時に実行するコマンド
RUN echo "=== build image ==="
RUN git clone https://github.com/wol-827/first-step.git .
RUN npm i
# CMD: docker run時に実行されるコマンド
CMD [ "npm", "start" ]
기본 이미지를 설명합니다.
원래 linux OS의 간단한 인상만 지정하고 낭비하지 않는 인상을 목표로 했지만 이번이 처음이기 때문에 쉽게 node의 인상을 지정할 수 있다
숨길 이미지에 레이블을 추가합니다.키-value 형식으로 무엇이든 쓸 수 있을 것 같아서 사건에 따라 사전에 상세한 라벨을 붙이면 관리가 수월해질 수 있다.
참고로 공식 문서에도 MAINTENER의 명령이 있지만 deprecated이기 때문에 주의해야 합니다.이걸로 하자.
작업 디렉토리를 지정합니다.그런 목록이 없으면 해줘.
이후의 RUN 및 CMD는 기본적으로 이 디렉토리에서 수행됩니다.(자신이 이동하는 동안 계속 이동)
그림build를 기술할 때 실행되는 명령입니다.위에서 실행하다.
컨테이너가 시작될 때 실행되는 명령을 설명합니다.기본적으로 응용 프로그램이나 서버가 시작하는 하즈입니다.
RUN과 달리 여러 개 기술해도 마지막 하나만 수행합니다.
TODO: 다른 명령도 보세요.
Dockerfile에서 이미지 생성 ~ 컨테이너 시작
# nodeのイメージのみ
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
node 12.16.0-buster ce43ce61c1de 3 days ago 882MB
# イメージをbuild
$ docker build [Dockerfileがあるディレクトリ]
-t イメージ名指定
$ docker build ./ -t dockerfile-image
Sending build context to Docker daemon 182.2MB
Step 1/7 : FROM node:12.16.0-buster
---> ce43ce61c1de
Step 2/7 : LABEL maintainer=wol
---> Using cache
---> 48452bf46eb7
Step 3/7 : WORKDIR /usr/src/app
---> Using cache
---> 4a3c93571f61
Step 4/7 : RUN echo "=== build image ==="
---> Using cache
---> 882fdefc7439
Step 5/7 : RUN git clone https://github.com/wol-827/first-step.git .
---> Running in c7e52d0eb9ff
Cloning into '.'...
Removing intermediate container c7e52d0eb9ff
---> d4fd9e858fba
Step 6/7 : RUN npm i
---> Running in b0abff570fe1
Removing intermediate container b0abff570fe1
---> 35adcb5772be
Step 7/7 : CMD [ "npm", "start" ]
---> Running in 57c44837099c
Removing intermediate container 57c44837099c
---> 3b909a1f0824
Successfully built 3b909a1f0824
Successfully tagged dockerfile-image:latest
# イメージ確認
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
★ちゃんと出来てる
dockerfile-image latest 3b909a1f0824 29 seconds ago 1.06GB
node 12.16.0-buster ce43ce61c1de 3 days ago 882MB
# buildしたイメージでコンテナ起動
$ docker run -p 8080:3000 --name node-react dockerfile-image
> [email protected] start /usr/src/app
> react-scripts start
Starting the development server...
Compiled successfully!
You can now view sample-app in the browser.
Local: http://localhost:3000/
On Your Network: http://172.17.0.2:3000/
Note that the development build is not optimized.
To create a production build, use npm run build.
됐어!
숙제로 삼다
build의 로그를 보면 RUN에 전달된 명령이 위에서 실행되었음을 알 수 있습니다.
TODO:
Removing intermediate container ~
의 일지가 마음에 듭니다.조사이번에 만든 Dockerfile을 자료 라이브러리에 넣고 다른 컴퓨터 clone으로 컨테이너 시동을 순조롭게 해 보세요.좋아.
총결산
나는 자신이 만든 그림을 다른 사람에게 전달하는 두 가지 방법을 시도했다.
솔직히 이미지 자체를 만들어서 상대방에게 맡기면 어떤 순서로 환경을 구축하는지 잘 모르겠다.인상 내용을 엿보는 방법도 며칠 뒤 조사해 보자.
다음엔 어떡하지?
컨테이너 간 통신이죠.어플을 먼저 해야죠.
Reference
이 문제에 관하여(대충 알고 있는 Docker ~ Docker file 편을 다시 만나보도록 하겠습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/wol/items/93b73642bea5cff90ad2텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)