dockerシリーズ2独自のdockerおよびDockerfile構文を作成する


独自のdockerを作成

  • テストサーバdocker
  • がインストールされています.
  • 作成テストエンジニアリングの主なコードは以下のDockerApplication:サービスクラス
  • @SpringBootApplication
    @RestController
    public class DockerApplication {
    
        @RequestMapping("/")
        public String home() {
            return "Hello Docker World";
        }
    
        public static void main(String[] args) {
            SpringApplication.run(DockerApplication.class, args);
        }
    }

    コードの詳細はgithub 3を参照してください.実行pom.xmlはdocker-0.0.1-SNAPSHOTを生成する.JArは、上で生成するdocker-0.0.1-SNAPSHOTを.JArは作業ディレクトリにコピーします:/docker/simplebuild 4.作業ディレクトリの下にDockerfileを追加します.内容は次のとおりです.
    FROM openjdk
    MAINTAINER hryou0922
    ENV JAVA_HOME /usr/local/java
    RUN echo $JAVA_HOME
    ADD docker-0.0.1-SNAPSHOT.jar /home/hry/docker/simplebuild/contain/app.jar
    #  
    RUN useradd hryou0922
    RUN echo "hryou0922:hryou0922" | chpasswd 
    #    
    USER hryou0922
    #  
    VOLUME /home/hry/docker/simplebuild
    #  
    WORKDIR /home/hry/docker/simplebuild/contain/
    
    EXPOSE 8080
    ENTRYPOINT ["java","-jar" ,"/home/hry/docker/simplebuild/contain/app.jar"]
    
    

    Dockerfile構文の説明本章の後に5.imangeを確立し、現在のディレクトリで実行するコマンド実行imageコマンドの作成
    ```
     docker build -t cnbao/myjdk .
    ```
    

    命令の末尾Dockerfileが現在のパスの下にあることを示します
    現在のimagesリストを表示すると、imageが生成されていることがわかります.
    docker images
        REPOSITORY                TAG                 IMAGE ID            CREATED             SIZE
        cnbao/myjdk               latest              9c69de534f81        3 days ago          655.8 MB

    コンテナを作成して実行
    hry@hry-VirtualBox:/home/share$ docker run -d --name test4 -p 8080:8080  cnbao/myjdk
    57702e0c5c60252ffac2b8832c2cb455aeab62957e63013daeb74a0e47bb2a63

    サービスインタフェースにアクセスし、サービスが正常に起動したことを示します.
    hry@hry-VirtualBox:/home/share$ curl http://127.0.0.1:8080/
    Hello Docker Worldhry

    Dockerfile構文


    Dockerfileの命令は大文字と小文字を無視し、大文字を使用することをお勧めします.コメントとして#を使用します.各行には1つの命令しかサポートされていません.
  • FROM:宛先:ベースのimageを指定し、新しいプログラムがどのimageに基づいて新しいimage構文を構築するかを示す:FROM : tag:バージョン番号、ない場合は最新バージョン
  • を使用する.
  • MAINTAINER指定ミラー作成者情報
       :MAINTAINER <name>  
  • RUN RUNは、基礎imageによってサポートされる任意のコマンド構文を実行することができる:
    RUN  (the command is run in a shell - `/bin/sh -c`)  
     
    RUN ["executable", "param1", "param2" ... ]  (exec form)  
  • CMDコンテナ起動時の動作.この命令はファイルに1回のみ存在する、複数ある場合は最後の
    CMD ["executable","param1","param2"] (like an exec, this is the preferred form)

    CMD command param1 param2 (as a shell)
  • のみ実行される.
  • ENTRYPOINT設定コンテナ起動時に実行する操作.この命令はファイルに1回しか存在しないが、複数ある場合は最後の
     :ENTRYPOINT ["executable", "param1", "param2"] (like an exec, the preferred form)  
       
    ENTRYPOINT command param1 param2 (as a shell) 
    のみを実行する命令の使用は、1つは単独で使用する場合に分けられる.単独で使用する場合、CMDコマンドを使用し、CMDが完全に実行可能なコマンドである場合、CMDコマンドとENTRYPOINTは、最後のCMDまたはENTRYPOINT有効
    
    # CMD , ENTRYPOINT  
    
    CMD echo “Hello, World!”  
    ENTRYPOINT ls -l  
    
    の別の使用法とCMDコマンドとを組み合わせてENTRYPOINTを指定するための暗黙パラメータを互いに上書きします.この場合、CMDコマンドは完全な実行可能コマンドではなく、パラメータ部分のみです.ENTRYPOINT命令はJSON方式でのみ実行命令を指定でき、パラメータは指定できません.
    FROM ubuntu  
    CMD ["-l"]  
    ENTRYPOINT ["/usr/bin/ls"]  
  • USERはコンテナを起動するユーザーを設定し、デフォルトはrootユーザーです.指定memcachedの実行ユーザdaemon
    
    #  memcached  
    
    ENTRYPOINT ["memcached"]  
    USER daemon  
       
    ENTRYPOINT ["memcached", "-u", "daemon"]  
  • EXPOSE指定コンテナはホストマシンのポート
     :EXPOSE  [...] 
    
    #   
    
    EXPOSE port1  
    
    #   
    
    
    docker run -p port1 image  
    =====================================
    
    
    #   
    
    EXPOSE port1 port2 port3  
    
    #   
    
    docker run -p port1 -p port2 -p port3 image  
    
    #   
    
    docker run -p host_port1:port1 -p host_port2:port2 -p host_port3:port3 image  
  • にマッピングする必要がある.
  • ENVは、イメージに環境変数を設定します.
      :ENV <key> <value> 
    
     ENV JAVA_HOME /usr/local/java8 
  • ADDがsrcからコンテナへコピーするdestパス
     :
            ADD <src> <dest>  
    
    <src>  / 
    <dest>  
  • VOLUMEはマウントポイントを指定する.
     :
        VOLUME ["DIR"]  
    
    VOLUME ["/tmp/data"]  
    このDockerfileでimageを生成するコンテナを実行し、/tmp/dataディレクトリのデータはコンテナが閉じた後、中のデータは
  • も存在する.
  • WORKDIR切り替えディレクトリ.作業ディレクトリ(cdコマンドに相当)
     :
        WORKDIR /path/to/workdir  
  • を複数回切り替えることができる.