Docker

Docker #

Dockerfile #

commanddescription
FROMビルドするイメージのベースイメージ
RUNイメージをビルドする際、コンテナで実行するコマンドを定義
COPYホスト側からコンテナ側にファイルやディレクトリをコピー
ADDCOPY の機能に加え、アーカー部の自動展開やURLを指定してファイルやディレクトリをコンテナに追加。OSのベースイメージ作成時のような特殊なケースで活用
CMDコンテナがフォアグラウンドで実行するコマンドを定義
ENTRYPOINTコンテナを実行可能ファイルとして使用する際に定義する際に定義するコマンド。CMDENTRYPOINT は併用可能
ARGdocker image build 時に利用する変数
ENVコンテナ内の環境変数を定義
EXPOSEコンテナが公開するポート
VOLUMEホストや他のコンテナからマウントできるポイントを作成
LABELイメージに追加するメタデータ
STOPSIGNALコンテナに送られて終了するシステムコール信号を設定
HEALTHCHECKコンテナ内でコマンドを実行し、その結果をヘルスチェック(死活監視)として利用
USERコンテナ実行時のコンテナユーザー。イメージビルド時、USER 定義後の RUN もそのユーザーで実行される
WORKDIRコンテナ内の作業ディレクトリ
ONBUILDコンテナ内で実行するコマンドを定義するが、定義したイメージでは実行されない。ONBUILD を定義したベースイメージを利用するイメージのビルド時に実行される

Image #

Dockerfile から Docker イメージをビルド #

$ docker image build [options] (Dockerfileを配置したディレクトリのパス|URL)

Docker Hub にホストされている Docker イメージを検索 #

$ docker search [options] 検索キーワード

Inspection #

Get instance’s information #

$ docker inspect <CONTAINER ID|NAME>

Get an instance’s IP address #

$ docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' <CONTAINER ID|NAME>

Get an instance’s MAC address #

$ docker inspect --format='{{range .NetworkSettings.Networks}}{{.MacAddress}}{{end}}' <CONTAINER ID|NAME>

Get an instance’s log path #

$ docker inspect --format='{{.LogPath}}' <CONTAINER ID|NAME>

Get an instance’s image name #

$ docker inspect --format='{{.Container.Spec.Image}}' <CONTAINER ID|NAME>

List all port bindings #

$ docker inspect --format='{{range $p, $conf := .NetworkSettings.Ports}} {{$p}} -> {{(index $conf 0).HostPort}} {{end}}' <CONTAINER ID|NAME>

Find a specific port mapping #

$ docker inspect --format='{{(index (index .NetworkSettings.Ports "8787/tcp") 0).HostPort}}' <CONTAINER ID|NAME>

Get a subsection in JSON format #

$ docker inspect --format='{{json .Config}}' <CONTAINER ID|NAME> | jq

Get environmental variables #

$ docker inspect --format='{{range .Config.Env}}{{println .}}{{end}}' <CONTAINER ID|NAME>

Get mount volumes #

$ docker inspect --format='{{json .Mounts}}' <CONTAINER ID|NAME> | jq

Network #

https://docs.docker.com/network/

  • none
    • ネットワーク接続なし
  • host
    • ホストのネットワークを直接利用
  • bridge
    • ホスト上に別のネットワークを構築して利用
  • overlay
    • Swarmサービスが互いに通信できるよう、複数の Docker デーモンを一緒に接続
    • Swarmサービスとスタンドアロンコンテナ、または
      異なるDockerデーモン上の2つのスタンドアロンコンテナの通信を容易化

List networks

$ docker network ls

Create a network

$ docker network create <NETWORK NAME>

Connect a container to a network

$ docker network connect <CONTAINER ID|NAME>

Disconnect a container from a network

$ docker network disconnect <CONTAINER ID|NAME>

Display detailed information on one or more networks

$ docker network inspect <NETWORK NAME>

Remove all unused networks

$ docker network prune <NETWORK NAME>

Remove one or more networks

$ docker network rm <NETWORK NAME>

Stop #

Stop all containers #

docker container ps -q | xargs docker container stop

or

docker stop $(docker ps -q)

Remove #

Remove stopped containers, untagged images, unused volumes, unused networks #

docker system prune
optiondescription
-a未使用のイメージを含め削除
-f確認せず削除
docker system prune -af

Remove stopped containers #

docker container prune

Remove all containers #

docker container ps -aq | xargs docker container rm -f

or

docker ps -aq | xargs docker rm -f

or

docker rm -f $(docker ps -aq)

Remove all images (after all containers were removed) #

docker images -aq | xargs docker image rm -f

or

docker images -aq | xargs docker rmi -f

or

docker rmi -f $(docker images -aq)

Remove untagged images #

docker images -fq "dangling=true" | xargs docker image rm

Remove unused volumes #

docker volume prune

Remove unused networks #

docker network prune

Log #

How to check log #

最新の30件を確認

docker logs -f --tail=30

Other #

How to mount a directory in host server #

docker run -v [absolute path in host]:[absolute path in container] [image name]:[tag] [command]

References #