目次:
コンテナの状態遷移図
(この図は Mermaid Live Editor で作成されました)
よく使うコマンド
- イメージを検索する:
docker search {KEYWORD}
- イメージを Docker HUB 上で検索する: Docker Hub の検索ボックスにキーワードを入れる
- イメージをダウンロードする:
docker pull {IMAGE}
- ダウンロード済のイメージを表示する:
docker images
- ダウンロード済のイメージを削除する:
docker rmi {IMAGE}
- コンテナを実行する:
docker start {CONTAINER}
- 標準入出力をアタッチしてコンテナを実行する:
docker start --attach {CONTAINER}
- 実行中のコンテナを表示する:
docker ps
- すべてのコンテナを表示する:
docker ps --all
- コンテナを削除する:
docker rm {CONTAINER}
- Docker のディスク使用状況を表示する:
docker system df
- イメージに別名(タグ)をつける:
docker tag {ID} {NAME}
docker ps のオプション
docker ps
には様々なオプションがある。
docker ps — Docker-docs-ja 20.10 ドキュメント
# mysql:8 イメージで動作しているコンテナ (停止中も含む) の一覧 $ docker ps --all --filter "ancestor=mysql:8" # mysql:8 イメージで動作しているコンテナの名前の一覧 $ docker ps --all --filter "ancestor=mysql:8" --format="{{.Names}}" # mysql:8 イメージで動作しているコンテナを削除する $ docker ps --all --filter "ancestor=mysql:8" --format="{{.Names}}" | xargs docker rm
特定のユーザで実行する
docker run
時に以下のオプションを付けるとホストと同じユーザで実行される。
-u `id -u`:`id -g`
- 現在のユーザのユーザID、グループIDを使う-v /etc/passwd:/etc/passwd
- ユーザ名をホストから取得する-v /etc/group:/etc/group
- グループ名をホストから取得する
複数コマンドを実行する
docker run
時に複数のコマンドを実行するにはコマンドとして {SHELL} -c "COMMAND1 && COMMAND2 && ..."
を指定する。
例 (Alpineコンテナでインストールされているパッケージを表示する):
docker run --rm alpine:latest /bin/sh -c "apk update && apk list -I"
イメージの中身を確認する
hello-world イメージを調べてみる。
イメージを取得する:
$ docker pull hello-world Using default tag: latest latest: Pulling from library/hello-world 0e03bdcc26d7: Pull complete Digest: sha256:e7c70bb24b462baa86c102610182e3efcb12a04854e8c582838d92970a09f323 Status: Downloaded newer image for hello-world:latest docker.io/library/hello-world:latest
イメージの中身を確認する:
$ docker image inspect hello-world [ { "Id": "sha256:bf756fb1ae65adf866bd8c456593cd24beb6a0a061dedf42b26a993176745f6b", "RepoTags": [ "hello-world:latest" (中略) "Cmd": [ "/bin/sh", "-c", "#(nop) ", "CMD [\"/hello\"]" ], (中略) "GraphDriver": { "Data": { "MergedDir": "/var/lib/docker/overlay2/9317ae56b93c9a7ae9459380e7b0af1b5914824bc034ee9c01e4f68182bf131d/merged", "UpperDir": "/var/lib/docker/overlay2/9317ae56b93c9a7ae9459380e7b0af1b5914824bc034ee9c01e4f68182bf131d/diff", "WorkDir": "/var/lib/docker/overlay2/9317ae56b93c9a7ae9459380e7b0af1b5914824bc034ee9c01e4f68182bf131d/work" }, "Name": "overlay2" }, (後略)
/bin/sh -c /hello
を実行している- ディレクトリは
/var/lib/docker/overlay2/9317ae56b93c9a7ae9459380e7b0af1b5914824bc034ee9c01e4f68182bf131d
ディレクトリを確認する:
$ cd /var/lib/docker/overlay2/9317ae56b93c9a7ae9459380e7b0af1b5914824bc034ee9c01e4f68182bf131d $ ls -F diff/ link $cd diff $ ls -F hello* $ file hello hello: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, stripped
docker-compose
docker-compose.yml に複数のコマンドを書きたい場合には次のようにする。
例: alpine Linux で SQLite3 をインストールしてから PHP の内蔵サーバを実行する場合
command: > /bin/sh -c " apk update && apk add sqlite && php -S 0.0.0.0.:8080 -t public"