技術(tech)

Dockerイメージ・コンテナ操作のチートシートを紹介【初心者向け】

Dockerを触る際に、「あれ、これどうやってやるんだっけ?」という人のために、
よく使用する操作コマンドをまとめました。

想定する読者

  • 使用頻度が高いdockerコマンドについて知りたい人
  • 忘れてしまいがちなdockerコマンドを書き留めておきたい人

早速本題に入っていきます

dockerコマンド

イメージ操作

dockerイメージの検索
docker search [options] 検索キーワード
docker search --limit 5 mysql

dockerイメージの取得
docker image pull [options] リポジトリ名[:タグ名]
※タグ名を省略した場合にはデフォルトタグが利用される
docker image pull jenkins:latest

dockerイメージの一覧
docker image ls [options] [リポジトリ[:タグ]]
docker image ls

イメージのビルド

ビルド
docker image build -t example/echo:latest .

-fオプションをつけると、Dockerfile名を選択できる
docker image build -f Dockerfile-test -t example/echo:latest .

build時にベースイメージを強制取得
docker image build --pull=true -t example/echo:latest .

イメージのタグ付け

静止点を残してバージョンを管理したい場合に便利
docker image tag 元イメージ名[:タグ] 新イメージ名[:タグ] docker image tag example/echo:latest example/echo:0.1.0

イメージの公開

docker image push [options] リポジトリ名[:タグ] 手順

1. 名前空間の変更
   docker image tag example/echo:latest gogogonkun(DockerHubのID)/echo:latest
2. Docker Hubへプッシュ ※プッシュするDockerfileにはパスワードやAPIなどの機密情報を含めないように
   docker image push gogogonkun/echo:latest

コンテナの実行

dockerイメージの実行
基本形

docker container run [options] イメージ名[:タグ] [コマンド] [コマンド引数...]
docker container run [options] イメージID [コマンド] [コマンド引数...]
docker container run -d -p 9000:8080 example/echo:latest

docker container run よく使うオプション

-dオプション:バックグランドでコンテナを実行
docker container run -d example/echo:latest

-itオプション:コンテナを作ってログイン
-i → docker起動後にコンテナ側の標準入力を繋いだままに
-t → 擬似端末を有効に
docker container run -it -d -p 9000:8080 example/echo:latest

-name [適当な名前]:dockerコマンドの名前の指定に、ここで設定した名前を使用
docker container run --name hogehoge -p 9000:8080 example/echo:latest

-p {ホスト側のポート}:{コンテナポート}:ポートフォワーディングを指定してコンテナを実行
docker container run -d -p 9000:8080 example/echo:latest

-rm:コンテナ終了後にコンテナを破棄

-v:ホストとコンテナ間でディレクトリ・ファイルを共有する際に使用

ホスト側のポートは省略可能(自動で割り当て)
※どのポートに割り当てられたかは、docker container ls で確認
docker container run -d -p 8080 example/echo:latest

コンテナの停止

docker container stop コンテナIDまたはコンテナ名
docker container stop b60e6cafd96d

単純に停止
docker stop $(docker container ls -q)

指定したimage名の停止
docker container stop $(docker container ls --filter "ancestor=example/echo" -q)

コンテナの再起動

docker container コンテナIDまたはコンテナ名
docker container restart echo

コンテナをディスクから破棄

docker container rm コンテナIDまたはコンテナ名
docker container rm hogehoge

-fオプション:実行中のコンテナを停止・削除
docker container rm -f hogehoge

コンテナ一覧

起動中のコンテナ確認
docker container ls

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b60e6cafd96d example/echo:latest "go run /echo/main.go" 5 seconds ago Up 4 seconds 0.0.0.0:9000->8080/tcp elated_khayyam
項目 内容
CONTAINER ID コンテナに付与される一意のID
IMAGE コンテナ作成に使用されたDockerイメージ
COMMAND コンテナで実行されているアプリケーションのプロセス
CREATED コンテナが作成されてから経過した時間
STATUS Up(実行中)、Exited(終了)といったコンテナの実行状態
PORTS ホストのポートとコンテナポートの紐付け(ポートフォワーディング)
NAMES コンテナにつけられた名前
コンテナIDだけを抽出する
docker container ls -q

b60e6cafd96d

特定条件に一致するものだけを抽出
docker container ls --filter "filter名=値"
docker container ls --filter "name=echo1"
docker container ls --filter "ancestor=example/echo"

終了したコンテナを取得する 
docker container ls -a

標準出力の取得

docker container logs [options] コンテナIDまたはコンテナ名 

docker container logs -f $(docker container ls --filter "ancestor=jenkins" -q)

実行中コンテナでのコマンド実行

docker container exec [options] コンテナIDまたはコンテナ名 コンテナ内で実行するコマンド

docker container run -t -d --name echo --rm example/echo:latest
docker container exec echo pwd

コンテナ間、コンテナ・ホスト間でファイルコピー

docker container cp [options] コンテナIDまたはコンテナ名:コンテナ内のコピー元 ホストのコピー元 コンテナ→ホストのカレントディレクトリにコピー

docker container cp echo:/echo/main.go .

docker container cp [options] ホストのコピー元 コンテナIDまたはコンテナ名:コンテナ内のコピー元 ホスト→コンテナにコピー

docker container cp dummy.txt echo:/tmp
docker container exec echo ls /tmp | grep dummy

docker-composeコマンド

composeファイル内のキーワード

  • image: → Dockerイメージ
  • ports: → ポートフォワーディング
  • build: →  Dockerfileが存在するディレクトリの相対パス
  • volumes: →ホスト・コンテナかんでファイルが共有される
  • environment: → 環境変数を設定(変数名=値)
  • links: → コンテナ間の名前解決(コンテナ名)
docker-compose.ymlからDockerコンテナを実行
docker-compose up -d

docker-compose.ymlから起動したDockerコンテナを停止
docker-compose down

--build:Dockerイメージを更新して実行
docker-compose up -d --build

docker-composeで起動したコンテナの確認
docker compose ps

一括で削除:prune

使用していないイメージを削除
docker image prune [options]
docker image prune

使用していないコンテナを削除
docker container prune [options]
docker container prune

使用していないdockerリソースを削除
docker system prune

コンテナ単位でのシステムリソースの利用状況を取得

docker container stats [options] [表示するコンテナID]
docker container stats

 

参考

Docker/Kubernetes 実践コンテナ開発入門

よく使うDockerコマンド
https://qiita.com/noralife/items/18301143c20cc5172c56