以下、過去の自分用メモの移動。
dockerに入門するにあたり「プログラマのためのDocker教科書 第2版より」を読んだ。 Dockerfileを書いてコンテナを走らせるための自分向けのまとめをチートシート的に書き記す。
Dockerfileの命令
命令一覧
- FROM .. ベースイメージの指定
- RUN .. コマンド実行
- CMD .. コンテナの実行コマンド
- LABEL .. ラベルを設定
- EXPOSE .. ポートのエクスポート
- ENV .. 環境変数
- ADD .. ファイル/ディレクトリの追加
- COPY .. ファイルのコピー
- ENTRYPOINT .. コンテナの実行コマンド
- VOLUME .. ボリュームのマウント
- USER .. ユーザの指定
- WORKDIR .. 作業ディレクトリ
- ARG .. Dockerfile内の変数
- ONBUILD .. ビルド完了後に実行される命令
- STOPSIGNAL .. システムコールシグナルの設定
- HEALTHCHECK .. コンテナのヘルスチェック
- SHELL .. デフォルトシェルの設定
コメント
# コメント
命令 # コメント
FROM
FROM centos:7
# FROM [イメージ名]
# FROM [イメージ名]:[タグ名]
# FROM [イメージ名]@[ダイジェスト]
ダイジェスト
Docker Hubにアップロードする際に自動で付与されるユニークな識別子。
ダイジェストを使うことでイメージを一意に指定できる。
docker image ls --digests
で確認できる
build
$ docker build -t [作成するイメージ名]:[タグ名] [Dockerfileのあるディレクトリのパス]
docker engineの状態を確認
$ docker version
$ docker tutorial
$ docker system info
$ docker system df
# disk info
nginxをdockerで動かしてみる
$ docker pull nginx
$ docker image ls
$ docker container run --name nginxserver -d -p 80:80 nginx
# open http://localhost:80/ on web browser
$ docker ps
$ docker stop nginxserver
$ docker start nginxserver
centosをpullしてみる
# p96
$ docker image pull centos:7
$ docker image ls
DCT
docker imageが改ざんされているかどうか、公開鍵(Tagging Key)を用いて検証し、改ざんがある場合そのイメージを無効化する機能。
有効化するには環境変数を付加
署名なしイメージのpull時は無効化しなければならない。
# enable
$ export DOCKER_CONTENT_TRUST=1
# disable
$ export DOCKER_CONTENT_TRUST=0
docker imageの操作
# pullしたイメージの詳細情報を確認(イメージID,作成日,dockerのversion,CPUアーキテクチャ等)
$ docker image inspect ubuntu:latest
# jsonの一部のみを取得
$ docker image inspect --format="{{ .Os }}" ubuntu:latest
$ docker image inspect --format="{{ .ContainerConfig.Image }}" ubuntu:latest
# docker image にタグ付け
$ docker image tag nginx yammerjp/nginxserver:1.0
# docker hub上のimage(この場合はnginx)を検索
$ docker search nginx
# Option: --no-trunc .. 結果をすべて表示, --limit n .. n件の検索結果, --filter=stars=n .. star数下限による絞り込み
$ docker image rm [--force(-f) --no-prun] yammerjp/nginxserver
# --force .. -f , --no-prune .. 中間イメージを削除しない
# yammerjp/nginxserver ... REPOSITORYではなくIMAGE IDでも良い
$ docker image prune [--all(-a) --force(-f)]
# 未使用のdocker imageを削除
docker image のpush
$ docker login -u yammerjp -p xxx
$ docker image push yammerjp/nginxserver:1.0
$ docker logout
docker container run
$ docker container run [ option ] yammerjp/nginxserver
$ docker run [ option ] yammerjp/nginxserver # containerは省略可能
$ docker run -it --name "test1" ubuntu /bin/bash
$ docker run -d -p 8080:80 nginx
$ docker run -d --dns 8.8.8.8 nginx
$ docker run -d --mac-address="92:d0:c6:0a:29:33" ubuntu
# $ docker container inspect --format="{{ .Config.MacAddress }}" [Container ID]
$docker run -id --add-host test.com:192.168.0.1 ubuntu
実行開始時オプション
--attach(-a) STDIN/STDOUT/STDERR --cidfile --detach(-d) --interactive(-i) --tty(-t)
- -a .. 標準入力/標準出力/標準エラー出力にアタッチ
- -d .. バックグラウンドで実行
- -i .. コンテナの標準入力を開く
- -t .. 端末デバイスを使う
終了時オプション
- --restart .. no (再起動しない)/ on-failure (終了ステータスが0でないなら再起動)/ on-failure:4 (終了ステータスが0でないなら4回再起動/ always (常に)/ unless-stopped (直前のコンテナの状態が停止状態でなければ再起動)
- --rm .. 実行後のコンテナを自動で削除(--restartオプションと排他)
ネットワークオプション
- --add-host=localhost:127.0.0.1 ... コンテナの/etc/hostsにホスト名とIPアドレスを定義
- --dns=8.8.8.8 ... コンテナ用のDNSサーバのIPアドレス
- --expose .. 指定したレンジのポート番号を割り当てる
- --mac-address=FF:FF:FF:FF:FF:FF .. コンテナのMACアドレスを指定
- --net=[bridge | none | container:<name | id > | host | NETWORK] .. コンテナのネットワークを指定
- --hostname(-h) .. コンテナ自信のホスト名を指定
- --publish(-p) [ホストのポート番号]:[コンテナのポート番号] .. ホストとコンテナのポートマッピング
- --publish-all(-P) .. ホストの任意のポートをコンテナに割り当てる
リソースオプション
- --cpu-shares(-c) .. CPUの使用の配分(1024が100%)
- --memory(-m) .. 使用するメモリを制限(単位はb,k,m,gのいずれか)
- --volume(-v)=[ホストのディレクトリ]:[コンテナのディレクトリ] .. ディレクトリを共有
環境変数など
- --env(-e)=[環境変数] .. 環境変数を設定
- --envfile=[ファイル名] .. fileから環境変数を設定
- --readonly=[true|false] .. コンテナのファイルシステムを読み込み専用にする
- --workdir(-w)=[パス] .. コンテナの作業ディレクトリを指定する
- --user(-u)=[ユーザ名] .. ユーザ名かUIDを指定する
$ docker run --cpu-shares=512 --memory=1g ubuntu
$ docker run -v /Users/yammerjp/webap:/usr/share/nginx/html nginx
docker network
$ docker network create -d bridge webap-net
$ docker container run --net=webap-net -it ubuntu
$ docker network ls
$ docker network connect [ option ] ネットワーク コンテナ
$ docker network disconnect ネットワーク コンテナ
$ docker network inspect [ option ] ネットワーク
$ docker network rm [ option ] ネットワーク
コンテナの状態確認
$ docker container ls [ --all(-a) --filter(-f) --format --last -8 --latest -l --no-trunc --quiet(-q) --size(-s) ]
# 稼働しているコンテナの状態一覧
$ docker container stats コンテナ識別子
# コンテナ稼働確認 識別子はnginxserver等 Ctrl+Cで終了
$ docker container top コンテナ識別子
# コンテナで実行中のプロセスを確認
コンテナの状態変更
$ docker container start[ --atatch(-a) --interactive(-i) ] コンテナ識別子
$ docker container stop [ -time(-t) ..コンテナの停止時間を指定する(defaultは10s) ] コンテナ識別子
$ docker container restart [ -time(-t) ..コンテナの再起動時間を指定する(defaultは10s) ] コンテナ識別子
$ docker container pause コンテナ識別子
$ docker container unpause コンテナ識別子
others
$ docker container rm [ --force(-f) .. 起動中のコンテナを強制的に削除 , --volumes(-v) .. 割り当てたボリュームを削除 ] コンテナ識別子
$ docker container attach コンテナ識別子
# 接続後、Ctrl+Cでコンテナごと終了、デタッチのみはCtrl+P -> Ctrl+Q
$ docker container exec [ --detach(-d) --interactive(-i) --tty(-t) --user(-u) ] コンテナ識別子 実行コマンド
$ docker container top
$ docker container port # 転送されているポートの確認
$ docker container cp コンテナ識別子:コンテナ内のファイルパス ホストのディレクトリパス # ファイルをコピー
# cp以後を逆にすると、逆転送も可能
$ docker container diff コンテナ識別子
# コンテナがイメージから作成されたときとの差分 A..ファイル追加 B..ファイル削除 C..ファイル更新
$ docker container commit [オプション] コンテナ識別子 [イメージ名[:タグ名]