Docker #
Dockerfile #
command | description |
---|---|
FROM | ビルドするイメージのベースイメージ |
RUN | イメージをビルドする際、コンテナで実行するコマンドを定義 |
COPY | ホスト側からコンテナ側にファイルやディレクトリをコピー |
ADD | COPY の機能に加え、アーカー部の自動展開やURLを指定してファイルやディレクトリをコンテナに追加。OSのベースイメージ作成時のような特殊なケースで活用 |
CMD | コンテナがフォアグラウンドで実行するコマンドを定義 |
ENTRYPOINT | コンテナを実行可能ファイルとして使用する際に定義する際に定義するコマンド。CMD と ENTRYPOINT は併用可能 |
ARG | docker 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
option | description |
---|---|
-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]