人生に意味は求めない。それよりもDockerのコマンドの意味を理解する方が重要です。@It_is_Rです。
Dockerにはたくさんのコマンドがありますが、まずはよく使うコマンドを覚えていきましょう。
今回はDockerを使用する上でよく使うコマンドとそのオプション、使い方を紹介していきます。
docker ps (コンテナの一覧を表示)
docker ps
コマンドはコンテナの一覧を表示するものです。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e76a51449729 ubuntu "/bin/bash" 8 minutes ago Up 7 minutes serene_bose
よく使うオプションとして、-a
オプションがあります。
これは停止しているコンテナを含めて全て表示してくれるものです。
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e76a51449729 ubuntu "/bin/bash" 9 minutes ago Up 9 minutes serene_bose
8ceb00325b64 wordpress "docker-entrypoint.s…" 6 hours ago Exited (1) 27 minutes ago wp
docker pull (イメージを取得)
docker pull
は、Docker Hubからイメージを取得するコマンドです。
例えば、nginxのイメージを取得したい場合は、以下のようにします。
$ docker pull nginx
また、-a
オプションを使うことで、全てのタグのイメージを取得することができます。
$ docker pull -a nginx
1-alpine-perl: Pulling from library/nginx
4fe2ade4980c: Pull complete
c1a1ccb0d03f: Pull complete
de8a39b37a7d: Pull complete
db7288f3bbb0: Pull complete
Digest: sha256:9c632b0423d3ceba7e94a6744a127b694caacb6117238aff033ab6bdc88c1fae
1-alpine: Pulling from library/nginx
4fe2ade4980c: Already exists
c3f09dfaf47d: Pull complete
83283d0e9bb9: Pull complete
e2e530da9538: Pull complete
Digest: sha256:ae5da813f8ad7fa785d7668f0b018ecc8c3a87331527a61d83b3b5e816a0f03c
〜省略〜
docker run (新規コンテナを実行)
docker run
コマンドは、新規コンテナを実行する命令です。
イメージの取得、コンテナの作成、コンテナの立ち上げまで、一回のコマンドで行なうことができます。
よく使われるオプションとして、
-e
環境変数の指定-d
デタッチモード(コンテナをバックグラウンドで起動)-i
コンテナの標準入力(STDIN)にアタッチする-t
擬似ターミナルを割り当てる-v
ボリュームをマウント--name
コンテナに名前をつける--net
コンテナをネットワークに接続する
があります。
この中でも、-i
と-t
オプションはセットで使われることが多く、-it
というふうに使われます。
言葉で説明されても、よく分からないかも知れません。
そこで、実際にやってみましょう。
今回は実験として、MySQLを実行してみます。
例えば以下のコマンドを実行してみてください。
$ docker run -it -e MYSQL_ROOT_PASSWORD=p4ssw0rd mysql
Initializing database
2018-11-01T14:15:36.979689Z 0 [Warning] [MY-011070] [Server] 'Disabling symbolic links using --skip-symbolic-links (or equivalent) is the default. Consider not using this option as it' is deprecated and will be removed in a future release.
〜省略〜
ターミナルに入力ができなくなりましたね。
この状態でコマンドを実行しようと思ったら、ターミナルをもう一つ開く必要があります。
もしログを見ながらコマンドを実行したい場合はこのままでいいのですが、そうでない場合はちょっと大変です。
解決方法は後ほど説明しますので、まずはこのコマンドについて解説していきます。
-e
コマンドは環境変数を指定するオプションです。
MySQLにはMYSQL_ROOT_PASSWORDが必須となりますので、MYSQL_ROOT_PASSWORD=p4ssw0rd
を指定します。
さらに-it
というオプションがついています。これは-i
と-t
を組み合わせたものです。
そのおかげで入力を受け付けてくれるので、Ctrl + p + qを押すと、コンテナを起動したまま接続を解除することができます。
もしも-it
オプションをつけ忘れてしまった場合は、Ctrl + \ (¥)、Ctrl + cなどで終了する必要があります。
またターミナルにログが表示されてしまい、コマンドを入力できない状態を解決してくれるのが、-d
オプションです。
これはコンテナをバックグラウンドで起動するものです。
では、先ほどのコマンドに-d
をつけてみましょう。
$ docker run -d -e MYSQL_ROOT_PASSWORD=p4ssw0rd mysql
41840785b8d64622d924809e0fe144762c342210aa10fec1287cd1c798aefa46
今回はコマンド入力ができるようになっています。
-v
は指定したのディレクトリをコンテナにマウントするオプションです。
nginxを使う場合を例に見ていきましょう。
以下のようなコマンドを入力するとします。
$ docker run -d -v `pwd`/mydata:/usr/share/nginx/html/ -p 8000:80 nginx
-v `pwd`/mydata:/usr/share/nginx/html/
の部分ですが、これは「-v ホスト側:コンテナ側」というふうになっています。
簡単にいえば、現在の作業ディレクトリの「mydata」フォルダと、nginxの中の/usr/share/nginx/にある「html」フォルダを繋ぐということになります。
このコマンドを実行すると、現在の作業ディレクトリに「mydata」フォルダが作成され、この中にindex.htmlを作ることで、それがlocalhost:8000にも反映されます。
--name
はコンテナに名前をつけるためのオプションです。
例えば以下のようにすると、testmysqlという名前のコンテナになります。
$ docker run -d -e MYSQL_ROOT_PASSWORD=p4ssw0rd --name testmysql mysql
7b9f4812009f81e62e392a66a58ef7a31b9329db98ceba5d36b5c66b630664e1
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7b9f4812009f mysql "docker-entrypoint.s…" 26 seconds ago Up 24 seconds 3306/tcp, 33060/tcp testmysql
--net
はコンテナをネットワークに接続するオプションです。
ネットワークとは、例えばMySQLコンテナとWordPressコンテナを結びつけたい場合などに使用します。
$ docker network create wp_network
$ docker run --name mysql --net wp_network -e MYSQL_ROOT_PASSWORD=p4ssw0rd -d mysql:5.7
$ docker run --name wp --net wp_network -e WORDPRESS_DB_PASSWORD=p4ssw0rd -d -p 8000:80 wordpress
上の例ではdocker network create
でwp_networkというネットワークを作成した後、MySQLとWordPressのコンテナの部分で--net
オプションを使ってwp_networkに接続しています。
docker images (イメージの一覧を表示)
docker images
は、現在手元にあるイメージの一覧を表示します。
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql latest 2dd01afbe8df 7 days ago 485MB
wordpress latest 9451d745d1dd 2 weeks ago 408MB
-a
オプションをつけることげ、<none>:<none>を含む全てのイメージを表示できます。
また、指定したものと一致したイメージのみ表示することもできます。
$ docker images mysql:latest
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql latest 2dd01afbe8df 7 days ago 485MB
docker image prune (使用していないイメージの削除)
docker image prune
は使用していないイメージを削除するコマンドです。
コンテナから参照されていないイメージを全て削除したい場合は-a
オプションを使用します。
$ docker image prune -a
WARNING! This will remove all images without at least one container associated to them.
Are you sure you want to continue? [y/N] y
docker container prune (停止しているコンテナを削除)
docker container prune
は停止しているコンテナを削除します。
$ docker container prune
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
Deleted Containers:
8ceb00325b64ec15780eacf6e067402f4c0a389e28d72fd52d013ec5a2213cef
8b70ca7b7815a0b54c403ed5559e988500deb476fa91958fd013bb16755b2015
Total reclaimed space: 0B
docker system prune (停止しているコンテナ、イメージ、ネットワークなどの削除)
docker system pruneコマンドは、停止しているコンテナ、イメージ、ネットワークなどを削除します。
オプションをつけない場合、イメージは削除されないようです。
$ docker system prune
WARNING! This will remove:
- all stopped containers
- all networks not used by at least one container
- all dangling images
- all build cache
Are you sure you want to continue? [y/N] y
Deleted Containers:
8542cb695946d458c511d3a85a7522e24a4390d227e71bc6c8ae6f634b8f59d4
470f93bfe92441ce1e9a6c4c023b412a9d35f1f10b59a5578e1e28f787c5ff04
Deleted Networks:
wp_network
Total reclaimed space: 0B
また-a
オプションを使うことで、使用していないイメージも含めて削除することができます。
$ docker system prune -a
WARNING! This will remove:
- all stopped containers
- all networks not used by at least one container
- all images without at least one container associated to them
- all build cache
Are you sure you want to continue? [y/N] y
Deleted Containers:
d534c74144b8653e05b56ae4520cd143d5b6eb8f51382d78935c49dcb5b91758
152ad91c87a3108c98bab11c728d7db3d2f42a71f063acaae71296e5dfdee484
Deleted Networks:
wp_network
Deleted Images:
untagged: wordpress:latest
docker stop (起動中のコンテナを停止)
docker stop
コマンドは、起動中のコンテナを停止するものです。
停止したいコンテナの名前、もしくはコンテナIDを入力します。
$ docker stop 8ceb00325b64
8ceb00325b64
docker start (停止しているコンテナを開始)
docker start
コマンドは、停止しているコンテナを開始します。
開始したいコンテナの名前、もしくはコンテナIDを入力します。
$ docker start 8ceb00325b64
8ceb00325b64
docker attach (起動中のコンテナにアタッチ)
docker attach
コマンドは、起動中のコンテナにアタッチするものです。
では例を見ていきましょう。
まずはubuntuを走らせます。
$ docker run -it ubuntu
Unable to find image 'ubuntu:latest' locally
latest: Pulling from library/ubuntu
473ede7ed136: Pull complete
c46b5fa4d940: Pull complete
93ae3df89c92: Pull complete
6b1eed27cade: Pull complete
Digest: sha256:29934af957c53004d7fb6340139880d23fb1952505a15d69a03af0d1418878cb
Status: Downloaded newer image for ubuntu:latest
ubuntuが起動しましたので、Ctrl + p + qでいったん接続を解除します。
では、接続解除したubuntuに再び接続(アタッチ)してみましょう。docker attach
の後に、コンテナ名かコンテナIDを入力します。
コンテナ名やコンテナIDはdocker ps
コマンドで確認できます。
docker attach e76a51449729
これでubuntuにアタッチできます。
まとめ
Dockerのコマンドはたくさんありますが、今回はその中でもよく使うものをまとめてみました。
今回紹介したコマンドだけでも、便利にDockerを使うことができると思います。
これだけでも覚えるのは大変だと思います。まだまだコマンドはたくさんあるので、人生の意味を考えている暇はないですね。