대충 알고 있는 Docker ~ Docker file 편을 다시 만나보도록 하겠습니다.

7765 단어 Docker

시원시원하다


제3회
지난번에 node를 실행할 수 있는 용기를 준비했습니다. 거기git clone에서 프로그램을 가져와서 실행할 수 있습니다.
초고에 계속 남아 있는 것을 공개했다.

이번에 하고 싶은 거.

  • 용기 시작/응용 프로그램 clone/설치에 필요한 모듈/응용 프로그램 시작 명령 1발
  • 움직일 수 있는 컨테이너 1발, 다른 사람도 1발을 움직일 수 있다.
  • 조사


    중요한 것은 기초적인 인상, 그리고 +α나는 항상 사람들에게 이런 인상을 남길 것이라고 생각한다.
    "Docker 인상 제작 방법"으로 조사하면 두 가지 방법이 있는 것 같습니다.
  • 첫 번째
    지난번에 용기git clonenpm 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 clonenpm install 를 건너뛸 수 있습니다.
    하지만이번 목표는 "1발 명령으로 응용 프로그램을 시작하는 것"이다.
    이렇게 하면 용기에 들어가 프로그램이 있는 디렉터리로 이동하고 시작하는 과정이 남았다.
    다음 명령을 통해 용기를 시작하면 초기 디렉터리를 지정할 수 있지만 그렇지 않습니다.$ docker exec -it -w /usr/src/first-step my-image /bin/bashDocker 이미지는 환경을 정의할 수 있지만 응용 프로그램이 시작되기 전에는 하지 않습니까?
    이미지 업데이트 시간?나는 이런 물건을 파악하지 못해서 그런 것 같다.
    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" ]
    
  • FROM
    기본 이미지를 설명합니다.
    원래 linux OS의 간단한 인상만 지정하고 낭비하지 않는 인상을 목표로 했지만 이번이 처음이기 때문에 쉽게 node의 인상을 지정할 수 있다
  • LABEL
    숨길 이미지에 레이블을 추가합니다.키-value 형식으로 무엇이든 쓸 수 있을 것 같아서 사건에 따라 사전에 상세한 라벨을 붙이면 관리가 수월해질 수 있다.
    참고로 공식 문서에도 MAINTENER의 명령이 있지만 deprecated이기 때문에 주의해야 합니다.이걸로 하자.
  • WORKDIR
    작업 디렉토리를 지정합니다.그런 목록이 없으면 해줘.
    이후의 RUN 및 CMD는 기본적으로 이 디렉토리에서 수행됩니다.(자신이 이동하는 동안 계속 이동)
  • RUN
    그림build를 기술할 때 실행되는 명령입니다.위에서 실행하다.
  • CMD
    컨테이너가 시작될 때 실행되는 명령을 설명합니다.기본적으로 응용 프로그램이나 서버가 시작하는 하즈입니다.
    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.
    

    됐어!
    숙제로 삼다
  • Dockerfile 가져오기
  • docker build
  • docker run
  • 간단한 3단계 만족!
    build의 로그를 보면 RUN에 전달된 명령이 위에서 실행되었음을 알 수 있습니다.
    TODO:Removing intermediate container ~의 일지가 마음에 듭니다.조사
    이번에 만든 Dockerfile을 자료 라이브러리에 넣고 다른 컴퓨터 clone으로 컨테이너 시동을 순조롭게 해 보세요.좋아.

    총결산


    나는 자신이 만든 그림을 다른 사람에게 전달하는 두 가지 방법을 시도했다.
  • docker commit
  • Dockerfile + docker build
  • 저는 개인적으로 Dockerfile을 사용하는 방법이 더 잘 어울릴 것 같아요.
    솔직히 이미지 자체를 만들어서 상대방에게 맡기면 어떤 순서로 환경을 구축하는지 잘 모르겠다.인상 내용을 엿보는 방법도 며칠 뒤 조사해 보자.
    다음엔 어떡하지?
    컨테이너 간 통신이죠.어플을 먼저 해야죠.

    좋은 웹페이지 즐겨찾기