続いてイメージの作成について調べていく
公式ドキュメントの日本語化プロジェクトを見つけたので、それを参考に試してみようと思う 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/
おお
動いた
次は続きを調べていきたいと思う
コメント