概要
現在は多くのDockerイメージがDocker Hubで公開されており、それらを利用すればコンテナ自体を自作する必要はありませんが、企業向けのシステムではカスタマイズしたオリジナルのコンテナイメージを使用したいケースが多いと思います。
コンテナから作成することを面倒に思うかもしれませんが、コンテナを立ち上げる際にどのように固有パラメータを適用するかはコンテナの開発者が自由に作成しており、カスタマイズ性に欠けることもあります。コンテナを自作すると自分の要件に応じた最低限の設定で済むため運用管理もしやすくなると思います。
本稿では各コンテナイメージのベースとなるコンテナイメージをUbuntuで作成します。尚、ここので自作とはミドルウェアを含まないクリアなOSのオフィシャルイメージをカスタマイズすることを指しています。
Dockerfile
下記のDockerfileを用意します。このDockerfileで実施していることはタイムゾーンの設定だけです。apt-getコマンドの見慣れないオプションはInteractiveを抑止するものです。
FROM ubuntu:22.04 RUN apt-get update RUN DEBIAN_FRONTEND=noninteractive apt-get -o Dpkg::Options::=--force-confdef -o Dpkg::Options::=--force-confold -y upgrade RUN DEBIAN_FRONTEND=noninteractive apt-get -o Dpkg::Options::=--force-confdef -o Dpkg::Options::=--force-confold -y install tzdata RUN ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime RUN echo "Asia/Tokyo" > /etc/timezone
イメージの作成
build
Dockerfileからイメージをビルドします。本稿でのTagはHarbor(プライベートレジストリ)で管理する前提としています。
myadmin@ubuntu:~$ docker build -t harbor.si1230.com/ubuntu-22.04/base:1.0.0 .
run
作成したコンテナイメージが起動できることを確認します。--rmオプションを付与しているためexitするとコンテナも削除されます(コンテナイメージは残ります)。
myadmin@ubuntu:~$ docker run --rm -it harbor.si1230.com/ubuntu-22.04/base:1.0.0 root@6bd96dd87827:/# cat /etc/timezone Asia/Tokyo root@6bd96dd87827:/# exit
push
問題なければHarborにPushします。Pushは設定したTagでアップロード先を決定しています。
myadmin@ubuntu:~$ docker push harbor.si1230.com/ubuntu-22.04/base:1.0.0
Docker コンテナを自作する #1 ベースイメージ