1. HOME»
  2. プログラミング・Web»
  3. Docker»
  4. Dockerでよく使うコマンドとオプション、その使い方を徹底解説!

Dockerでよく使うコマンドとオプション、その使い方を徹底解説!

人生に意味は求めない。それよりもDockerのコマンドの意味を理解する方が重要です。@It_is_Rです。

Dockerにはたくさんのコマンドがありますが、まずはよく使うコマンドを覚えていきましょう。
今回はDockerを使用する上でよく使うコマンドとそのオプション、使い方を紹介していきます。

目次
  1. docker ps (コンテナの一覧を表示)
  2. docker pull (イメージを取得)
  3. docker run (新規コンテナを実行)
  4. docker images (イメージの一覧を表示)
  5. docker image prune (使用していないイメージの削除)
  6. docker container prune (停止しているコンテナを削除)
  7. docker system prune (停止しているコンテナ、イメージ、ネットワークなどの削除)
  8. docker stop (起動中のコンテナを停止)
  9. docker start (停止しているコンテナを開始)
  10. docker attach (起動中のコンテナにアタッチ)
  11. まとめ

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を使うことができると思います。
これだけでも覚えるのは大変だと思います。まだまだコマンドはたくさんあるので、人生の意味を考えている暇はないですね。

オリジナルゲーム.com