dockerfile
FROM
Dockerイメージを指定する。
FROMで取得するイメージはDockerHubに公開されているものになる。
FROM イメージ名:タグ
# タグは「3.6」等のバージョン名が一般的
RUN
Dockerイメージビルド時に、コンテナ内で実行するコマンドを定義する。
RUN mkdir /tmp
RUN mkdir /test
# /tmpと/testというディレクトリをビルド時にコンテナ内に作成する
# 以下でも結果同じになる
RUN mkdir /tmp \
&& mkdir /test
COPY
Dockerを動作させているホストマシンのファイルやディレクトリをコンテナにコピーする。
COPY test.py /test
# ホストにあるtest.pyをコンテナの/testにコピー
CMD
コンテナ起動時に実行されるプロセスを指定する。
CMD ["実行ファイル", "引数1", "引数2", ...]
# 空白が入る部分でコマンドを区切り、配列化した形にするのが推奨
docker container runの指定の方が優先される。
ENV
コンテナ内で使用する環境変数を指定する。
ENV test="envtest"
ARG
イメージをビルドする時のみ使用する一時的な環境変数。
ARG argtest
# dockerfile内では上記のように記載
# イメージビルドするときに以下のように実行
docker image build --build-arg argtest=test -t イメージ名 .
VOLUME
コンテナ内のデータを永続化する時に指定。
指定したコンテナディレクトリをホストのディレクトリにマウントする。
DB等のDataVolumeコンテナとして使用する時等に使う。
その際のイメージはbusyboxが一般的。(軽量のため)
ホストのどこにマウントされているかは、docker inspect {コンテナID}で確認できる。
「"Mounts": [{"Source":」の部分
例
"Source": "/var/lib/docker/volumes/a033974964bb2412ba7e8a7fe89d5ac2dce8b121a885121e3c95d37262eb111e/_data"
VOLUME /var/lib/mysql
dockerコマンド
似たようなコマンドが結構あったりするが、比較情報については以下記事参照。
https://qiita.com/zembutsu/items/6e1ad18f0d548ce6c266#%E6%A6%82%E8%A6%81
docker image
docker image build(docker build)
docker image build -t イメージ名[:タグ名] Dockerfile配置ディレクトリパス
# カレントディレクトリがDockerfileある場所ならばディレクトリパスは「.」でよい
# -f ファイル名 : Dockerfile名を指定。デフォルトはDockerfileという名前のファイルを探す
# --pull : --pull=trueとすることで、キャッシュを使わずイメージを強制的に再取得する
docker image ls(docker images)
作成したイメージの一覧を表示する。
docker image pull(docker pull)
DockerHubに存在するリポジトリとタグを指定する。
タグを省略した場合はデフォルトタグ(大体latest)が利用される。
docker image pull [options] リポジトリ名[:タグ名]
docker image tag
Dockerイメージのバージョン(イメージID)にタグ付けをする。
1つのタグに紐付けられるイメージは1つ。同一リポジトリ、同一タグのイメージは最新以外はNoneになる。
docker image tag 元イメージ名[:タグ] 新イメージ名[:タグ]
docker image push
Dockerレジストリにイメージをpushする。
先にdocker loginしておく前提。
docker image push [options] リポジトリ名[:タグ]
docker image prune
実行中コンテナのイメージでないイメージを一括で削除する
docker image prune [options]
docker container
docker container run(docker run)
docker container run イメージ名[:タグ名] [コマンド] [コマンド引数・・・]
# -d : バックグラウンド実行オプション
# -it : コンテナ側の標準入力をつなぎっぱなしにする
# --rm : コンテナ終了時にコンテナを削除する
# -p : ポートフォワーディング。指定したホスト側ポートを指定したコンテナポートにフォワーディングする {ホスト側ポート}:{コンテナポート}
ホスト側のポートは記載省略できる。ホストのどのポートが割り当てられたかはdocker container lsで確認できる。
# --name [コンテナ名] : コンテナ名称を指定
# --volumes-from [コンテナ名] : DataVolumeコンテナをマウントする。マウントはDataVolumeコンテナの設定通り。
docker container ls(docker ps)
実行コンテナ一覧を表示する。
docker container ls [options]
# -a : 停止しているコンテナも含めて表示する
# -q : コンテナIDだけを抽出する
# --filter "filter名=値" : 条件に当てはまるコンテナだけを抽出
docker container ls --fileter "name=test" #コンテナ名でフィルタ
docker container ls --fileter "ancestor=test" #イメージでフィルタ
# --limit 件数 : 表示件数を制限する
docker container stop
実行しているコンテナを停止する
docker container stop コンテナID(省略可)もしくはコンテナ名
docker container restart
コンテナを再起動する。
動き的にはstop→start。元々stopしているコンテナにも使える。
docker container restart コンテナID(省略可)もしくはコンテナ名
docker container rm(docker rm)
コンテナをディスクから削除する。
docker container rm コンテナID(省略可)もしくはコンテナ名
# -f : 実行中のコンテナを停止、削除
docker container logs(docker logs)
コンテナの標準出力を表示する。
一般的にDockerコンテナにおけるログは、コンテナに標準出力として出されるものを指す。
docker container logs [options] コンテナID(省略可)もしくはコンテナ名
# -f : 標準出力をリアルタイムで出し続ける(tail -f のイメージ)
docker container exec(docker exec)
実行中のコンテナの中で任意のコマンドを実行できる。
docker container exec [options] コンテナID(省略可)もしくはコンテナ名 コンテナ内で実行するコマンド
# docker container exec -it コンテナID /bin/bashでコンテナ内を操作することが多い
docker container cp(docker cp)
実行中のコンテナとホスト間でファイルをコピーできる。
docker container cp [options] コンテナIDもしくはコンテナ名:コンテナ内のコピー元 ホストのコピー先
docker container cp [options] ホストのコピー元 コンテナIDもしくはコンテナ名:コンテナ内のコピー先
docker container prune
実行していないコンテナを一括で削除する。
docker container prune [options]
docker container stats
コンテナタインにのシステムリソースの利用状況を表示する。
(topコマンドのdocker版)
docker container stats [options] [表示するコンテナID]
docker search
Docker Hubレジストリに登録されているリポジトリを検索する。
docker search [options] 検索キーワード
# --limit 件数 : 表示件数を制限する
docker system
docker system prune
利用していないコンテナ、イメージ、ボリューム等のリソースを一括で削除する
docker system prune [options]
docker-compose
複数のコンテナ構成を管理するツール。
docker-compose.yml
コンテナの構成を記載するファイル。
サービス(services)、ネットワーク(networks)、ボリューム(volumes)を定義する。
services
container_name
コンテナ名を指定する
image
dockerイメージを指定する
ports
公開するポートを指定する
ホスト:コンテナでの指定やコンテナのみの指定(ホスト側はランダムになる)もできる
ports:
- 3000
- 5000:5000
volumes
ホストのディレクトリをマウントする
volumes:
- /opt/data:/var/lib/mysql
privileged
コンテナに権限を与える時に付与する。
privileged: true
tty
コンテナを終了させずに起動させ続ける。
tty: true
depends_on
コンテナの依存関係を指定する。
指定したサービスが先に起動される。
depends_on:
- manager
expose
docker-compose内でだけ開放されるポートを指定する。
expose:
- 3375
docker-compose up
docker-compose.ymlを作成したディレクトリで実行し、yamlファイルに従ったコンテナ群を起動する。
docker-compose.ymlのあるディレクトリで実行する。
docker-compose up [options]
# -d : バックグラウンドで実行する
# --build : upの際に必ずDockerイメージのビルドをさせる
docker-compose down
docker-compose.ymlを作成したディレクトリで実行し、yamlファイルに従ったコンテナ群をすべて停止、削除する。
docker-compose.ymlのあるディレクトリで実行する。
docker-compose down
docker swarm
複数のDockerホストをクラスタ化するツール。