カリキュラムと関連する原則を開発dockerfile

書かれたチュートリアルDockerfile

します。https://yeasy.gitbooks.io/docker_practice/image/build.htmlこの記事の内容のほとんどはから来ています

  1. ディレクトリを作成し、Dockerfileを作成したディレクトリのファイルに

    vim /root/test/Dockerfile
  2. あなたは、イメージファイルをインストールする必要があります

    ここでは、依存のCentOSとpython3.7.4とインストールに必要な、オープンポート8000​​ポートの最新バージョンをインストール

    • 主な執筆
    FROM    centos:latest
    MAINTAINER  ryan.liu "[email protected]"
    
    RUN     yum install -y gcc zlib-devel openssl-devel libffi-devel make
    WORKDIR /tmp
    RUN     curl -O https://www.python.org/ftp/python/3.7.4/Python-3.7.4.tgz
    RUN     tar -zxvf Python-3.7.4.tgz
    
    WORKDIR Python-3.7.4
    RUN     mkdir -p /usr/local/python3
    RUN     ./configure --prefix=/usr/local/python3
    RUN     make && make install
    RUN     echo export PATH="/usr/local/python3/bin:$PATH" >> ~/.bashrc
    RUN     source ~/.bashrc
    RUN     /usr/local/python3/bin/pip3 install Django==2.2.3
    RUN     /usr/local/python3/bin/pip3 install pymysql
    WORKDIR /
    EXPOSE  8000

    各コマンドは、1層Dockerfileに設立され、RUN例外ではありません。すべてのRUN行為、私たちは手動で同じミラーを作成しているだけのプロセスは:実行後、これらのコマンドが実行されている新しい層を、確立するために、commitこの層の変化は、新しい画像を構成します。

    上記の文言は、ミラー層7が作成されます。これは完全に無意味です、と物事を実行しているの多くを必要としない、彼らは、そのようなので、上のコンパイラ環境、更新されたパッケージ、およびとして、ミラーイメージに入れてきました。結果は、展開するビルド時間を増加させ、そしてエラーに非常になりやすいだけでなく、非常に肥大化し、非常に多層膜ミラーです。これは、多くの初心者ドッカーの人々はしばしば作る間違いです。

    組合FSは、AUFSなどの層の数の上限であり、最大ではない以上42層と、今以上127層ではありません。

    • 正しい言葉遣い
    FROM    centos:latest
    MAINTAINER  ryan.liu "[email protected]"
    
    RUN yum install -y gcc zlib-devel openssl-devel libffi-devel make \
         && cd /tmp \
         && curl -O https://www.python.org/ftp/python/3.7.4/Python-3.7.4.tgz \
        && tar -zxvf Python-3.7.4.tgz \
        && rm -rf Python-3.7.4.tgz \
        && mkdir -p /usr/local/python3 \
        && cd Python-3.7.4 \
        && ./configure --prefix=/usr/local/python3 \
        && make && make install \
        && echo export PATH="/usr/local/python3/bin:$PATH" >> ~/.bashrc \
        && source ~/.bashrc \
        && /usr/local/python3/bin/pip3 install Django==2.2.3 \
        && /usr/local/python3/bin/pip3 install pymysql \
        && cd /
    EXPOSE  8000
  3. 実行

    Dockerfile実行ディレクトリ

    docker build -t centos7:latest .

    ミラービル文脈(コンテキスト)

    あなたが注意を払っている場合は、表示されるdocker build最後のコマンドaを..これは、現在のディレクトリを表しますが、Dockerfile現在のディレクトリに、非常に多くの初心者はこれがで指定されたパスだと思いDockerfileパスなので、理解は実際に不正確です。コマンドは、上記の形式に対応している場合は、これが指定されていることがありますコンテキストパスだから、文脈それは何ですか?

    まず、理解する必要がdocker build作品を。ドッカードッカーは、ランタイムエンジン(つまり、サーバデーモンである)とクライアントツールで分けます。ドッカーエンジンが呼び出され、RESTのAPIのセットを提供し、リモートAPIドッキングウィンドウ、および場合はdocker、クライアント・ツールとして、コマンド、ドッキングウィンドウは、エンジンと対話し、このAPIによって設定され、これにより様々な機能を実行しています。したがって、けれども表面上では、さまざまな実行するために、我々はマシンであると思われるdocker機能を、実際には、すべてがサービス側(ドッカーエンジン)を完了するために使用される長距離電話の形です。このため、Cの/ Sは、私たちは、リモートサーバードッカーエンジンに風を操作できるように設計されています。

    私たちは、ミラーを構築し、すべてによってカスタマイズされていない場合にはRUN完了する命令、多くの場合、あなたは、例えば、鏡の中にコピーされたいくつかのローカルファイル必要COPY命令、ADDように指示しています。docker buildミラーを構築するためのコマンドは、それがローカルに内蔵されていませんが、サービス側では、それは、ドッカーエンジンのビルドです。だから、このクライアント/サーバアーキテクチャでは、どのサーバがローカルファイルにそれを得るために取得するには?

    これは、コンテキストの概念を導入しています。構築された場合、ユーザーは、ミラーを構築するために、パスのコンテキストを指定し、docker buildそのパスこのコマンドは、パッケージのすべての内容はパスで、その後、ドッカーエンジンにアップロードされます。したがって、この文脈ドッカーエンジンパッケージを取得した後、必要なすべての書類の画像を取得する建物を展開します。

    もしDockerfileで書くので:

    COPY ./package.json /app/

    これは、実行コピーすることではありませんdocker buildコマンドは、ディレクトリpackage.json、またコピーされDockerfileたディレクトリの下にpackage.jsonはなく、複製コンテキスト(文脈)をディレクトリの下package.json

    このように、COPYソースファイルで、このような命令のパスがある相対パス多くの場合、これが初心者である理由を尋ねるCOPY ../package.json /appCOPY /opt/xxxx /appコンテキストの範囲を超えてこれらのパスは、ドッカーエンジンが利用できるこれらの場所を提出することができないので理由は、動作しないことができます。あなたが本当にこれらのファイルが必要な場合は、ディレクトリのコンテキストにそれらをコピーしてください。

    今、あなただけのオーダーを理解することができdocker build -t nginx:v3 .、この中で.、実際には、指定されたディレクトリのコンテキストで、docker buildコマンドは、ミラーを構築するためにドッカーエンジンにディレクトリの内容をパックします。

    あなたが見ればdocker build出力、実際には、我々は、これは、プロセスのコンテキストを送信します見てきました:

    $ docker build -t nginx:v3 .
    Sending build context to Docker daemon 2.048 kB
    ...

    理解ミラー構築のための建物のコンテキストが非常に重要であり、ミスのいくつかを避けるべきではありません。例えば、いくつかの初心者は見つけるCOPY /opt/xxxx /appそう簡単にされ、機能していない後にDockerfile構築するためのハードディスクのルートディレクトリに配置され、ことがわかったdocker buildの実装後、何かが非常に遅く、構築することは非常に簡単に障害が発生したの数十GBを送信します。この練習はさせて頂いておりためですdocker build明らかに間違っているハードディスク全体を、パッケージ化します。

    一般的に、それはされるだろうDockerfile空のディレクトリ、またはプロジェクトのルートディレクトリに置か。そのディレクトリに必要なファイルの場合は、必要な紙の上にコピーする必要があります。ディレクトリが何かドッカーエンジンビルドを渡したくない場合は、あなたができる.gitignore別の構文を書き.dockerignore、ファイルはドッカーエンジンにコンテキストを渡すなどつまらない取り除くために使用されます。

    なぜ誰もミスは考え.を指定することでDockerfile、それをディレクトリ?あなたが追加指定しない場合、デフォルトでは、これは、あるDockerfile言葉を、ディレクトリのコンテキストで呼び出されますDockerfileDockerfileなどのファイル。

    これは、実際には、単にデフォルトの動作されるDockerfileファイル名はする必要はなくDockerfile、例えば、使用することができ、ディレクトリのコンテキスト内でなければならない必要はありません-f ../Dockerfile.phpパラメータとしてファイルを指定しますDockerfile

    もちろん、一般的にそれが習慣的にデフォルトのファイル名を使用しDockerfileて、ミラーリングされた建物のディレクトリのコンテキストに配置されます。

  4. ビューミラー

    docker images
  5. ファイル名を指定して実行コンテナ

    docker run -it --name=centos7 centos7:latest /bin/bash

その他の関連するコマンド

  • コンテナの実行を停止

    docker stop centos7
  • 停止したコンテナを削除するには

    docker rm centos7
  • ダウンロードしたすべての画像を見ます

    docker images

おすすめ

転載: www.cnblogs.com/liuhuan086/p/11223290.html