Dockerコンテナを作成するための元となるテンプレート
Dockerfile を作成して設定する
Dockerイメージを元に複数作成して、システム、アプリケーションを構成・実行されます。
Docker イメージはDocker Hub で検索できます。
※ユーザ登録はしておいた方が良いです
利用したいイメージやバージョンを「イメージ名:バージョン」でダウンロードできます。
$ docker image pull alpine:latest
latest は文字通り最新版なので、明示的にバージョンを指定する場合は、Docker Hub に記載されているバージョンを利用します。
Dockerイメージを作成する前に、Dockerコンテナ内で動作させるシェルスクリプトにサンプルを作成してみます。
#!/bin/sh
echo "Hello Shell Script"
次にDockerイメージを作成しますが、一般的に Dockerfile ファイルを利用しして設定します。
※今回は「ubuntu:18.04」イメージを利用します。
FROM ubuntu:18.04
COPY hello.sh /usr/local/bin
RUN chmod +x /usr/local/bin/hello.sh
CMD ["hello.sh"]
Dockerfile は DSL(ドメイン固有言語)を利用して、イメージを作成します。
その際、でてくるのがインストラクションです。
Dockerイメージ(OS)を指定(ビルド前)
ホスト側(Mac)から、Dockerコンテナの指定パスにコピーします。
上記はイメージビルド前に、ホスト側の「hello.sh」を「/usr/local/bin/」にコピーします。
類似的にリモート追加や自動解凍できる ADD インストラクションもある。
Dockerコンテナ内で、指定のコマンドを実行します。
上記は、コンテナにコピーした「/usr/local/bin/hello.sh」に実行権限を与えます。
完成したDockerイメージに対して、コマンドを実行します。
「,」で区切って引数を与えることもできます。
RUN との違いは、CMDはイメージビルド後に実行します。
hello:latest とラベルをつけて Dockerイメージをビルドします。
$ docker image build -t hello:latest .
引数はイメージ名と Dockerfile の配置したパスを指定します。
$ docker image build -t イメージ名:タグ名 Dockerfile配置パス
タグ名は、一般的にバージョンとして利用されます。
$ docker container run hello:latest
Hello Shell Script
「hello:latest」コンテナが起動後に、shell.sh が実行されました。
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello latest 05e3eb5ff03b 5 minutes ago 64.2MB
...
リポジトリが「hello」、タグ「latest」、イメージID「05e3eb5ff03b」で作成されています。
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
62faba8c4477 hello:latest "hello.sh" 8 minutes ago Exited (0) 8 minutes ago admiring
hello:latest コンテナが、コンテナID「62faba8c4477」で作成されていることがわかります。
実際に運用する場合、Github のように namespace や バージョンをつける必要がでてきます。
例えば、イメージ名「hello」は、namespace(空間名)をつけて「sample/hello」、 バージョンは「:」で区切って、「hello:latest」、「hello:0.1.0」のような書き方ができます。
$ docker image tag hello:latest example/hello:latest
$ docker image tag hello:latest example/hello:0.1.0
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
example/hello 0.1.0 ca00cb953947 2 hours ago 64.2MB
example/hello latest ca00cb953947 2 hours ago 64.2MB
...
Docker を利用しているとイメージやコンテナを作りすぎて、パソコンの容量を圧迫しがちです。
また、イメージやコンテナリストが大量になり確認もしづらくなるので、リスト検索して不要なものは削除しましょう。
$ docker container list
$ docker rm コンテナID
$ docker image list
//または
$ docker images
$ docker rmi イメージID