|
|
| 484行目: |
484行目: |
| yumの処理は、ユーザに対して"yes or no"を訊ねる場合があるので、自動的にyesと答えないと途中でイメージ作成が止まるので、以下のように記述する。<br> | | yumの処理は、ユーザに対して"yes or no"を訊ねる場合があるので、自動的にyesと答えないと途中でイメージ作成が止まるので、以下のように記述する。<br> |
| CMD yum update –y | | CMD yum update –y |
| <br><br>
| |
|
| |
| == Dockerfileの基礎 ==
| |
| ==== Dockerfileの概要 ====
| |
| Dockerfileは、Dockerイメージの設計図のようなものである。
| |
| Dockerfileを作成することにより、任意のDockerイメージを作成できる。
| |
| <br>
| |
| DockerfileからDockerイメージを作成するには、Dockerfileが存在するディレクトリで以下のコマンドを実行する。<br>
| |
| # イメージ名およびタグ名、Dockerファイル名を指定する場合
| |
| sudo docker build -t <イメージ名>:<タグ名> -f <Dockerファイル名> .
| |
|
| |
| # イメージ名およびタグ名、Dockerファイル名(Dockerファイル名が<u>'''dockerfile'''</u>の場合のみ)は省略できる
| |
| sudo docker build .
| |
| <br>
| |
| Dockerfileで使用するコマンドを、以下に示す。<br>
| |
| * FROM
| |
| * RUN
| |
| * CMD
| |
| * ENTRYPOINT
| |
| * COPY
| |
| * ADD
| |
| * ENV
| |
| * WORKDIR
| |
| <br>
| |
|
| |
| ==== Dockerfileの作成手順 ====
| |
| * FROM
| |
| *: ベースとなるイメージを決定するコマンドである。
| |
| *: Dockerfileの先頭に記述する。
| |
| *: FROMの後には、基本的にOSを記述する。
| |
| <br>
| |
| 例1. FROM centos7:latest
| |
| 例2. FROM ruby:2.5
| |
| <br>
| |
| * RUN
| |
| *: FROMで記述したOSに対応するコマンドを実行するコマンドである。
| |
| *: RUNごとにLayerが作成される。(Dockerイメージは、レイヤーを積み重ねていくように作成される)
| |
| *: <br>
| |
| *: 以下の例では、Dockerイメージには、centos7のレイヤーにtouch /usr/bin/testのレイヤーが追加作成される。<br>
| |
| *: (/usr/bin/testファイルを作成するDockerイメージを作成している)<br>
| |
| 例. FROM centos7:latest
| |
| RUN ["touch", "/usr/bin/test"]
| |
| :: <br>
| |
| :: 以下の例では、Dockerイメージには、centos7のレイヤーにcurlとnginxという2つのパッケージをインストールするレイヤーが追加作成される。<br>
| |
| :: (yum updateはインストールするパッケージを新しいものにするために記述して、yum install -yはパッケージをインストールするために記述している)<br>
| |
| 例. FROM centos7:latest
| |
| RUN yum update && yum install -y curl nginx
| |
| :: <br>
| |
| :: DockerfileからDockerイメージを1度作成したものはキャッシュされるため、RUNを複数記述することにより、ビルドの時間を短くすることができる。<br>
| |
| :: ただし、レイヤー数は少ない方が望ましいため、&&や\を使用して、RUNの記述を少なくする。<br>
| |
| <br>
| |
| * CMD
| |
| *: コンテナの実行コマンドを指定するコマンドである。
| |
| *: Dockerfileの最後に記述する。
| |
| *: <br>
| |
| *: 以下の例では、DockerfileからDockerイメージを作成、docker runコマンドによりコンテナを作成した後、/bin/bashを実行している。<br>
| |
| 例. FROM centos7:latest
| |
| RUN yum update && yum install -y curl nginx
| |
| CMD ["/bin/bash"]
| |
| <br>
| |
| * ENTRYPOINT
| |
| *: CMDに近い役割を持つコマンドである。
| |
| *: CMDは、Dockerコンテナを作成・実行する時(docker runコマンド)、コマンドを上書きできるが、
| |
| *: (例. docker run lsコマンドを実行する場合、上記のCMDの例ではbashではなく、lsが実行される)
| |
| *: ENTRYPOINTを使用する場合、コマンドは上書きできなくなり、CMDはENTRYPOINTのオプションを記述する形となる。
| |
| *: <br>
| |
| *: 以下の例では、<code>ENTRYPOINT</code>に<code>ls</code>コマンドを記述することにより、コンテナ実行時(<code>docker run</code>コマンド)に、<code>ls</code>以外のコマンドが実行できなくなる。<br>
| |
| *: なお、<code>CMD</code>では、<code>--help</code>オプションを指定している。<br>
| |
| 例. FROM centos7:latest
| |
| RUN yum update && yum install -y curl nginx
| |
| ENTRYPOINT ["ls"]
| |
| CMD ["--help"]
| |
| <br>
| |
| * COPY
| |
| *: Dockerfileが存在するディレクトリ(BuildContextという)にあるファイルを、Dockerイメージにコピーするコマンドである。
| |
| *: DockerfileをビルドしてDockerイメージからコンテナを作成した後、コンテナにNewDirディレクトリを作成して、Test.txtファイルをコピーしている。
| |
| *: この時、Dockerイメージのレイヤーが追加・作成される。
| |
| 例. FROM ubuntu:latest
| |
| RUN mkdir /NewDir
| |
| COPY Test.txt /NewDir
| |
| CMD ["/bin/bash"]
| |
| <br>
| |
| * ADD
| |
| *: COPYのコマンドと似ていて、同じくコピーができるインストラクションです。
| |
| *: <br>
| |
| *: ADDとCOPYとの違い
| |
| *: ADDは圧縮ファイルをコピーした際、コピーと解凍の両方を行います。
| |
| *: COPYは単純なコピーのみです。
| |
| *: 圧縮ファイルをコピー・解凍する時にはADD、圧縮ファイルが関係ない単純なコピーにはCOPYを使います。
| |
| *: <br>
| |
| *: 以下の例では、Dockerfileをbuildした際、DockerImageにsample.tarを/(ルート直下)にコピー・解凍するLayerを作成されます。
| |
| *: コンテナを作成した際に、コンテナのルート直下にsample.tarが解凍されたものが作成されています。
| |
| 例. FROM ubuntu:latest
| |
| ADD sample.tar /
| |
| CMD ["/bin/bash"]
| |
| <br>
| |
| * ENV
| |
| *: 環境変数を設定するインストラクションです。
| |
| *: <br>
| |
| *: 以下の例では、コンテナ作成時にkey1=valueという環境変数が設定されるDockerImageが作成されます。
| |
| 例. FROM ubuntu:latest
| |
| ENV key1 value
| |
| CMD ["/bin/bash"]
| |
| <br>
| |
| * WORKDIR
| |
| *: インストラクションの実行ディレクトリを変更するインストラクションです。
| |
| *: <br>
| |
| *: 以下の例では、sample_folderというディレクトリを作り、sample_folder内でsample_fileを作成するLayerとなります。
| |
| *: (WORKDIRを使ったことで、コンテナ内に作成した/sample_folderの中でRUNの実行ができます。)
| |
| 例. FROM ubuntu:latest
| |
| RUN mkdir sample_folder
| |
| WORKDIR /sample_folder
| |
| RUN touch sample_file
| |
| <br><br> | | <br><br> |
|
| |
|