Dockerことはじめ, Dockerfileの書き方
https://gyazo.com/d62841056f1e1d8180aa54a445fb4611
Docker imageを docker run して Docker コンテナを立ち上げる。
1. Docker hubから image を docker pullする。
2. 自分でDockerfileを書いてbuildすることでDocker imageを作る。
基本コマンド
code:bash
# Dockerfileの書き方
FROM
code:dockerfileの書き方
FROM <イメージ>
FROM <イメージ>:<タグ>
FROM <イメージ>@<digest>
FROM 命令は、以降の命令で使う ベース・イメージ を指定します。あるいは、有効な Dockerfile は、1行めを FROM 命令で指定する必要があります。イメージとは、あらゆる有効なものが利用できます。 パブリック・リポジトリ から イメージを取得する 方法が一番簡単です。
タグ や digest 値はオプションです。省略した場合、ビルダーはデフォルトの latest とみなします。ビルダーは一致する tag 値が無ければエラーを返します。
MAINTAINER
code:dockerfileの書き方
MAINTAINER <名前>
MAINTAINER 命令は、生成するイメージの Author (作者)フィールドを指定します。
RUN
code:dockerfileの書き方
RUN echo "now building..."
# RUN: docker buildするときに実行される
RUN 命令は既存イメージ上の新しいレイヤで、あらゆるコマンドを実行し、その結果をコミットする命令です。コミットの結果得られたイメージは、 Dockerfile の次のステップで使われます。RUNはイメージビルド時に実行される。
RUN には2つの形式があります。
RUN <コマンド> (シェル形式、コマンドを実行する。Linux 上のデフォルトは /bin/sh -c であり、Windows 上 cmd /S /C )
CMD
jiroshin.icon dockerfileで書かれている命令は一回しか実行されない。CMDはイメージのビルド時ではなくコンテナ実行時にデフォルトで実行される命令をあらかじめ設定しておくもの。
code:dockerfileの書き方
CMD echo "now running..."
# CMD: runするときに実行される
CMD の主な目的は、 コンテナ実行時のデフォルトを提供します 。 デフォルトには、実行可能なコマンドが含まれているか、あるいは省略されるかもしれません。省略時は ENTRYPOINT 命令で同様に指定する必要があります。
Dockerfile で CMD 命令を一度だけ指定できます。複数の CMD がある場合、最も後ろの CMD のみ有効です。
CMD には3つの形式があります。
CMD <コマンド> (シェル形式)
EXPOSE
code:dockerfileの書き方
EXPOSE 命令は、特定のネットワーク・ポートをコンテナが実行時にリッスンすることを Docker に伝えます。 EXPOSE があっても、これだけではホストからコンテナにアクセスできるようにしません。アクセスするには、 -p フラグを使ってポートの公開範囲を指定するか、 -P フラグで全ての露出ポートを公開する必要があります。外部への公開時は他のポート番号も利用可能です。
jiroshin.icon つまりdocker run -p 8080:80みたいなオプションを使ってホスト側のポートを指定してねってこと
ENV
code:dockerfileの書き方
ENV <key> <value>
ENV <key>=<value> ...
ENV 命令は、環境変数 <key> と 値 <value> のセットです。値は Dockerfile から派生する全てのコマンド環境で利用でき、 インラインで置き換え も可能です。
ENV 命令は2つの形式があります。1つめは、 ENV <key> <value> であり、変数に対して1つの値を設定します。はじめの空白以降の文字列が <value> に含まれます。ここには空白もクォートも含まれます。
2つめの形式は ENV <key>=<value> ... です。これは一度に複数の変数を指定できます。先ほどと違い、構文の2つめにイコールサイン(=)があるので気を付けてください。コマンドラインの分割、クォート、バックスラッシュは、空白スペースも含めて値になります。
ADD
code:dockerfileの書き方
ADD <ソース>... <送信先>
ADD 命令は <ソース> にある新しいファイルやディレクトリをコピー、あるいはリモートの URL からコピーします。それから、コンテナ内のファイルシステム上にある 送信先 に指定されたパスに追加します。
複数の <ソース> リソースを指定できます。この時、ファイルやディレクトリはソースディレクトリ(構築時のコンテクストjiroshin.icon つまりホスト環境のWD)からの相対パス上に存在しないと構築できません。
code:リソースの書き方, ワイルドカード
ADD hom* /mydir/ # "hom" で始まる全てのファイルを追加
ADD hom?.txt /mydir/ # ? は1文字だけ一致します。例: "home.txt"
<送信先> は絶対パスです。あるいは、パスは WORKDIR からの相対パスです。ソースにあるものが、対象となる送信先コンテナの中にコピーされます。
code:送信先の書き方
ADD test relativeDir/ # "test" を WORKDIR/relativeDir/ (相対ディレクトリ)に追加
ADD test /absoluteDir/ # "test" を /absoluteDir/ (絶対ディレクトリ)に追加
<ソース> がリモート URL の場合は、送信先のパーミッションは 600 にします。
<ソース> がディレクトリの場合、ディレクトリの内容の全てをコピーします。これにはファイルシステムのメタデータを含みます。
COPY
code:dockerfileの書き方
COPY <ソース>... <送信先>
COPY 命令は <ソース> にある新しいファイルやディレクトリをコピーするもので、コンテナ内のファイルシステム上にある <送信先> に指定されたパスに追加します。
複数の <ソース> リソースを指定できます。この時、ソースディレクトリ(構築時のコンテクスト)からの相対パス上に存在しないと構築できません。
jiroshin.icon リソースの書き方とか送信先はADDの時と同じ。
ADD と COPY の違い
ADD
リモートからもファイル追加できる
圧縮ファイルが自動解凍される
COPY
リモートからのファイル追加は出来ない
圧縮ファイルは自動解凍されない
code:Dockerfileの例
FROM alpine
# Auto unarchive
ADD add.txt.gz /tmp
# Can ADD from remote
# Not auto unarchive
COPY copy.txt.gz /tmp
# docker build コマンド
Dockerfileをビルドしてイメージを作成するコマンド
code:bash
$ docker build .
$ docker build -t admin/httpd . # -tオプションでビルド成功後、作成されたメッセージにリポジトリ名(とオプションタグ)を付与する
# docker run コマンド
code:bash
$ docker run <コンテナ識別子>
docker run -t : コンテナの標準出力をホストの標準出力につなげる
docker run -i : -tとは反対に、ホストの入力をコンテナの標準出力につなげる
docker run -it: ホスト(手元のターミナル)とコンテナの標準入出力をつなげる。コンテナ内部で作業したいときに使う。
docker run -d [イメージ名] : コンテナ内に入らず、バックグラウンドでコンテナを動作させる
docker run -p [ホスト側のポート番号]:[コンテナのポート番号]: ポートフォワードする(コンテナのポートをホスト側でも使えるようになる)
docker run -v [ホスト側のディレクトリパス]:[コンテナ内のディレクトリパス]: dockerコンテナとホスト間でファイルを共有する
docker run –rm : コンテナ内でのコマンドの実行が終わったらコンテナを自動で削除する
jiroshin.icon docker runは docker pull , docker create, docker start の3つを一気に行うコマンド。
https://gyazo.com/365f08548caa635902ef8d6e72ca9452