コンテナビルドのパイプラインと作ろうと思ったけどその前にいろいろ覚えなければいけないことがあったので、まずはDockerfileの作り方を勉強(*´ω`*)
DockerFileとは
DockerイメージがらカスタムDockerイメージを作成するための設計書ファイル。
使い方
dockerfileという名前のファイルを作成し、docker buildコマンドを実行する。
DockerFileのパラメータ
- FROM:ベースとなるイメージを選択する。
- RUN:Imageを作成するときにコマンドが実行される。インストール系のコマンドが使用される。
- CMD:Imageからコンテナを作成するときに実行される。コンテナの実行などに使用される。
- MAINTAINER(非推奨):イメージの作者を指定する。Docker 1.13以降はLABELを使用することが推奨されている。
- LABEL:イメージに作者、バージョン情報などのメタデータを設定する。
- ENTRYPOINT:CMDと同様の使われ方をするが、CMDとの違いは上書きができなくなる。
- COPY:Dockerfileがあるディレクトリ内のファイルをImageにコピーする。
- ADD:COPY同様ファイルをコピーできるが、ADDはファイルが圧縮ファイルであった場合解凍+コピーを行う。
- ENV:環境変数を設定する。
- WORKDIR:作業用ディレクトリを変更する。
- EXPOSE:指定したポート番号でコンテナを公開する。
- VOLUME:ホスト側の/var/lib/docker/volumesなどにボリュームが作成され、コンテナに永続ボリュームを割り当てる。
- SHELL:RUN、CMD、ENTRYPOINTで使用されるシェルを指定する。デフォルトではLinuxは["/bin/sh","-c"]、Windowsでは["cmd","/S","/C"]。
- USER:RUN、CMD、ENTRYPOINTで実行されるコマンドの実行ユーザを指定する。
Dockerfile記載例) FROM ubuntu:23.10 SHELL ["/bin/sh","-c"] LABEL version="1.0" RUN mkdir /tmp/sample_dir CMD ["/bin/bash"] CMD nginx -g 'daemon off;' ENTRYPOINT ["ls","-la"] CMD [">> /tmp/test.txt"] COPY sample.txt /tmp/sample_dir ADD sample.zip /tmp/sample_dir ENV key1 value WORKDIR /tmp/sample_dir EXPOSE 80 VOLUME /var/disk1
実践!
1.Dockerfile作成
# docker version | grep Version Version: 23.0.1 # vi dockerfile FROM ubuntu:23.10 SHELL ["/bin/sh","-c"] RUN mkdir /sample RUN touch /sample/test.txt ENTRYPOINT ["ls","-la"] CMD ["/sample"] ENV key1 value ENTERPOINT [] CMD ["bash"]
2.Dockerイメージ作成
# pwd /root ### docker build -t <イメージ名> <dockerfile保存先> # docker build -t test . [+] Building 6.9s (6/6) FINISHED => [internal] load build definition from dockerfile 0.0s => => transferring dockerfile: 181B 0.0s => [internal] load .dockerignore 0.0s => => transferring context: 2B 0.0s => [internal] load metadata for docker.io/library/ubuntu:latest 2.0s => [1/2] FROM docker.io/library/ubuntu:latest@sha256:dfd64a3b4296d8c9b62 4.6s => => resolve docker.io/library/ubuntu:latest@sha256:dfd64a3b4296d8c9b62 0.0s => => sha256:dfd64a3b4296d8c9b62aa3309984f8620b98d87e474 1.13kB / 1.13kB 0.0s => => sha256:ca5534a51dd04bbcebe9b23ba05f389466cf0c190f1f8f1 424B / 424B 0.0s => => sha256:3b418d7b466ac6275a6bfcb0c86fbe4422ff6ea0af4 2.30kB / 2.30kB 0.0s => => sha256:dbf6a9befcdeecbb8813406afbd62ce81394e3869 29.53MB / 29.53MB 4.1s => => extracting sha256:dbf6a9befcdeecbb8813406afbd62ce81394e3869d84599f 0.4s => [2/2] RUN mkdir /tmp/sample_dir 0.2s => exporting to image 0.0s => => exporting layers 0.0s => => writing image sha256:5299165384649f26938119f9e21ef6a06fd5c3889193c 0.0s => => naming to docker.io/library/test 0.0s # docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE test latest 529916538464 9 seconds ago 77.8MB
3.Dockerコンテナ起動
# docker run test total 8 drwxr-xr-x 1 root root 4096 May 22 22:07 . drwxr-xr-x 1 root root 4096 May 22 22:07 .. -rw-r--r-- 1 root root 0 May 22 22:07 test.txt # docker run -it test /bin/bash containerid:/# containerid:/# printenv | grep key1 key1=value
感想
これで自由にコンテナImageが作れるのでいろいろ遊んでみますー