Dockerワークフロー
8195 ワード
インストール
まず、Dockerの公式サイトで対応するバージョンをダウンロードします.デフォルトのホストはすべてMacなので、直接Macバージョンをダウンロードします.Docker-Compose(Dockerの公式Orchestrationプロジェクトの一つで、主にクラスタにアプリケーションを迅速に導入することを担当しています)はMacバージョンのDockerにデフォルトでインストールされているので、追加のダウンロードは必要ありません.
基本使用(Dockerfile)
docker build
基本的にDockerの基本知識を知っていると仮定し,直接主体に入る.まず、単一のミラーはDockerfileに基づいて生成され、Dockerfileはこのミラーを記述するスクリプトと考えられ、そのコンテキスト環境ではdocker buildを使用してDockerfile生成ミラーを実行することができる.たとえばファイルtestではDockerfileもこのファイルでbuildを実行します
ここで(.)はdockerfileが存在するコンテキスト環境を表す.(.)欠かせない.コンテキストはdocker buildに入力されるパラメータとして理解でき、必ずしも(.)ではない.パスでもURLでもいいです.基本文法は次の通りです.
その他のビルドの使い方は以下の通りで、Git repositoryで直接構築することもできます
このコマンドは、構築に必要な
具体的なDockerfileのコマンドは次のとおりです.
FROM
FROM-FROMコマンドは必須ですが、あるミラーに基づいて構築する必要はありません.0から構築できます.この場合、scratchを使用する必要があります.scratchは空白のミラーを表します.このときの基本命令は
MAINTAINER
MAINTAINER-メンテナンス担当者情報をスクリプトファイルに追加します.必ずしも必要ではありません.
RUN
RUN-RUNコマンドは基本コマンドを実行するためのもので、基本フォーマットは2種類あり、1つ目はShellフォーマット、RUNである.
2つ目はexecフォーマットで、次のようになります.
2つ目は、関数の呼び出しフォーマットに似ています.Dockerfileはコマンドごとに階層化されるため、RUNも例外ではありません.
上記の例のように,7層のミラーが構築されているが,これは全く意味がなく,コンパイル環境,更新されたパッケージなど,実行時に不要なものが多くミラーに組み込まれている.その結果、非常に肥大化した非常に多層のミラーが生成され、導入の構築時間が増えるだけでなく、エラーも発生しやすくなります.正確な作成は次の例になるはずです.
まず、以前のすべてのコマンドは、redis実行可能ファイルのコンパイル、インストールを目的としていました.そのため、多くの層を作る必要はありません.これはただのことです.従って、ここでは、複数の
COPY
COPY-copyコマンドのソースパスは相対パスです.たとえば、
これは、
CMD
CMD-CMDコンテナ起動コマンド.CMDコマンドとRUNコマンドは似ていて、shellコマンドフォーマットとexecコマンドフォーマットの2つのフォーマットでもあります.Dockerは仮想マシンではなく、コンテナはプロセスです.プロセスである以上、コンテナを起動するときは、実行するプログラムとパラメータを指定する必要があります.CMD命令は、デフォルトのコンテナマスタープロセスの起動命令を指定するために使用されます.execコマンドフォーマットでは、一般的にjson配列フォーマットに解析され、二重引用符が必要で、単一引用符は使用できません!!!
Docker-compose
Componentの位置付けは、複数のDockerコンテナを定義して実行するアプリケーション(Defining and running multi-container Dockerアプリケーション)です.Dockerfileは単一のミラーにすぎないため、通常の開発環境では、Webプロジェクトのほかに、負荷、データベースなどのバランスのとれた負荷が必要です.composeは、docker-compose.ymlテンプレートファイルを介して相互に関連するコンテナを定義し、プロジェクトとして構成することを可能にするという要件を満たすことができる.composeには次の2つの重要な概念があります.
---サービス(Service):同じミラーを実行する複数のコンテナインスタンス---プロジェクト(project):docker-compose.ymlファイルで定義された関連するアプリケーションコンテナのセットからなる完全なビジネスユニット.
composeのデフォルトの管理オブジェクトはプロジェクトであり、プロジェクト内のコンテナのセットのライフサイクルをサブコマンドで携帯管理します.次に、Dockerfileの具体例を示します.
ここでmysqlとredisは詳細な構成が行われていないため、完全に動作するわけではありません.ただ、imageは基本的にどの基本的なミラーを表しているかを示すために使用されます.
---ports:ポート情報を暴露し、ホストポートを使用する:コンテナポート
---volumes:このコマンドについては、上記の例ではありませんが、コンテナ間でデータを共有することはできません.データボリュームにマウントされているパスを設定します.ホストパス
Docker-composeの大まかなワークフローは以下の通りです.
-----up:Componentファイルで定義されているすべてのコンテナを起動し、ログ情報を集約します.通常、-dパラメータを使用してComponentをバックグラウンドで実行します.
---build:Dockerfileによって構築されたミラーを再構築します.ミラーが存在しない限りupコマンドは構築の動作を実行しませんので、ミラーを更新する必要がある場合に使用します
-----ps:Componentが管理するコンテナの状態情報を取得する
---run:コンテナを起動し、使い捨てのコマンドを実行します.接続されたコンテナは、--no-depsパラメータを使用しない限り、同時に起動します.
-----logs:Componentが管理するコンテナのログを集約し、カラーで出力する
-----stop:コンテナを停止しますが、削除しません.
締めくくり
まず、自分のミラーをカスタマイズするには、まずプロセスを明確にします.-->Dockerfileスクリプトの作成-->itermで
docker-compose方式に関連するローカルミラーの構築であれば、単一のdockerfileを使用してbuild方式---->redis、mysqlなどの関連需要整理---->docker-composeスクリプトを作成し、各コンテナ依存関係を決定する---->docker-compose up実行---->閲覧器が対応するポートを開く
まず、Dockerの公式サイトで対応するバージョンをダウンロードします.デフォルトのホストはすべてMacなので、直接Macバージョンをダウンロードします.Docker-Compose(Dockerの公式Orchestrationプロジェクトの一つで、主にクラスタにアプリケーションを迅速に導入することを担当しています)はMacバージョンのDockerにデフォルトでインストールされているので、追加のダウンロードは必要ありません.
基本使用(Dockerfile)
docker build
基本的にDockerの基本知識を知っていると仮定し,直接主体に入る.まず、単一のミラーはDockerfileに基づいて生成され、Dockerfileはこのミラーを記述するスクリプトと考えられ、そのコンテキスト環境ではdocker buildを使用してDockerfile生成ミラーを実行することができる.たとえばファイルtestではDockerfileもこのファイルでbuildを実行します
docker build .
ここで(.)はdockerfileが存在するコンテキスト環境を表す.(.)欠かせない.コンテキストはdocker buildに入力されるパラメータとして理解でき、必ずしも(.)ではない.パスでもURLでもいいです.基本文法は次の通りです.
#
docker build [ ]
その他のビルドの使い方は以下の通りで、Git repositoryで直接構築することもできます
$ docker build https://github.com/twang2218/gitlab-ce-zh.git#:8.14 docker build https://github.com/twang2218/gitlab-ce-zh.git\#:8.14 Sending build context to Docker daemon 2.048 kB
Step 1 : FROM gitlab/gitlab-ce:8.14.0-ce.0
8.14.0-ce.0: Pulling from gitlab/gitlab-ce
aed15891ba52: Already exists
773ae8583d14: Already exists
...
このコマンドは、構築に必要な
Git repo
を指定し、デフォルトのmaster
ブランチを指定します.構築ディレクトリは/8.14/
で、Docker
は自分でgit clone
というプロジェクトに行き、指定ブランチに切り替え、指定ディレクトリに入ってから構築を開始します.具体的なDockerfileのコマンドは次のとおりです.
# nodejs , FROM , , , (latest)
FROM node:latest
# , MAINTAINER
MAINTAINER lossp “[email protected]”
# /home/Service
# /home/Servive
RUN mkdir -p /home/Service
WORKDIR /home/Service
# /home/Service ,copy
# npm install
COPY . /home/Service
RUN npm install
# 3000 , ,
EXPOSE 3000
CMD [ "npm", "start" ]
FROM
FROM-FROMコマンドは必須ですが、あるミラーに基づいて構築する必要はありません.0から構築できます.この場合、scratchを使用する必要があります.scratchは空白のミラーを表します.このときの基本命令は
FROM scratch
MAINTAINER
MAINTAINER-メンテナンス担当者情報をスクリプトファイルに追加します.必ずしも必要ではありません.
RUN
RUN-RUNコマンドは基本コマンドを実行するためのもので、基本フォーマットは2種類あり、1つ目はShellフォーマット、RUNである.
RUN npm install
2つ目はexecフォーマットで、次のようになります.
RUN [" ", " 1", " 2"]
2つ目は、関数の呼び出しフォーマットに似ています.Dockerfileはコマンドごとに階層化されるため、RUNも例外ではありません.
FROM debian:jessie
RUN apt-get update
RUN apt-get install -y gcc libc6-dev make
RUN wget -O redis.tar.gz "http://download.redis.io/releases/redis-3.2.5.tar.gz" RUN mkdir -p /usr/src/redis
RUN tar -xzf redis.tar.gz -C /usr/src/redis --strip-components=1
RUN make -C /usr/src/redis
RUN make -C /usr/src/redis install
上記の例のように,7層のミラーが構築されているが,これは全く意味がなく,コンパイル環境,更新されたパッケージなど,実行時に不要なものが多くミラーに組み込まれている.その結果、非常に肥大化した非常に多層のミラーが生成され、導入の構築時間が増えるだけでなく、エラーも発生しやすくなります.正確な作成は次の例になるはずです.
FROM debian:jessie
RUN buildDeps='gcc libc6-dev make' \
&& apt-get update \
&& apt-get install -y $buildDeps \
&& wget -O redis.tar.gz "http://download.redis.io/releases/redis-3.2.5.tar.gz" \ && mkdir -p /usr/src/redis \
&& tar -xzf redis.tar.gz -C /usr/src/redis --strip-components=1 \
&& make -C /usr/src/redis \
&& make -C /usr/src/redis install \
&& rm -rf /var/lib/apt/lists/* \
&& rm redis.tar.gz \
&& rm -r /usr/src/redis \
&& apt-get purge -y --auto-remove $buildDeps
まず、以前のすべてのコマンドは、redis実行可能ファイルのコンパイル、インストールを目的としていました.そのため、多くの層を作る必要はありません.これはただのことです.従って、ここでは、複数の
RUN
対1で異なるコマンドに対応するのではなく、1つのRUN
コマンドのみを使用し、&&
を使用して各必要なコマンドを直列に接続する.従来の7層を1層に簡略化した.各行のコマンドの後のは改行を表し、dockerfileのRUNコマンドをより読みやすくします.さらに、コマンドの最後の行には--auto-remove
コマンドがあり、これは作業をクリーンアップするためのコマンドであり、コンパイルに必要なソフトウェアを削除し、ダウンロードおよび展開されたファイルをクリーンアップし、apt
キャッシュファイルもクリーンアップした.ミラーは1層1層で構築されているため、各層の余分なものは次の層から削除されず、後になるとミラーはますます大きくなります.そのため、これらの役に立たないものを片付ける必要があります.COPY
COPY-copyコマンドのソースパスは相対パスです.たとえば、
COPY ./package.json /app/
これは、
docker build
コマンドが実行されるディレクトリの下のpackage.json
をコピーするものではなく、Dockerfile
が実行されるディレクトリの下のpackage.json
をコピーするものではなく、コンテキストディレクトリの下のpackage.json
をコピーするものである.一般的に、Dockerfile
は空のディレクトリの下、またはプロジェクトルートの下に配置されるはずです.ディレクトリの下に必要なファイルがない場合は、必要なファイルをコピーする必要があります.ディレクトリの下に構築時にDocker
エンジンに渡さないものがある場合は、.gitignore
のような文法で.dockerignore
を書くことができます.このファイルは、コンテキストとしてDocker
エンジンに渡す必要がないことを削除するために使用されます.これはデフォルトの動作にすぎません.実際にはDockerfile
のファイル名はDockerfile
である必要はありません.また、-f ../Dockerfile.php
パラメータでDockerfile
としてファイルを指定するなど、コンテキストディレクトリに配置する必要はありません.CMD
CMD-CMDコンテナ起動コマンド.CMDコマンドとRUNコマンドは似ていて、shellコマンドフォーマットとexecコマンドフォーマットの2つのフォーマットでもあります.Dockerは仮想マシンではなく、コンテナはプロセスです.プロセスである以上、コンテナを起動するときは、実行するプログラムとパラメータを指定する必要があります.CMD命令は、デフォルトのコンテナマスタープロセスの起動命令を指定するために使用されます.execコマンドフォーマットでは、一般的にjson配列フォーマットに解析され、二重引用符が必要で、単一引用符は使用できません!!!
Docker-compose
Componentの位置付けは、複数のDockerコンテナを定義して実行するアプリケーション(Defining and running multi-container Dockerアプリケーション)です.Dockerfileは単一のミラーにすぎないため、通常の開発環境では、Webプロジェクトのほかに、負荷、データベースなどのバランスのとれた負荷が必要です.composeは、docker-compose.ymlテンプレートファイルを介して相互に関連するコンテナを定義し、プロジェクトとして構成することを可能にするという要件を満たすことができる.composeには次の2つの重要な概念があります.
---サービス(Service):同じミラーを実行する複数のコンテナインスタンス---プロジェクト(project):docker-compose.ymlファイルで定義された関連するアプリケーションコンテナのセットからなる完全なビジネスユニット.
composeのデフォルトの管理オブジェクトはプロジェクトであり、プロジェクト内のコンテナのセットのライフサイクルをサブコマンドで携帯管理します.次に、Dockerfileの具体例を示します.
version: "2.0"
services:
ubuntu:
image: ubuntu:16.04
restart: always
ports:
- "1234:1234"
nodejs:
image: mynodeapp
restart: always
ports:
- "3000:3000"
nginx:
image: nginx
restart: always
ports:
- "8080:80"
redis:
image: redis:latest
restart: always
ports:
- "6379:6379"
mysql:
image: mysql:5.7
restart: always
ports:
- "27017:27017"
ここでmysqlとredisは詳細な構成が行われていないため、完全に動作するわけではありません.ただ、imageは基本的にどの基本的なミラーを表しているかを示すために使用されます.
image
は、build
build
関連ミラーに置き換えられ、その後、このミラーに基づいてもよい.各容器にはimageまたはbuildを指定する必要があります.以下は命令控訴例命令解釈であり、より多くの命令は公式文書を参照する.---ports:ポート情報を暴露し、ホストポートを使用する:コンテナポート
(HOST:CONTAINER)
形式、またはコンテナのポートのみを指定する(ホストはランダムにポートを選択する)ことができる(ポートをマッピングするためにHOST:CONTAINER
フォーマットを使用する場合、コンテナポートが60未満で引用符に入れられていない場合は、YAMLがx:yyという数値フォーマットを60進数として自動的に解析するため、誤った結果が得られる可能性があります.このような問題を回避するために、数値列には引用符で囲まれた文字列フォーマットを使用することをお勧めします)---volumes:このコマンドについては、上記の例ではありませんが、コンテナ間でデータを共有することはできません.データボリュームにマウントされているパスを設定します.ホストパス
( HOST:CONTAINER )
を設定するか、アクセスモード( HOST:CONTAINER:ro )
を加えることができます.volumesキーワードは、docker run
の-v
パラメータに相当し、データボリュームを構成するために使用されます.ここでは、従来の方法と同様にappディレクトリはマウントをバインドすることでコンテナにマウントされ、ホストから修理できるようになります.docker-compose
プロジェクトを実行する場合は、次のコマンドを使用します.docker-compose up
Docker-composeの大まかなワークフローは以下の通りです.
-----up:Componentファイルで定義されているすべてのコンテナを起動し、ログ情報を集約します.通常、-dパラメータを使用してComponentをバックグラウンドで実行します.
---build:Dockerfileによって構築されたミラーを再構築します.ミラーが存在しない限りupコマンドは構築の動作を実行しませんので、ミラーを更新する必要がある場合に使用します
-----ps:Componentが管理するコンテナの状態情報を取得する
---run:コンテナを起動し、使い捨てのコマンドを実行します.接続されたコンテナは、--no-depsパラメータを使用しない限り、同時に起動します.
-----logs:Componentが管理するコンテナのログを集約し、カラーで出力する
-----stop:コンテナを停止しますが、削除しません.
締めくくり
まず、自分のミラーをカスタマイズするには、まずプロセスを明確にします.-->Dockerfileスクリプトの作成-->itermで
docker build -t .
を実行-->docker run -d -p 3000:3000
を実行-->ブラウザを開いてlocalhost:3000を入力すればいいです.上記は、単一のイメージについての例示的なプロセスです.docker-compose方式に関連するローカルミラーの構築であれば、単一のdockerfileを使用してbuild方式---->redis、mysqlなどの関連需要整理---->docker-composeスクリプトを作成し、各コンテナ依存関係を決定する---->docker-compose up実行---->閲覧器が対応するポートを開く