Docker Imageの作成

続いてイメージの作成について調べていく

公式ドキュメントの日本語化プロジェクトを見つけたので、それを参考に試してみようと思う Docker ドキュメント日本語化プロジェクト

アプリケーションのコンテナ化

アプリを入手

以下のコマンドでリポジトリがクローンされる

git clone https://github.com/docker/getting-started.git
Cloning into 'getting-started'...
remote: Enumerating objects: 987, done.
remote: Counting objects: 100% (13/13), done.
remote: Compressing objects: 100% (12/12), done.
remote: Total 987 (delta 6), reused 1 (delta 1), pack-reused 974 (from 2)
Receiving objects: 100% (987/987), 5.29 MiB | 6.25 MiB/s, done.
Resolving deltas: 100% (524/524), done.
Updating files: 100% (82/82), done.

された

コンテナのイメージを作成するにはDockerfileを使うらしい
このDockerfileに命令用スクリプトを書き込むとのこと
へー

さっそくDockerfileを作ってみる

cd ./getting-started/app

でカレントディレクトリを移動し、以下のコマンドで空ファイルを作成

touch Dockerfile

エディターで以下をDockerfileに書き込む

1. syntax=docker/dockerfile:1
FROM node:18-alpine
WORKDIR /app
COPY . .
RUN yarn install --production
CMD ["node", "src/index.js"]
EXPOSE 3000

1行目:Dockerfileで使用する構文のバージョン指定
2行目:Node.js v18の軽量版をベースにしていること
3行目:作業ディレクトリの指定
4行目:現在のディレクトリの中身を、コンテナの/appディレクトリにコピー
5行目:必要なNode.jsライブラリ(yarn)をインストール
6行目:コンテナ実行時のデフォルトコマンド。src/index.jsをNode.jsで実行するよう指定
7行目:コンテナが外部に対して3000ポートを使用することを設定

以下のコマンドでイメージを作成できるらしい

docker build -t getting-started .

できた

[+] Building 20.2s (11/11) FINISHED                                                                                                                          docker:default
 => [internal] load build definition from Dockerfile                                                                                                                   0.0s
 => => transferring dockerfile: 186B                                                                                                                                   0.0s 
 => resolve image config for docker-image://docker.io/docker/dockerfile:1                                                                                              1.7s 
 => CACHED docker-image://docker.io/docker/dockerfile:1@sha256:9857836c9ee4268391bb5b09f9f157f3c91bb15821bb77969642813b0d00518d                                        0.0s
 => [internal] load metadata for docker.io/library/node:18-alpine                                                                                                      2.0s 
 => [internal] load .dockerignore                                                                                                                                      0.0s
 => => transferring context: 2B                                                                                                                                        0.0s 
 => [1/4] FROM docker.io/library/node:18-alpine@sha256:8d6421d663b4c28fd3ebc498332f249011d118945588d0a35cb9bc4b8ca09d9e                                                5.8s 
 => => resolve docker.io/library/node:18-alpine@sha256:8d6421d663b4c28fd3ebc498332f249011d118945588d0a35cb9bc4b8ca09d9e                                                0.0s 
 => => sha256:1e5a4c89cee5c0826c540ab06d4b6b491c96eda01837f430bd47f0d26702d6e3 1.26MB / 1.26MB                                                                         0.4s
 => => sha256:8d6421d663b4c28fd3ebc498332f249011d118945588d0a35cb9bc4b8ca09d9e 7.67kB / 7.67kB                                                                         0.0s 
 => => sha256:929b04d7c782f04f615cf785488fed452b6569f87c73ff666ad553a7554f0006 1.72kB / 1.72kB                                                                         0.0s 
 => => sha256:ee77c6cd7c1886ecc802ad6cedef3a8ec1ea27d1fb96162bf03dd3710839b8da 6.18kB / 6.18kB                                                                         0.0s 
 => => sha256:f18232174bc91741fdf3da96d85011092101a032a93a388b79e99e69c2d5c870 3.64MB / 3.64MB                                                                         0.8s 
 => => sha256:dd71dde834b5c203d162902e6b8994cb2309ae049a0eabc4efea161b2b5a3d0e 40.01MB / 40.01MB                                                                       4.5s 
 => => sha256:25ff2da83641908f65c3a74d80409d6b1b62ccfaab220b9ea70b80df5a2e0549 446B / 446B                                                                             0.7s 
 => => extracting sha256:f18232174bc91741fdf3da96d85011092101a032a93a388b79e99e69c2d5c870                                                                              0.1s 
 => => extracting sha256:dd71dde834b5c203d162902e6b8994cb2309ae049a0eabc4efea161b2b5a3d0e                                                                              1.0s 
 => => extracting sha256:1e5a4c89cee5c0826c540ab06d4b6b491c96eda01837f430bd47f0d26702d6e3                                                                              0.0s 
 => => extracting sha256:25ff2da83641908f65c3a74d80409d6b1b62ccfaab220b9ea70b80df5a2e0549                                                                              0.0s 
 => [internal] load build context                                                                                                                                      0.2s 
 => => transferring context: 4.59MB                                                                                                                                    0.1s 
 => [2/4] WORKDIR /app                                                                                                                                                 0.6s 
 => [3/4] COPY . .                                                                                                                                                     0.1s 
 => [4/4] RUN yarn install --production                                                                                                                                9.2s 
 => exporting to image                                                                                                                                                 0.7s 
 => => exporting layers                                                                                                                                                0.6s 
 => => writing image sha256:d020344266d83fce1032f5326b22b6e48727892e95393f14d5a2e207c9f531a0                                                                           0.0s 
 => => naming to docker.io/library/getting-started  

イメージが作成されているか確かめる

 docker images
 REPOSITORY       TAG     IMAGE ID       CREATED         SIZE
getting-started  latest  d020344266d8   4 minutes ago   217MB

できてるっぽい

コンテナを起動してみる

docker run -dp 127.0.0.1:3000:3000 getting-started
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
414012854ff6 getting-started “docker-entrypoint.s…” 35 seconds ago Up 34 seconds 127.0.0.1:3000->3000/tcp cranky_faraday

起動している
以下を開くと用意されているアプリケーションが動作しているか確認できる

http://localhost:3000/

おお
動いた

次は続きを調べていきたいと思う

コメント