149
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

updated at

よく使うDockerコマンド

はじめて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
...
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
149
Help us understand the problem. What are the problem?