Edited at

よく使うDockerコマンド

More than 3 years have passed since last update.

はじめてDockerを触った時にサブコマンドやオプションで混乱しましたが、いくつかのパターンを覚えておくと応用が効きそうなのでまとめてみました。

上から順にコマンドが試せるように構成しています。


コンテナの作成とコマンドの実行


コンテナをつくってログインする: docker run -it

オプション-itをつけることでコンテナ内で操作できます。また--name [好きな名前]をつけることで、dockerコマンドのコンテナの指定にここでつけた名前が使えます。

docker@default:~$ docker run -it --name ubuntu ubuntu:14.04 /bin/bash

root@e2f601749c4f:/# hostname
e2f601749c4f


コンテナをバックグランドで動作させる: docker run -d

オプション-dをつけることでバックグランドで動作します。また-p 8080:80とすることで、ホストのポート8080がコンテナのポート80にマップされます。

docker@default:~$ docker run -d --name nginx -p 8080:80 nginx

3d3549e9cf59456ffbbcefd26c2c504e5318c76c793f462eb24265e26b80cf1b


コンテナを環境変数で設定する: docker run -e

-e [変数名]=[値]でコンテナに環境変数を設定できます。下記の例はMySQLの管理者パスワードを環境変数経由で設定しています。

docker@default:~$ docker run -d --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql

60e3bce8d7676d345400462c2d396d23a85d9c8b0c9fb135bd6ff505f8537039


コンテナ同士を連携させる: docker run --link

--link [コンテナ名]:[エイリアス]でコンテナを連携させることができます。下の例はMySQLコンテナとWordpressコンテナを連携させています。

docker@default:~$ docker run -d --name wordpress -p 8000:80 --link mysql:mysql wordpress

6fc9713647d10276b740c833e430463a5958645eb6c55d7acb86235d686dd422


動作中のコンテナでコマンドを実行: docker exec

コンテナ内部の状況を確認したい時に使います。

docker@default:~$ docker exec wordpress cat /var/www/html/wp-config.php

<?php
/**
* The base configuration for WordPress
*
* The wp-config.php creation script uses this file during the
* installation. You don't have to use the web site, you can
* copy this file to "wp-config.php" and fill in the values.
*
* This file contains the following configurations:
...

docker@default:~$ docker exec wordpress ps alx
F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND
4 0 1 0 20 0 177768 18820 - Ss ? 0:00 apache2 -DFOREGROUND
5 33 170 1 20 0 177856 11060 ? S ? 0:00 apache2 -DFOREGROUND
5 33 171 1 20 0 272468 35880 ? S ? 0:00 apache2 -DFOREGROUND
5 33 172 1 20 0 272468 36496 ? S ? 0:02 apache2 -DFOREGROUND
5 33 173 1 20 0 263588 28128 ? S ? 0:00 apache2 -DFOREGROUND
5 33 174 1 20 0 178528 11828 ? S ? 0:00 apache2 -DFOREGROUND
5 33 175 1 20 0 178032 7856 ? S ? 0:00 apache2 -DFOREGROUND
5 33 177 1 20 0 177800 6408 ? S ? 0:00 apache2 -DFOREGROUND
5 33 187 1 20 0 177800 6408 ? S ? 0:00 apache2 -DFOREGROUND
4 0 284 0 20 0 9080 808 - Rs ? 0:00 ps alx


コンテナの確認、削除


動いているコンテナの表示: docker ps

docker@default:~$ docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6fc9713647d1 wordpress "/entrypoint.sh apach" 9 minutes ago Up 9 minutes 0.0.0.0:8000->80/tcp wordpress
60e3bce8d767 mysql "/entrypoint.sh mysql" 21 minutes ago Up 21 minutes 0.0.0.0:3306->3306/tcp mysql
3d3549e9cf59 nginx "nginx -g 'daemon off" 23 minutes ago Up 23 minutes 443/tcp, 0.0.0.0:8080->80/tcp nginx


止まっているコンテナも含めて表示: docker ps -a

docker@default:~$ docker ps -a

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6fc9713647d1 wordpress "/entrypoint.sh apach" 10 minutes ago Up 9 minutes 0.0.0.0:8000->80/tcp wordpress
60e3bce8d767 mysql "/entrypoint.sh mysql" 22 minutes ago Up 22 minutes 0.0.0.0:3306->3306/tcp mysql
3d3549e9cf59 nginx "nginx -g 'daemon off" 23 minutes ago Up 23 minutes 443/tcp, 0.0.0.0:8080->80/tcp nginx
46c941225d2e ubuntu:14.04 "/bin/bash" 25 minutes ago Exited (0) 25 minutes ago


コンテナの削除: docker rm

docker@default:~$ docker rm ubuntu

ubuntu


停止中のコンテナの全削除: docker rm `docker ps -a -q`

Dockerで作業を行っているといつの間にか、停止されているコンテナが溜まってくるので、下記コマンドで一度に削除します。

docker@default:~$ docker rm `docker ps -a -q`


コンテナイメージとDockerfile


コンテナイメージの取得: docker pull

Dockerhubからコンテナイメージを取得します。[イメージ名]:[タグ]を指定します。どのようなタグがあるかはDocker Hubで調べられます。Redmineの例

docker@default:~$ docker pull redmine:latest

Using default tag: latest
latest: Pulling from library/redmine
afab6336a0ca: Pull complete
4f3f25af77e7: Pull complete
ff12c96c66ef: Pull complete
...


コンテナイメージの確認: docker images

docker@default:~$ docker images

REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
wordpress latest 2650eb09e142 5 days ago 512 MB
nginx latest 81415e35fc6c 5 days ago 132.8 MB
ubuntu 14.04 e9ae3c220b23 6 days ago 187.9 MB
mysql latest fb86ef4dd8b7 2 weeks ago 359.8 MB
redmine latest ad6e9e5c2313 5 days ago 448.5 MB


コンテナイメージの削除: docker rmi

docker@default:~$ docker rmi redmine:latest

Untagged: redmine:latest
Deleted: ad6e9e5c2313ae8749db962c5dcd9aefbbad90dd2aa54aee9cdd30173d8da757
Deleted: 1c515065d99c5d372411bfa37438929de3eaaef610812d0684a8bc5b34c4b1a6
...


Dockerfileのビルド: docker build

Dockerfileを準備します。下記の内容でDockerfileというファイル名で保存します。

FROM nginx

WORKDIR /usr/share/nginx/html
RUN echo "<h1>hello world</h1>" > index.html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

ビルドする際に、Docker Registryに登録することを考えて、-t [ユーザ名]/[イメージの名前]:[バージョン]でタグをつけます。

docker@default:~$ docker build -t noralife/hello:latest .

Sending build context to Docker daemon 2.048 kB
Step 1 : FROM nginx
---> 81415e35fc6c
Step 2 : WORKDIR /usr/share/nginx/html
---> e286ba07068e
Step 3 : RUN echo "<h1>hello world</h1>" > index.html
---> 899a91f6c531
Step 4 : EXPOSE 80
---> 2922ac441f75
Step 5 : CMD nginx -g daemon off;
---> d4e55a0e5168
Successfully built d4e55a0e5168


Docker Registryへの登録: docker login, docker push

Docker Hubへの登録にはアカウントの作成が必要です。

docker@default:~$ docker login

Username:
Password:
Email:
docker@default:~$ docker push noralife/hello:latest
The push refers to a repository [docker.io/noralife/hello] (len: 1)
d4e55a0e5168: Pushed
2922ac441f75: Pushing 1.024 kB
...