ザックリとDockerの使用方法(コンテナの実行関係、イメージの作成)についてまとめました。これを読めば一通りはわかるよ!
1.Dockerって何?
1.1.コンテナ
仮想マシンと考えてください。Dockerではコンテナの上でイメージを実行します。
1.2.イメージ
OSで実行するHDDのイメージと考えてみましょう。
1.3.コンテナとイメージを使うことで何が良いの?
結局、なんでDockerを使うのか?ですが、次のようなメリットがあります。以下では、それをDockerを触って理解していくことにしてみます。
- いろいろなタイプのイメージを作成・管理できる。
- イメージを共有ができ、同じ処理を様々なコンテナ上で実行できる。
つまり、複数の同じ構成を持ったサーバーマシンをすぐに用意できることができることがDockerのメリットです。
2.Dockerのコマンドを覚えよう。
まずはDockerの実行してみましょう!
2.1.準備インストール
皆さんの手持ちの環境で一番簡単に動かせると思うので、Docker for Windowsを使っていくことにしてみます。

Dockerにサインインしておきます。
2.2.Run(コンテナの実行)
何はともあれ、コンテナを実行したいと思います。
nginxというWebサーバーのイメージを起動してみましょう。
以下のコマンドで実行することができます。
> docker run nginx
ただ、nginxはWebサーバーですので80番ポートを使用します。ですが、80番ポートはすでに使用されている場合が多いと思います。コンテナの80番ポートは、実機の5000番ポート上にポートを転送して実行してみましょう。(-p オプションを使用します。)
>docker run -p 5000:80 nginx
Unable to find image 'nginx:latest' locally
latest: Pulling from library/nginx
68ced04f60ab: Pull complete 28252775b295: Pull complete a616aa3b0bf2: Pull complete Digest: sha256:2539d4344dd18e1df02be842ffc435f8e1f699cfc55516e2cf2cb16b7a9aea0b
Status: Downloaded newer image for nginx:latest
これで http://localhost:5000/にアクセスしてみましょう。
nginxが起動していることがわかりました。

Tips
今回は起動後、nginxサーバーをフォアグランドで実行し続けるイメージですので、コンテナは実行したままになります。イメージによっては起動後して処理を終えると、コンテナが終了してしまう場合もあります。コンテナの実行を維持したい場合は、
docker run -itd イメージ名 /bin/bash
を試してみましょう。
2.3.実行中のコンテナの確認(PS)
次にどんなコンテナが実行されているか確認してみましょう。
> docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
aa8e7e1c8d67 nginx "nginx -g 'daemon of…" 39 minutes ago Up 39 minutes 0.0.0.0:5000->80/tcp funny_dijkstra
コンテナIDにaa8e7e1c8d67(以降 aa)でnginxのコンテナが動作しているのがわかります。
2.4.実行中のコンテナで、コマンドの実行
実行中のコンテナでコマンドを実行してみます。
そのためにはexecを使います。また、実行先のコンテナを指定する必要があります。
>docker exec -it (コンテナ) コマンド
コンテナ名は途中で省略してもよいです。
>docker exec -it aa ls
bin dev home lib64 mnt proc run srv tmp var
boot etc lib media opt root sbin sys usr
また、以下のようにすれば、exitまでの期間、ターミナルを操作できますね。
>docker exec -it aa /bin/bash
コンテナのシェルの中でnginxの設定ファイル(/etc/nginx/conf.d/default.conf)の中を見てみましょう。dockerは最小限しかインストールしないものなので、viが入っていません。catを使う必要がありますね。
root@aa8e7e1c8d67:cat /etc/nginx/conf.d/default.conf
server {
listen 80;
server_name localhost;
...
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
...
}
なるほど、__/usr/share/nginx/html__がコンテンツ置き場のようですね。
最後はexitしてシェルを抜けます。
>....(いろいろなコマンド操作)
>exit
これで大体の操作の感じをつかめたのではないでしょうか。
3.コンテナイメージを作ろう
それでは自分用のコンテナイメージを作っていきましょう。
Dockerの利点は、様々なバリエーションのイメージを簡単に管理できることにあります。
DockerのイメージはDockerfileで作成しますので、まずはDockerfileを編集します。
3.1.Dockerfileの作り方
今回は次の操作をしてみましょう。Webサーバーに提供されるコンテンツです。
このイメージは、nginxが動作しているよ!と言いたいイメージとします。
以下のhello.htmlを表示でいるようにしたいと思います。
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<h1>Hello World</h1>
</body>
</html>
# nginxイメージを起点にする
FROM nginx
# vimのインストール
RUN apt-get update
RUN apt-get -y install vim
# hello.htmlファイルをコンテナに追加
ADD hello.html /usr/share/nginx/html
# コンテナ実行時にnginxを実行
CMD ["/usr/sbin/nginx", "-g", "daemon off;"]
よく使用するコマンドをまとめておきます。
コマンド | 意味 |
---|---|
FROM | 派生元のイメージを指定する |
RUN | イメージをビルドする際の処理 |
ADD | イメージに指定のファイルを追加する。アーカイブファイルの場合は展開する |
COPY | イメージに指定のファイルを追加する。 |
CMD | イメージを実行する際に実行するコマンド |
ENTORYPOINT | イメージ実行時に実行するコマンド、docker run時に上書き不可 |
Dockerfileができたら、ビルドをします。
空のディレクトリを作り、Dockerfileとhello.htmlにしてください。
>mkdir my_nginx_dockerfiles # 空ディレクトリを作り
>copy Dockerfile my_nginx_dockerfiles # Dockerfileと
>copy hello.html my_nginx_dockerfiles # 今回イメージに追加するファイルだけを入れます。
>cd my_nginx_dockerfiles # ディレクトリに移動します
>docker build -t my_nginx:0.1 . # ビルドです
Sending build context to Docker daemon 3.072kB
...
Successfully built 1e53c2c84fba
Successfully tagged my_nginx:0.1
SECURITY WARNING: You are building a Docker image from Windows against a non-Windows Docker host. All files and directories added to build context will have '-rwxr-xr-x' permissions. It is recommended to double check and reset permissions for sensitive files and directories.
最後にパーミッション関係で指摘がありますが、成功ですね。image listコマンドでイメージができたか確認します。
>docker image list
REPOSITORY TAG IMAGE ID CREATED SIZE
my_nginx 0.1 1e53c2c84fba 7 minutes ago 178MB
nginx latest 6678c7c2e56c 10 days ago 127MB
さぁ、さっそく実行してみましょう。
>docker run -p 5000:80 my_nginx:0.1
追加したファイル(http://localhost:5000/hello.html)にアクセスしてみましょう。

カスタムイメージの完成です!
4.コンテナやイメージを管理しよう。
4.1. Push / Pull
Dockerではイメージを共有することができます。非常に素晴らしい機能です。
Pull イメージを取得します。
> docker pull tensorflow/tensorflow
4.1. 不要コンテナ、イメージの削除
コンテナやイメージを管理しましょう。
コンテナはdocker psコマンドで、イメージはdocker image listコマンドで一覧できます。
Exitされたコンテナは不要ですので、rmで削除することができます。
また、同様にカスタムイメージを作り終わったので、nginxも不要です。