はじめて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
...