1. アプリケーションの構築手順を確立する
まずは、イメージのベースとなるOSを選定します。
今回はRockyLinuxを利用しますがDockerイメージを軽量にしたい場合はAlpineがおすすめです。
Dockerhubで好みのディストリビューションを選ぶとよいでしょう。
https://hub.docker.com/
とりあえずコンテナをベースOSのコンテナを起動するために下記のファイルをコピペで作成します。imageの部分は自身の選定したOSを記載します。
version: '3.8'
services:
test:
container_name: test
image: rockylinux:8.6.20227707
command: tail -f /dev/null
・コンテナを起動します。
# docker-compose up -d
[+] Running 2/2
? test Pulled 3.5s
? a8c22950d6e2 Already exists 0.0s
[+] Running 2/2
? Network docker_default Created 0.2s
? Container test Started 1.8s
・コンテナにログインします。
# docker exec -it test bash
ここからは、通常のサーバのように構築します。
今回はプロキシサーバとしてsquidをインストールします。
# dnf update -y
# dnf install -y squid
通常ならここでsystemctlコマンドで起動したいのですがコンテナは基本的に隔離されている必要があるのでホストOSとカーネルを共有しているDockerでは基本的にsystemctlコマンドは利用できません。※権限を与えて利用することは可能
それなのでsquidコマンドでサービスを起動します。
事前にsystemctlコマンドを利用しないサービスの起動コマンドを調べる必要があります。
# squid -f /etc/squid/squid.conf
これでアプリケーションのインストールから起動までの手順が確立しました。
今度はこの手順をDockerfileに記載します。
2. Dockerfileの作成
Dockerfileは、Dockerイメージの設計書です。ビルドすることで自動的に設計書の通りにイメージが作成されます。
・Dockerfileを作成します。
FROM rockylinux:8.6.20227707
RUN dnf update -y && \
dnf install -y squid
EXPOSE 3128
CMD ["squid", "-f", "/etc/squid/squid.conf"]
・イメージを作成する際にはリポジトリ名とタグを付与します。
例ではリポジトリ名をcustom-proxyとしタグを1.0としています。
# docker build -t custom-proxy:1.0 .
[+] Building 1.5s (6/6) FINISHED
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load build definition from Dockerfile 0.1s
=> => transferring dockerfile: 170B 0.0s
=> [internal] load metadata for docker.io/library/rockylinux:8.6.20227707 1.3s
=> [1/2] FROM docker.io/library/rockylinux:8.6.20227707@sha256:afd392a691df0475390df77cb5486f226bc2b4cbaf87c41785115b9237f3203f 0.0s
=> CACHED [2/2] RUN dnf update -y && dnf install -y squid 0.0s
=> exporting to image 0.1s
=> => exporting layers 0.0s
=> => writing image sha256:b2ba902e43e48617b0147c0abcf3d668319a9f3f20fd481fcfd4a2aa57906d26 0.0s
=> => naming to docker.io/library/custom-proxy:1.0
・Dockerイメージの一覧を確認する。
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
custom-proxy 1.0 b2ba902e43e4 40 minutes ago 547MB
・Dockerイメージをファイル出力する。
# docker save custom-proxy:1.0 > custom-proxy.tar
おまけ
・Dockerイメージをインポートする場合は下記の通り。
# docker load < custom-proxy.tar