Dockerfileを学ぶ #2
環境
WSLバージョン
WSL バージョン: 2.3.24.0
カーネル バージョン: 5.15.153.1-2
WSLg バージョン: 1.0.65
MSRDC バージョン: 1.2.5620
Direct3D バージョン: 1.611.1-81528511
DXCore バージョン: 10.0.26100.1-240331-1435.ge-release
Windows バージョン: 10.0.26200.8037
Ubuntuバージョン
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 24.04.1 LTS
Release: 24.04
Codename: noble
おさらい
前回までで、やっとDockerfileを使った一覧の動作を試すことができた。
今回は作成したDockerイメージをdocker runで実行する際に指定するパラメータもDockerfileで指定してみよう、という内容。
ちなみに前回使ったdocker runコマンドは以下の感じ。
準備
まずは前回実行したコンテナの停止、削除を行う。
docker rm nginx1
CMD命令とENTRYPOINT命令
コンテナ起動時に実行するコマンドを指定するために CMD命令、ENTRYPOINT命令が使える。
ENTRYPOINT命令は、コンテナのデフォルトの実行可能ファイルを設定する。
つまり、コンテナ起動時に必ず実行するコマンドのこと。
docker runで指定した引数は、このETNRYPOINT命令で指定したコマンドへの引数として追加される。
基本はENTRYPOINT命令で指定した内容が必ず実行されるが docker runコマンド実行時に --entrypointフラグでコマンドを指定するとENTRYPOINT命令で設定したコマンドは上書きされる。
CMD命令は、コンテナがDockerイメージから起動された時に実行する規定のコマンドを指定する。
docker runでコマンドを指定しなければCMD命令で指定した値が使用される。
docker runコマンドでコマンドライン引数を指定した場合、CMD命令で値はdocker runコマンドで指定した値で上書きされる。
手順
1. Dockerfile修正
ということでDockerfileの最後に nginxを起動するためのコマンドをENTRYPOINT命令で追加してみる。
LABEL maintainer="xxxx@gmail.com"
RUN apt-get update && apt-get install -y nginx
COPY index.html /var/www/html/
ENTRYPOINT /usr/sbin/nginx -g 'daemon off;' -c /etc/nginx/nginx.conf
2. Dockerイメージ作成
前回作成したイメージは残しておいて、タグ名を"1.0"→"1.1"としてDockerイメージを作成する。
実行結果:
エラーが出てしまった。
root@xxx:~/nginx1# docker build -t takipone/nginx:1.1 .
[+] Building 1.8s (8/8) FINISHED docker:default
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 233B 0.0s
=> [internal] load metadata for docker.io/library/ubuntu:latest 1.2s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [1/3] FROM docker.io/library/ubuntu:latest@sha256:84e77dee7d1bc93fb029a45e3c6cb9d8aa4831ccfcc7103 0.1s
=> => resolve docker.io/library/ubuntu:latest@sha256:84e77dee7d1bc93fb029a45e3c6cb9d8aa4831ccfcc7103 0.1s
=> [internal] load build context 0.0s
=> => transferring context: 31B 0.0s
=> CACHED [2/3] RUN apt-get update && apt-get install -y nginx 0.0s
=> CACHED [3/3] COPY index.html //var/www/html/ 0.0s
=> exporting to image 0.2s
=> => exporting layers 0.0s
=> => exporting manifest sha256:2e80db00b8f0856137d07781f95cc7ad752063fcc6f1b60af169452a1f606d4d 0.0s
=> => exporting config sha256:37913b24c791dbdcec5e27f3c073eb2c0edaf964721fbcedf0d68f2f4986cae2 0.0s
=> => exporting attestation manifest sha256:c36c542ebf03bb8d62154eafb8952713e741fde0afc3ff63a9651c00 0.1s
=> => exporting manifest list sha256:77ad25ee6bfc7edff996be2e559248ab075030d74a1d86d1ace3fcb66d503f3 0.0s
=> => naming to docker.io/takipone/nginx:1.1 0.0s
=> => unpacking to docker.io/takipone/nginx:1.1 0.0s
1 warning found (use docker --debug to expand):
- JSONArgsRecommended: JSON arguments recommended for ENTRYPOINT to prevent unintended behavior related to OS signals (line 5)
Dockerfileを学ぶ #2
環境
WSLバージョン
WSL バージョン: 2.3.24.0
カーネル バージョン: 5.15.153.1-2
WSLg バージョン: 1.0.65
MSRDC バージョン: 1.2.5620
Direct3D バージョン: 1.611.1-81528511
DXCore バージョン: 10.0.26100.1-240331-1435.ge-release
Windows バージョン: 10.0.26200.8037
Ubuntuバージョン
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 24.04.1 LTS
Release: 24.04
Codename: noble
おさらい
前回までで、やっとDockerfileを使った一覧の動作を試すことができた。
今回は作成したDockerイメージをdocker runで実行する際に指定するパラメータもDockerfileで指定してみよう、という内容。
ちなみに前回使ったdocker runコマンドは以下の感じ。
準備
まずは前回実行したコンテナの停止、削除を行う。
docker rm nginx1
CMD命令とENTRYPOINT命令
コンテナ起動時に実行するコマンドを指定するために CMD命令、ENTRYPOINT命令が使える。
ENTRYPOINT命令は、コンテナのデフォルトの実行可能ファイルを設定する。
つまり、コンテナ起動時に必ず実行するコマンドのこと。
docker runで指定した引数は、このETNRYPOINT命令で指定したコマンドへの引数として追加される。
基本はENTRYPOINT命令で指定した内容が必ず実行されるが docker runコマンド実行時に --entrypointフラグでコマンドを指定するとENTRYPOINT命令で設定したコマンドは上書きされる。
CMD命令は、コンテナがDockerイメージから起動された時に実行する規定のコマンドを指定する。
docker runでコマンドを指定しなければCMD命令で指定した値が使用される。
docker runコマンドでコマンドライン引数を指定した場合、CMD命令で値はdocker runコマンドで指定した値で上書きされる。
手順
1. Dockerfile修正
ということでDockerfileの最後に nginxを起動するためのコマンドをENTRYPOINT命令で追加してみる。
LABEL maintainer="xxxx@gmail.com"
RUN apt-get update && apt-get install -y nginx
COPY index.html /var/www/html/
ENTRYPOINT /usr/sbin/nginx -g 'daemon off;' -c /etc/nginx/nginx.conf
2. Dockerイメージ作成
前回作成したイメージは残しておいて、タグ名を"1.0"→"1.1"としてDockerイメージを作成する。
実行結果:
なんか警告っぽいのが出た。
root@xxx:~/nginx1# docker build -t takipone/nginx:1.1 .
[+] Building 1.8s (8/8) FINISHED docker:default
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 233B 0.0s
=> [internal] load metadata for docker.io/library/ubuntu:latest 1.2s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [1/3] FROM docker.io/library/ubuntu:latest@sha256:84e77dee7d1bc93fb029a45e3c6cb9d8aa4831ccfcc7103 0.1s
=> => resolve docker.io/library/ubuntu:latest@sha256:84e77dee7d1bc93fb029a45e3c6cb9d8aa4831ccfcc7103 0.1s
=> [internal] load build context 0.0s
=> => transferring context: 31B 0.0s
=> CACHED [2/3] RUN apt-get update && apt-get install -y nginx 0.0s
=> CACHED [3/3] COPY index.html //var/www/html/ 0.0s
=> exporting to image 0.2s
=> => exporting layers 0.0s
=> => exporting manifest sha256:2e80db00b8f0856137d07781f95cc7ad752063fcc6f1b60af169452a1f606d4d 0.0s
=> => exporting config sha256:37913b24c791dbdcec5e27f3c073eb2c0edaf964721fbcedf0d68f2f4986cae2 0.0s
=> => exporting attestation manifest sha256:c36c542ebf03bb8d62154eafb8952713e741fde0afc3ff63a9651c00 0.1s
=> => exporting manifest list sha256:77ad25ee6bfc7edff996be2e559248ab075030d74a1d86d1ace3fcb66d503f3 0.0s
=> => naming to docker.io/takipone/nginx:1.1 0.0s
=> => unpacking to docker.io/takipone/nginx:1.1 0.0s
1 warning found (use docker --debug to expand):
- JSONArgsRecommended: JSON arguments recommended for ENTRYPOINT to prevent unintended behavior related to OS signals (line 5)
3. Dockerfile修正
警告の意味は、ENTRYPOINTのパラメーターをJSON形式にした方がいいよ、ということらしい。ということでDockerfileを修正する。
LABEL maintainer="xxxx@gmail.com"
RUN apt-get update && apt-get install -y nginx
COPY index.html /var/www/html/
ENTRYPOINT ["/usr/sbin/nginx", "-g", "daemon off;", "-c", "/etc/nginx/nginx.conf"]
docker build実行
root@xxx:~/nginx1# docker build -t takipone/nginx:1.1 .
[+] Building 2.2s (8/8) FINISHED docker:default
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 247B 0.0s
=> [internal] load metadata for docker.io/library/ubuntu:latest 1.6s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [1/3] FROM docker.io/library/ubuntu:latest@sha256:84e77dee7d1bc93fb029a45e3c6cb9d8aa4831ccfcc7103 0.1s
=> => resolve docker.io/library/ubuntu:latest@sha256:84e77dee7d1bc93fb029a45e3c6cb9d8aa4831ccfcc7103 0.1s
=> [internal] load build context 0.0s
=> => transferring context: 31B 0.0s
=> CACHED [2/3] RUN apt-get update && apt-get install -y nginx 0.0s
=> CACHED [3/3] COPY index.html //var/www/html/ 0.0s
=> exporting to image 0.2s
=> => exporting layers 0.0s
=> => exporting manifest sha256:7ae563324ed96ed865d90d4b838f4137b3ceae058030c51a857930b04da23971 0.0s
=> => exporting config sha256:f178d674921f316b017b996de84a119e88b579352d6e851e96a67f3357f0c923 0.0s
=> => exporting attestation manifest sha256:1cff542974d56aa19b0c5f3942426389a478953a8fea547ae729c98d 0.1s
=> => exporting manifest list sha256:446704b9a6dea8067f20e28c117d7dea2947e090d1d8c006e6b810dd5732b0c 0.0s
=> => naming to docker.io/takipone/nginx:1.1 0.0s
=> => unpacking to docker.io/takipone/nginx:1.1 0.0s
今度はうまくいった。
4. コンテナ起動
作成したDockerイメージを nginx2 の名前で実行してみる。
今回はnginxの起動もDockerfileに含んでいるのでその辺りの記述が不要になっている。
問題なく動作した。
root@xxx:~/nginx1# docker run -d --name nginx2 -p 80:80 takipone/nginx:1.1
f0ca46cc8fb05fe1a709b0b8479302e4721b68655f3b7d5b07906b3d7d02f009
root@xxx:~/nginx1# curl localhost
Hello!
0 件のコメント:
コメントを投稿