Dockerfileを利用してイメージを作成し、コンテナを起動するまでの流れを説明します。
関連ページ
Docker入門 [Hello World] コマンドの基本
上記関連ページではdocker pullでインストールしたubuntuイメージからそのままコンテナを作成しましたが、Dockerfileを利用するとコンテナ内で実行するコマンド等を含めたイメージの設計書のようなものを作ることができます。
Dockerfileからイメージの作成、そしてコンテナを作成・起動する流れは下記のイラストのようになります。
まずは「Dockerfile」を配置するディレクトリを作成し、拡張子の無い「Dockerfile」という名前のファイルを作成します。
1 2 3 |
mkdir test cd test/ vi Dockerfile |
NginxおよびCurl、VimをインストールしたUbuntuのイメージを作成するための「Dockerfile」を下記のように記述します。FROMやRUNを一般的に「命令」と呼びます。#はコメントです。
1 2 3 4 5 6 7 8 9 10 |
#ベースイメージ FROM ubuntu:latest LABEL maintainer="Hoge Tarou <hoge@hoge.com>" RUN apt-get update && apt-get install -y nginx curl vim EXPOSE 80 ENTRYPOINT ["nginx", "-g", "daemon off;"] |
FROM
作成するイメージの元となるイメージ(ベースイメージ)を指定します。
LABEL
Dockerfileの作成者などのメタデータを記述します。以前は「MAINETAINER」に記述していました。
RUN
イメージの作成におけるコミットとしてのコマンドを指定します。つまりアプリ等をインストールするためのコマンドを記述します。今回はNginxおよびCurl、Vimをインストールしています。
EXPOSE
外部に開放するポート番号です。80番ポートを開けることを明示しています。
ENTRYPOINT
コンテナ作成時に実行されるコマンドを記述します。主にデーモン起動のコマンドを記述します。Dockerfile内にはENTRYPOINT命令は1回のみ記述できます。
Dockerfileの他の命令や記述方法は下記等のページをご参照下さい。
イメージの作成
Dockerfileを記述したらイメージを作成します。「docker build」コマンドを利用します。
1 |
docker build -t myimage:1.0 . |
myimageは作成するイメージ名(REPOSITORY)です。1.0はそれに伴うタグ名(TAG)で指定しない場合は自動的にlatestが付与されます。最後の「.」はDockerfileが配置されているディレクトリです。今回は同ディレクトリにてコマンドを実行しているため「.」のみとなっています。
「docker images」でイメージが作成できたか確認します。
1 2 3 |
REPOSITORY TAG IMAGE ID CREATED SIZE myimage 1.0 9ec39061343a 9 seconds ago 236MB ubuntu latest 94e814e2efa8 2 weeks ago 88.9MB |
myimageという名前で指定通りにTAGが1.0のイメージが作成されました。イメージが2つ生成されているのが確認できますが、ubuntuはベースイメージです。
コンテナを作成・起動させます。
1 |
docker run -p 80:80 -d 9ec39061343a |
「docker ps」で起動しているコンテナを表示させます。
1 2 |
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c8488eda78b3 9ec39061343a "nginx -g 'daemon of…" 9 seconds ago Up 8 seconds 0.0.0.0:80->80/tcp objective_lalande |
コンテナに入ります。
1 |
docker exec -it c8488eda78b3 /bin/bash |
Vimがインストールされていることを確認。
1 2 3 4 |
root@c8488eda78b3:/# vim --version VIM - Vi IMproved 8.0 (2016 Sep 12, compiled Apr 10 2018 21:31:58) Included patches: 1-1453 〜省略 |
CurlとNginxの確認。
1 2 3 4 5 6 |
root@c8488eda78b3:/# curl localhost:80 <!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> 〜省略 |