- ぜひ覚えたいdockerの新しい基本コマンド
- Dockerイメージを表示【docker images】
- Dockerイメージをオンライン上で検索する【docker search】
- Dockerイメージをオンライン上からダウンロード取得する【docker pull】
- Dockerイメージを作成【docker commit】
- Dockerイメージの削除【docker rmi】
- 不要なDockerイメージをすべて削除(クリーンアップ)【docker image prune】
- コンテナ一覧を表示【docker ps】
- コンテナの詳細情報を表示【docker inspect】
- コンテナの作成(初期化)【docker create】
- コンテナの起動・終了・再起動【docker start/stop/restart】
- コンテナ本体にアタッチ(ログイン)【docker attach】
- コンテナ上の新規プロセスを実行【docker exec】
- 初期化~アタッチまとめてやる【docker run】
- コンテナの削除【docker rm】
- ボリュームの一覧表示【volume ls】
- ボリュームの削除【volume rm】
- コンテナの内外でのファイルコピー【docker cp】
ぜひ覚えたいdockerの新しい基本コマンド
dockerのこれだけは覚えた方がいい!という初心者向けの基本コマンド集です。
普通にdockerの学習コストは半端じゃなく高いのですべて覚えてられないと思います。なるべく重要なところだけ効率よく学びたいですよね。
そんな人のためのコマンド集になっております。
※2017年リリースされたDocker v1.13よりコマンドの仕様が一新されていますが新しい仕様で説明します。
ネット上で探せる記事では古いコマンドでの紹介がとても多かったので公式リファレンスで確認しながら書きました。
公式コマンドリファレンスだと実際に運用するうえで使うものも使わないものも並列に書いてありわかりづらいので、実際に覚えておいた方がいいものを書いてあります。
公式のコマンドリファレンスはこちら
http://docs.docker.jp/engine/reference/commandline/index.html
Dockerイメージを表示【docker images】
ダウンロードしたDockerイメージを一覧表示する
$ docker images -a
REPOSITORY TAG IMAGE ID CREATED SIZE
wordpress 5.7-php7.4-apache 67c9c1ed40ff 3 days ago 550MB
wordpress latest 67c9c1ed40ff 3 days ago 550MB
hello-world latest d1165f221234 3 weeks ago 13.3kB
※a, –all=false 全てのイメージを表示(デフォルトは中間コンテナを非表示)
※docker images ls は旧仕様
Dockerイメージをオンライン上で検索する【docker search】
キーワードからオンライン上のDockerイメージを探す
searchコマンドでwordpressに関するイメージを検索してみます
$ docker search wordpress
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
wordpress The WordPress rich content management system… 4078 [OK]
bitnami/wordpress Bitnami Docker Image for WordPress 160 [OK]
appcontainers/wordpress Centos/Debian Based Customizable WordPress C… 34 [OK]
bitnami/wordpress-nginx Bitnami Docker Image for WordPress with NGINX 25 [OK]
aveltens/wordpress-backup Easily backup and restore your WordPress blo… 19 [OK]
conetix/wordpress-with-wp-cli WordPress with wp-cli integration 18 [OK]
arm32v7/wordpress The WordPress rich content management system… 14
centurylink/wordpress WordPress image with MySQL removed. 14 [OK]
appsvcorg/wordpress-alpine-php This is a WordPress Docker image which can … 11
wordpressdevelop/php PHP images for the WordPress local developme… 7
wodby/wordpress-php PHP for WordPress 6 [OK]
dalareo/wordpress-ldap WordPress images with LDAP support automatic… 6 [OK]
wodby/wordpress-nginx Nginx for WordPress 6 [OK]
arm64v8/wordpress The WordPress rich content management system… 5
ansibleplaybookbundle/wordpress-ha-apb An APB which deploys WordPress HA 4 [OK]
gwee/wordpress-sendmail-docker wordpress with sendmail 4 [OK]
wordpressdevelop/phpunit PHPUnit images for the WordPress local devel… 3
s390x/wordpress The WordPress rich content management system… 3
wodby/wordpress Vanilla WordPress container image 2
bakudankun/wordpress-ja WordPress Japanese Edition forked from offic… 1 [OK]
i386/wordpress The WordPress rich content management system… 1
ppc64le/wordpress The WordPress rich content management system… 1
dsteinkopf/wordpress wordpress clone plus some php extensions 1 [OK]
amd64/wordpress The WordPress rich content management system… 0
arm32v5/wordpress The WordPress rich content management system… 0
さらに条件を絞ってオンライン上のDockerイメージを探す
こちらの公式WebサイトDockerHub上からもDockerイメージを探せます
https://hub.docker.com/search?type=image
使えるフィルターはこちら
- stars (整数 – イメージが持つスター数)
- is-automated(true|false)- イメージが自動構築されたかどうか
- is-official(true|false)- イメージが公式かどうか
filterで公式のものに絞ってみます。
$ docker search --filter "is-official=true" wordpress
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
wordpress The WordPress rich content management system… 4078 [OK]
サイト上で評価が一定数以上ついているものに絞ることもできます
$ docker search --filter "stars=10" --filter "is-official=true" mysql
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 10676 [OK]
mariadb MariaDB Server is a high performing open sou… 4010 [OK]
percona Percona Server is a fork of the MySQL relati… 529 [OK]
後述のイメージ取得の際に説明しますが、searchコマンド上でイメージのタグを確認することはできません。
公式ページから検索することで確認ができます。
https://hub.docker.com/search?type=image
Dockerイメージをオンライン上からダウンロード取得する【docker pull】
探し当てたイメージをリポジトリからダウンロードします
$ docker pull wordpress
Using default tag: latest
latest: Pulling from library/wordpress
ac2522cc7269: Pull complete
5b2eaf06d6cf: Pull complete
353d7ace7314: Pull complete
37e4975b15a3: Pull complete
f54c541ce8ea: Pull complete
4c5f70c3328b: Pull complete
7721d733906f: Pull complete
15a49155542c: Pull complete
a365bc9f6bef: Pull complete
60a4e47167a5: Pull complete
24b65d3ed44f: Pull complete
0c1e61773eb8: Pull complete
c29159fb4bcc: Pull complete
26fb7e4f01ad: Pull complete
9c202d0c403c: Pull complete
0c3ce41d4ac1: Pull complete
9c5aa7a09350: Pull complete
474825f9ea74: Pull complete
94703b17fe04: Pull complete
73c68a1f3a28: Pull complete
5c2036f3fca4: Pull complete
Digest: sha256:a78e00e214e7422e80602bc8e217b7ec3c56392b23cfcf308caf1db82f8de76f
Status: Downloaded newer image for wordpress:latest
docker.io/library/wordpress:latest
対象のアプリの細かなバージョンやアプリの種類を指定するためにイメージにはタグがついています。
なにも指定しないとlatest(最新版)というタグがつけられます。
タグの確認の仕方はsearchコマンドの項で説明しています。
wordpressひとつとってもこの画像の3倍以上のタグが存在します。バージョン違い多くの環境がすぐに手に入れられるなんて感動ものですね
wordpress5.7がPHP7.4+Apacheで構築されているタグがあるようなのでそちらを指定してインストールしてみます
$ docker pull wordpress:5.7-php7.4-apache
5.7-php7.4-apache: Pulling from library/wordpress
Digest: sha256:a78e00e214e7422e80602bc8e217b7ec3c56392b23cfcf308caf1db82f8de76f
Status: Downloaded newer image for wordpress:5.7-php7.4-apache
docker.io/library/wordpress:5.7-php7.4-apache
一瞬で終わります・・すごい
Dockerイメージを作成【docker commit】
作成したコンテナのファイル変更や設定を、新しいイメージに収容
docker commit [オプション] コンテナ [リポジトリ[:タグ]]
$ docker commit [オプション] コンテナ [リポジトリ[:タグ]]
Dockerイメージの削除【docker rmi】
$ docker rmi wordpress:latest
Untagged: wordpress:latest
※docker image rmは旧仕様です
イメージの強制削除
$ docker rmi -f mysql:latest
不要なDockerイメージをすべて削除(クリーンアップ)【docker image prune】
docker image prune コマンドは、使っていないイメージのみ削除します。タグを持たず、他のコンテナからも参照されないイメージが全て削除できます。
$ docker image prune
コンテナ一覧を表示【docker ps】
コンテナ一覧を表示します。オプションなしだと動作中のコンテナを表示します。
基本的にはここでコンテナIDやコンテナ名(NAMES)を確認して個別のコンテナの操作をすることになります。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
07ec75551564 debian "bash" 8 minutes ago Up 8 minutes xxx
主要なステータスの見方
Created | 作成されただけの状態。まだ起動されてない |
Up *** | コンテナ起動中 |
UP *** (paused) | コンテナ一時停止中 |
Exited *** | コンテナ終了済 |
※docker container lsは旧仕様です
※-a, –all 全てのコンテナを表示 (デフォルトは実行中コンテナのみ表示)
コンテナの詳細情報を表示【docker inspect】
コンテナの詳細情報がJSON形式で出力されます。
かなりの量が表示されます。
docker inspect 【コンテナ名 or コンテナID】
$ docker inspect status-test
[
{
"Id": "4632d8089906c2f634aaa7a8741617d99e5ed6ccffcb30b3b6e312a1ac59ea19",
"Created": "2021-03-31T13:22:21.268519586Z",
"Path": "/bin/sh",
"Args": [],
"State": {
"Status": "created",
"Running": false,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 0,
"ExitCode": 0,
"Error": "",
"StartedAt": "0001-01-01T00:00:00Z",
"FinishedAt": "0001-01-01T00:00:00Z"
},
"Image": "sha256:109b803c6a30d5b613caf528e4b8f96d2aa4205c58de6ac494825d81380125c8",
"ResolvConfPath": "",
"HostnamePath": "",
"HostsPath": "",
"LogPath": "",
~略~
コンテナの作成(初期化)【docker create】
イメージをダウンロードしたらコンテナの作成をします。
※あらかじめdocker pull debianをしておいてください。
docker create [オプション] イメージ [コマンド] [コマンドの引数]
$ docker create -it --name debian-test debian
9b9b5f5983dacdc464ac1e2563dfb80fc2155a47600987fe38ed59ca518a209c
–name で名前を指定できます。
名前を付けない場合はランダムな英単語の名前が勝手につけられます。
ここで一番大事なのは -itというオプションです。
必ずつけるようにしてください。
つけないとアプリの内容によって起動しなくなります。
つけても意味のないことはありますが、どうせならいつもつけておいてよいでしょう。
-itオプションを付ける理由
-itオプションをつける理由が気にならない方は読み飛ばしてもOKです。
-itオプションの意味的には
-i:コンテナにアタッチしていなくても STDIN を開き続ける
-t:疑似ターミナル (pseudo-TTY) を割り当て
つまりはコンテナの中のアプリの標準入力と外のOSの標準入力を結びつけるための設定です。標準出力も同様。
標準入力や出力が必須となっているOSようなアプリがコンテナの中身の場合は起動しない場合があります。
一方、apacheなどの標準入力や出力がないものはなしでも起動します。
○ | 起動できる | docker create -it debian |
× | 起動できない | docker create debian |
○ | 起動できる | docker create -it wordpress |
○ | 起動できる | docker create wordpress |
もしこの時点で意味がわからなくても後述のattachの項まで進むとイメージが付くかもしれません。
コンテナの起動・終了・再起動【docker start/stop/restart】
作成したコンテナをバックグラウンドで起動・終了・再起動します
docker start 【コンテナ名 or コンテナID】
docker stop 【コンテナ名 or コンテナID】
docker restart 【コンテナ名 or コンテナID】
$ docker start debian-test
debian-test
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9b9b5f5983da debian "bash" 6 minutes ago Up Less than a second debian-test
$ docker stop debian-test
debian-test
$docker ps -a;
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9b9b5f5983da debian "bash" 6 minutes ago Exited (0) 35 seconds ago debian-test
コンテナ本体にアタッチ(ログイン)【docker attach】
これまででcreateしてstartした状態だとコンテナはバックグラウンドで動作しています。
このままだと処理中の出力を見たりや入力をしたりなどもできません。
現在の入力出力とコンテナの入力出力を実際に結びつけるのがアタッチ(attach)です。
簡単に言うと端末でコンテナ本体にログインするようなものです。
前述のcreateの項で出てきた-itオプションはこのための設定だったというわけです。
-itオプションでパイプの接合部分を準備して、attachで実際にパイプ同士を接続するみたいなイメージです。
docker attach 【コンテナ名 or コンテナID】
$ docker attach debian-test
root@486a247f11d1:/# ←DebianLinuxの標準入出力
Debianの中であることを確認してみます。
root@486a247f11d1:/# cat /etc/issue
Debian GNU/Linux 10 \n \l
今はコンテナ本体につないでいる状態なのでCtrl+Dやexitで抜けるとコンテナプロセス自体が終了(Exited)してしまいます。
コンテナを起動したままアタッチ状態を抜けるには、アタッチの逆であるデタッチ(detach)をしてパイプの接続を切ります。
アタッチ状態でCtrlを押したままP、Qと順番に入力するとdetachすることができ、コンテナは起動したままバックグラウンドで動いている状態に戻ります。
コンテナ上の新規プロセスを実行【docker exec】
execは実行中のコンテナ内で、新しいコマンドを実行します
docker exec [オプション] コンテナ コマンド [コマンド引数]
実行中のコンテナ内に新しい Bash セッションを作成してログイン
$ docker exec -it debian-test bash
実行中のコンテナ内に新しいセッションでsleepコマンド実行(フォアグラウンド)
$ docker exec debian-test sleep 3
$ ←3秒後に入力状態に復帰
実行中のコンテナ内に新しいセッションでsleepコマンド実行(バックグラウンド)
$ docker exec -d debian-test sleep 3
$ ←すぐに入力状態に復帰
初期化~アタッチまとめてやる【docker run】
docker run は今まで記述したcreate, start, attach を一度に実行するコマンドです。
docker create [オプション] イメージ [コマンド] [コマンド引数]
次に示す①~③はすべて同じ結果になります。
①runを使う
$ docker run -it --name debian-test debian
②create + start
$ docker create -it --name debian-test debian
$ docker start -i debian-test
③create + start + attach
$ docker create -it --name debian-test debian
$ docker start debian-test
$ docker attach debian-test
コンテナの削除【docker rm】
停止中のコンテナ削除
$ docker rm 【コンテナ名 or コンテナID】
起動中のコンテナでも強制削除
$ docker rm -f 【コンテナ名 or コンテナID】
ボリュームの一覧表示【volume ls】
$ docker volume ls
DRIVER VOLUME NAME
local basic-php-mysql_docker_share ←名前付きボリューム
local basic-php-mysql_my_mysql_etc
local basic-php-mysql_my_mysql_lib
local basic-php-mysql_my_mysql_log
local c11f7d87b4b7ea1bcaf205dfc81fe4e0abe1029773cde03603b874a59d4545dd ←名前なしボリューム
ボリュームの削除【volume rm】
使用されていないボリュームを削除できます。
事前に利用しているコンテナを調べて削除しておきましょう
$ volume rm 【ボリューム名 or ボリュームID】
$ docker volume ls
DRIVER VOLUME NAME
c11f7d87b4b7ea1bcaf205dfc81fe4e0abe1029773cde03603b874a59d4545dd
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
32b611e04e18 basic-php-mysql_mysql "docker-entrypoint.s…" About a minute ago Up About a minute 33060/tcp, 0.0.0.0:3308->3306/tcp my_mysql
$ docker stop my_mysql ←コンテナ停止
$ docker rm my_mysql ←コンテナ削除
$ docker volume rm c11f7d87b4b7ea1bcaf205dfc81fe4e0abe1029773cde03603b874a59d4545dd ←ボリューム削除
コンテナの内外でのファイルコピー【docker cp】
docker cp [オプション] 転送元 転送先
※転送元・先の記述方法
・コンテナ外はパスそのまま
・コンテナ内は記述方法は 【コンテナ名 or コンテナID】:【パス】
例) 外→コンテナ内
$ docker cp test.log my_mysql:/mnt/docker/
例) コンテナ内→外
$ docker cp mysql:/mnt/docker/ test.log my
コメント