コンテナからイメージを作成する
コンテナからイメージを作成するために、docker commit コマンドを使用します。
構文
$ docker commit [作成元コンテナ名] [作成するイメージ名]例
$ docker commit myapache myapache_img
sha256:f0671817c370e22ce292d29e35d4e69b79015fdeddda1adaa475e03d0d60caf3
$ docker images
REPOSITORY                     TAG       IMAGE ID       CREATED         SIZE
myapache_img                   latest    f0671817c370   5 seconds ago   131MBDockerfileからイメージ・コンテナを作成する
1.Dockerfileを作成する
FROM httpd
COPY index.html /usr/local/apache2/htdocs/| Dockerfileコマンド | 説明 | 
| FROM | イメージの作成元となるイメージを指定する。 Dockerfileの1行目は必ずFROMコマンドで開始しなければならない。  | 
| COPY | ローカルのファイルをコピーする。 (コピーした状態でイメージが作成される)  | 
| ADD | COPYに加え、tar.gzファイルを展開してくれる。 | 
| RUN | ビルド時に指定したコマンドを実行する。 | 
| CMD | コンテナ起動時に指定したコマンドを実行する。 | 
| ENV | 環境変数を定義する。 | 
| WORKDIR | COPY/ADD/RUN/CMDの際の作業ディレクトリを指定する。 | 
Dockerfile作成の注意点
Dockerfileのコマンドは128個まで定義できる。
Dockerfileをビルドするときに、各コマンドごとに中間イメージが作成されるため、1つのコマンドで複数の仕事ができる方が、余計な中間イメージが作成されずに済む。
Dockerfile作成のメリット
Dockerfileを作成することは、Infrastracture as Codeを実践することになる。
つまり、手動で構築する必要がなくなるということである。
また、インフラのOS層以上の部分をコード化することで、OS層以上の部分の構築が容易になる。
ポータビリティにも優れ、Dockerfileを共有することで、Dockerを実行できるあらゆる環境で瞬時にインフラを構築できるようになる。
2.Dockerfileをビルドしてイメージを作成する
Dockerfileをビルドするには、docker buiildコマンドを使用します。
構文
$ docker build -t [作成するイメージ名] [作業フォルダのパス][作成するイメージ名]は任意です。httpd や mysql に相当する部分です。
[作業フォルダのパス]ですが、docker build コマンド実行前にDockerfileのあるディレクトリに移動していれば、「.」のカレントディレクトリを指定するケースがほとんどでしょう。
例
$ cd /path/to/Dockerfile
$ docker build -t myapache3 .
[+] Building 0.2s (7/7) FINISHED                                                                                                                     
 => [internal] load build definition from Dockerfile                                                                                            0.0s
 => => transferring dockerfile: 95B                                                                                                             0.0s
 => [internal] load .dockerignore                                                                                                               0.0s
 => => transferring context: 2B                                                                                                                 0.0s
 => [internal] load metadata for docker.io/library/httpd:latest                                                                                 0.0s
 => [internal] load build context                                                                                                               0.0s
 => => transferring context: 58B                                                                                                                0.0s
 => [1/2] FROM docker.io/library/httpd                                                                                                          0.0s
 => [2/2] COPY index.html /usr/local/apache2/htdocs                                                                                             0.0s
 => exporting to image                                                                                                                          0.0s
 => => exporting layers                                                                                                                         0.0s
 => => writing image sha256:4fa1a570c2083ec4dffc260238fe5b027fb2efefa888bea078aa103aac070d0c                                                    0.0s
 => => naming to docker.io/library/myapache3                                                                                                    0.0s
Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them
$ docker image ls
REPOSITORY                     TAG       IMAGE ID       CREATED          SIZE
myapache3                      latest    4fa1a570c208   15 seconds ago   131MB| オプション | 説明 | 
| -t | イメージ名およびタグ名を指定する。 | 
Dockerイメージのイメージ名・タグ名
docker buildでは-tオプションでイメージ名とタグ名を指定できます。
このとき、イメージ名とタグ名はdocker imagesコマンドで確認すると、次のように表示されます。
$ docker build -t taro/apache2:first .
$ docker images
REPOSITORY     TAG       IMAGE ID       CREATED         SIZE
taro/apache2   first     3d89baebd841   6 seconds ago   138MB作成するイメージ名・タグ名の一般的な命名規約を紹介します。
イメージ名について
- Docker公式イメージは httpd のように、イメージ名単体を使用する。
 - 公式以外のイメージは noricgeographic/httpd のように、ユーザー名/イメージ名 を推奨する。
 
タグ名について
- 1.0 などのバージョンを指定するものである。
 - 省略した場合は latest が自動で付与される。
 
3.ビルドしたイメージからコンテナを起動する
Dockerfileをビルドして作成されたイメージは、通常のイメージ同様のdocker runコマンドによりコンテナを起動できます。
$ docker image ls
REPOSITORY                     TAG       IMAGE ID       CREATED          SIZE
myapache3                      latest    4fa1a570c208   15 seconds ago   131MB
$ docker run --name myapache3 -dit -p 8091:80 myapache3
ec1410c4ddf451024d0389ced200df52fead16bef097fab6a50e11966f710dda
$ docker ps
CONTAINER ID   IMAGE          COMMAND              CREATED          STATUS          PORTS                                   NAMES
ec1410c4ddf4   myapache3      "httpd-foreground"   5 seconds ago    Up 2 seconds    0.0.0.0:8091->80/tcp, :::8091->80/tcp   myapache3