Docker 辞典

Docker コースで覚える docker のサブコマンドの一覧です。ファイルの操作や curl(pwd・cd・ls・mkdir・touch・cp・mv・rm・less・cat・echo・head・tail・grep・vi・sed・diff・wc・tree・find・curl・sudo・exit・hostname・id・whoami・export・ps・chmod・chown・date・sort・uniq・cut・xargs)と、コンテナの中のコマンド(apk・pip など)は最初から使えます。

コンテナの中のコマンドapk・apt-get・pip・npm・psql・redis-cli などいつでも使える

apk add --no-cache パッケージ
apt-get update && apt-get install -y パッケージ
pip install -r requirements.txt
npm install / npm run ビルド
redis-cli SET key value
psql -U postgres -c "SQL"

コンテナ(や Dockerfile の RUN)の中で使うコマンドです。イメージに入っているものだけ使えます(alpine に bash や curl は入っていないので apk add で入れます)。

usermod / gpasswdユーザーの設定を変えるLv1 で覚える

usermod -aG グループ ユーザー
gpasswd -a ユーザー グループ

-a を付けずに -G だけだと、今のグループから外れてしまうので注意。

$ sudo usermod -aG wheel bob

systemctlサービスの起動・停止・自動起動Lv1 で覚える

systemctl start|stop|restart|reload|status サービス
systemctl enable|disable [--now] サービス
systemctl is-active|is-enabled サービス
systemctl list-units --type=service [--failed]

start は今すぐ起動、enable は再起動後も自動で起動。enable --now で両方。操作には sudo が必要です。

$ sudo systemctl enable --now httpd
$ systemctl status sshd

dnf / yumパッケージの管理Lv1 で覚える

dnf install -y パッケージ
dnf remove -y パッケージ
dnf list installed
dnf search 語
dnf provides コマンド

RHEL・Amazon Linux のパッケージ管理。-y で確認を省略します。yum は dnf の別名です。

$ sudo dnf install -y httpd
$ dnf provides dig

dockerコンテナを動かすLv1 で覚える

docker <サブコマンド> [オプション]
docker --version
docker --help

イメージからコンテナを作って動かします。サブコマンド(run・ps・build…)ごとに働きが違います。デーモン(docker サービス)が動いていて、docker グループに入っている必要があります。

docker version / infoDocker の状態を見るLv1 で覚える

docker version
docker info
docker --version

クライアントとサーバー(デーモン)のバージョン、コンテナ・イメージの数などを表示します。Server の部分が出なければデーモンにつながっていません。

$ docker version

docker runコンテナを作って動かすLv2 で覚える

docker run [オプション] イメージ [コマンド]
-d(裏で)--name 名前 -p ホスト:コンテナ -e KEY=値 -v 場所:パス
-it(入って操作)--rm(終わったら消す)--network ネット --restart 方針

イメージが手元になければ pull してから、新しいコンテナを作って起動します。イメージの後ろにコマンドを書くと CMD の代わりに実行します。

$ docker run -d --name web -p 8080:80 nginx
$ docker run --rm alpine echo hello
$ docker run -it ubuntu bash

docker psコンテナの一覧Lv2 で覚える

docker ps
docker ps -a
docker ps -q
docker ps --format '{{.Names}} {{.Status}}'
docker port コンテナ

動いているコンテナを表示します。-a で止まったものも、-q で ID だけ。STATUS の Up は動作中、Exited (n) は終了コード n で止まった状態。

$ docker ps -a

docker stop / start / restart止める・動かすLv3 で覚える

docker stop コンテナ...
docker start コンテナ...
docker restart コンテナ
docker kill コンテナ

コンテナを止めても消えません(中のファイルも残る)。start で同じコンテナをもう一度動かします。

$ docker stop web
$ docker start web

docker logsコンテナの出力を見るLv5 で覚える

docker logs コンテナ
docker logs --tail 20 コンテナ
docker logs -t コンテナ

コンテナのプログラムが標準出力・標準エラーに出したものを表示します。動かないコンテナの原因探しの第一歩。

$ docker logs web

docker exec動いているコンテナで実行Lv5 で覚える

docker exec コンテナ コマンド
docker exec -it コンテナ sh
docker exec -e KEY=値 -w ディレクトリ -u ユーザー コンテナ コマンド

動いているコンテナの中でコマンドを実行します。-it で中のシェルに入り、exit で戻ります(コンテナは動いたまま)。

$ docker exec -it web sh
$ docker exec web cat /etc/nginx/conf.d/default.conf

docker images / pullイメージの一覧・取得Lv6 で覚える

docker images [名前]
docker pull イメージ[:タグ]
docker images -q
docker images -f dangling=true

手元にあるイメージを表示します。pull はレジストリからイメージを取ってきます。タグを書かないと latest。

$ docker pull nginx:alpine
$ docker images

docker rmコンテナを消すLv6 で覚える

docker rm コンテナ...
docker rm -f コンテナ
docker rm -v コンテナ
docker rm $(docker ps -aq)

止まっているコンテナを消します。-f は動いていても止めて消します。消すと中で変えたファイルもなくなります。

$ docker rm web

docker rmiイメージを消すLv6 で覚える

docker rmi イメージ...
docker rmi -f イメージ
docker image rm イメージ

イメージを消します。コンテナ(止まっているものも)が使っているイメージは消せません。

$ docker rmi nginx:alpine

docker build / historyイメージを作るLv8 で覚える

docker build -t 名前:タグ ディレクトリ
docker build -f ファイル --build-arg KEY=値 --no-cache --target ステージ .
docker history イメージ

Dockerfile の命令を上から実行してイメージを作ります。最後の . はビルドコンテキスト(COPY できるファイルの場所)。前と同じ命令はキャッシュ(CACHED)を使います。

$ docker build -t myapp:1.0 .
$ docker history myapp:1.0

docker tagイメージに別名をつけるLv12 で覚える

docker tag 元のイメージ 新しい名前:タグ

同じイメージに別の名前(タグ)をつけます。中身はコピーされません。レジストリに送るときは、レジストリの場所を名前の先頭につけます。

$ docker tag myapp:1.0 localhost:5000/myapp:1.0

docker inspect詳しい情報を見るLv15 で覚える

docker inspect 名前
docker inspect -f '{{.State.Status}}' コンテナ
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' コンテナ

コンテナ・イメージ・ネットワーク・ボリュームの設定と状態を JSON で表示します。-f で必要なところだけ取り出せます。

$ docker inspect -f '{{.State.ExitCode}}' web

docker volumeボリュームを管理するLv16 で覚える

docker volume create 名前
docker volume ls
docker volume inspect 名前
docker volume rm 名前
docker volume prune

ボリュームはコンテナを消しても残るデータの置き場所です。docker run -v 名前:パス でコンテナにつなぎます。

$ docker volume create pgdata

docker cpファイルをコピーするLv18 で覚える

docker cp コンテナ:パス ホストのパス
docker cp ホストのパス コンテナ:パス

コンテナとホストの間でファイルをコピーします。止まっているコンテナからも取り出せます。

$ docker cp web:/etc/nginx/nginx.conf .

docker networkネットワークを管理するLv21 で覚える

docker network create 名前
docker network ls
docker network inspect 名前
docker network connect 名前 コンテナ
docker network rm 名前

同じユーザー定義ネットワークにつないだコンテナは、コンテナ名で互いを呼べます(既定の bridge では名前で呼べない)。

$ docker network create appnet
$ docker run -d --name db --network appnet redis

docker composeまとめて動かすLv27 で覚える

docker compose up -d [--build]
docker compose ps / logs [サービス]
docker compose exec サービス コマンド
docker compose down [-v]
docker compose config

compose.yaml に書いた複数のコンテナ(サービス)・ネットワーク・ボリュームを、まとめて作って動かします。サービス名で互いを呼べます。

$ docker compose up -d
$ docker compose down

docker pushレジストリに送るLv35 で覚える

docker push レジストリ/名前:タグ
docker pull レジストリ/名前:タグ

イメージをレジストリ(イメージの倉庫)に送ります。このシミュレーターでは、registry コンテナを localhost:5000 で動かして使います。

$ docker push localhost:5000/myapp:1.0

docker system / prune片付けるLv36 で覚える

docker system df
docker container prune -f
docker image prune [-a] -f
docker volume prune -f
docker system prune [-a] [--volumes] -f

使っていないコンテナ・イメージ・ネットワーク・ボリュームをまとめて消します。-f を付けないと確認を求められます。df で使っている容量を確かめます。

$ docker system df
$ docker image prune -f