Docker チートシート - shinsuzuki/learn GitHub Wiki
ps> docker version
Version: 27.5.1
API version: 1.47
Go version: go1.22.11
Git commit: 9f9e405
Built: Wed Jan 22 13:41:44 2025
OS/Arch: windows/amd64
Context: desktop-linux
Server: Docker Desktop 4.38.0 (181591)
Engine:
Version: 27.5.1
API version: 1.47 (minimum version 1.24)
Go version: go1.22.11
Git commit: 4c9b3b0
Built: Wed Jan 22 13:41:17 2025
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.7.25
GitCommit: bcc810d6b9066471b0b6fa75f557a15a1cbf31bb
runc:
Version: 1.1.12
GitCommit: v1.1.12-0-g51d5e946
docker-init:
Version: 0.19.0
GitCommit: de40ad0
# Nginxコンテナをイメージから名前付きのコンテナを作成しポートを公開し、
# バックエンドで起動、終了後はコンテナを削除
ps> docker container run --name my_eninx --rm --detach --publish 8080:80 nginx
# 起動しているコンテナのポートを確認
ps> docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2cb4110de14f nginx "/docker-entrypoint.…" 12 seconds ago Up 11 seconds 0.0.0.0:8080->80/tcp my_eninx
# ubuntuコンテナを対話形式で起動
ps> docker container run -it ubuntu bash
# コンテナの一覧の確認
ps> docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1954ac2fe166 ubuntu "bash" 5 minutes ago Up 5 minutes quirky_swirles
# コンテナの全一覧の確認(起動中以外を含む)
ps> docker container ls -alll
# コンテナを停止
ps> docker container stop <container-id, container-name>
# コンテナを開始(作成済みのコンテナを起動)
ps> docker container start <container-id, container-name>
# コンテナを削除
ps> docker container rm <container-id, container-name>
# コンテナを強制的に削除(停止と削除)
ps> docker container rm --force <container-id, container-name>
# コマンドを実行(1)
ps> docker container run baash echo 'hello world!'
# コマンドを実行(2)
ps> vdocker container run bash head -n 4 /etc/os-release
NAME="Alpine Linux"
ID=alpine
VERSION_ID=3.21.3
PRETTY_NAME="Alpine Linux v3.21"
# 環境変数を設定
ps> docker container run --name db --rm --detach \
--env MYSQL_ROOT_PASSWORD=secret \
--env MYSQL_USER=app \
--env MYSQL_PASSWORD=pass1234\
--env MYSQL_DATABASE=sample\
--publish 3306:3306 \
mysql
# ログを出力を確認
ps> docker container logs <container-id,container-name>
# ログを出力を確認(表示し続ける)
ps> docker container logs --follow <container-id,container-name>
# コンテナに命令(1)
ps> docker container exec my_nginx head -n 4 /etc/os-release
PRETTY_NAME="Debian GNU/Linux 12 (bookworm)"
NAME="Debian GNU/Linux"
VERSION_ID="12"
VERSION="12 (bookworm)"
# コンテナに命令(2)
ps > dokcer contaier exec -it my_nginx bash
root@06d4547fa17f:/#
# イメージ覧
ps > docker image ls
# イメージを取得
ps > docker image pull bash:3.1.23
# イメージの詳細
ps > docker image inspect bash:3.1.23
# コンテナからイメージを作成(viをコンテナに追加済み、それからイメージを作成)
ps > docker container commit my-ubuntu my-vi-ubuntu:commit
# イメージを作成(Dockerfileの存在する場所を指定)
ps > docker image build -t <image-name> <target-dir>
# Dockerfile サンプル
FROM ubuntu:22.04
RUN apt-get update && apt-get install -y vim
# コンテナのビルド時に、ファイルをホストのカレントからイメージの/etc/へコピー
FROM bash
COPY ./sample.txt /etc
# コンテナの起動時に実行するコマンド
FROM bash
CMD ["echo", "hello world!"]
# ボリュームを作成
ps> docker volume create --name my-volume
my-volume
# ボリュームを削除
ps> docker volume rm my-volume
# 起動時にボリュームをマウント
# <mount>
# type: ボリュームをマウントする場合はvolume
# source:マウント元(作成したボリュームを指定)
# destination:マウント先(任意のパスを指定)
ps> docker container run \
--name bash1 \
--mount type=volume,source=my-volume,destination=/my-work \
-it \
bash
ps> docker run -it --rm
--name bash1 \
--mount "type=bind,source=$($pwd)/share-dir,destination=/my-work" \
bash:latest
bash
ps> docker run -it --rm
--name bash1 \
--mount "type=bind,source=$($pwd)/share-dir,destination=/my-work,readonly" \
bash:latest
bash
[note] mountの書き方に注意
https://forums.docker.com/t/error-in-poweshell-on-docker-run-it-mount-mount-type-bind-src-pwd/136051
todo 使うときにやる
ps> docoker network create <contaneir-name>
ps> docoker network rm <container-id, container-name>
ps> docoker network ls
#ps> docker cp <container-id>:<src-dir,file> <dist-dir,file>
ps > docker cp bash1:/etc/profile .
Successfully copied 2.56kB to C:\Users\shins\mydev\learn\docker\sandbox\hoge\.
# ps> docker cp <src-dir,file> <container-id>:<dist-dir,file>
ps> docker cp ./sample.txt bash1:/etc/sample.txt
Successfully copied 2.05kB to bash1:/etc/sample.txt
Docker Composeコマンドはcompose.yamlを配置した階層で実行します。
# コンテナの作成と実行
ps> docker compose up -d
# コンテナの停止
ps> docker compose stop
# 作成済みのコンテナを実行
ps> docker compose start
# コンテナを削除(停止状態を削除、紐づくネットワークは削除しない)
ps> docker compose rm
# コンテナを削除(停止と削除)
ps> docker compose rm -s
# コンテナを削除(コンテナとネットワークを削除)
ps> docker compose down
# コンテナを削除(コンテナとネットワークイメージを削除)
ps> docker compose down --rmi all
note: オプションでボリュームも併せて削除可能
# プロジェクトの一覧
ps> docker compose ls
NAME STATUS CONFIG FILES
001apache running(1) C:\Users\shins\mydev\learn\docker\sandbox\docker-compose\001.apache\compose.yaml
# コンテナからホストへコピー
ps> docker compose cp <container-id>:<src-dir,file> <dist-dir,file>
# ホストからコンテナへコピー
ps> docker compose cp <src-dir,file> <container-id>:<dist-dir,file>
ps > docker compose exec db mariadb --version
mariadb Ver 15.1 Distrib 10.7.8-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2
ps > docker compose exec db bash
root@ac4b567eb8f2:/#