Dockerfile
Dockerの使い方は、わかってもらえたかと思います。
しかし、実際使っていくと、あの時作ったイメージって、どうやったっけ等が発生します。
または、いつも同じようなイメージを作るけど、元のイメージは、最新OSがほしいな等です。
そんな時は、Dockerfileという物を作成することで、解決出来ます。
Dockerfile
FROM ubuntu
RUN apt update
2行だけですけど、立派なDockerfileです。
これは、ubuntuイメージをDockerハブから取ってきてくれって書いていますよ。
ついでに、apt updateコマンドを実行しといてくれってことです。
そして、以下を実行します。
docker build -t ubuntubox2 .
docker run -it --name testbox ubuntubox2 bash
すると、rootプロンプトが表示されましたよね。
まずは、一行目から、Dockerfileの内容で、ubuntubox2イメージを作成してくれ。
2行目は、お馴染みのubuntubox2イメージから、testboxコンテナを作成起動し、bashを実行してくれ。
です。
後は、普通のdockerコマンドを使いこなして作業開始です。
Dockerfileは、もっと色々なことが出来ます。
この辺りは、よそのサイトを参考に実験を繰り返して下さいませ。
docker-compose.yml
いよいよ、佳境に入ってきました。
docker-compose.ymlです。
本来、複数のDockerコンテナを一気に起動したりする為の仕組みのようです。
自分の感覚では、コンテナの起動方法を記述しているようなファイルなのかなって思っています。
このファイルを使うことで、個別のコンテナの起動を、シェルに記述してごにょごょする必要が軽減されます。
ネットワークや仮想ボリューム等も構成する必要がある場合、ここに記述したりもします。
ちょっと、複雑なんで、よそのサイトに丸投げしておきますね。
詳しいことを知りたい方は、ググって下さい。
とりあえず、起動は、以下となります。
docker-compose up
停止は、以下です。
docker-compose down
完璧なdocker-compose.ymlを記述出来れば、こんぐらいで用を足せます。
PostgreSQL
やっと、本題に入れそうです。
途中、手抜きどころもありましたが、ご容赦ください。
早速、Dockerfileとdocker-compose.ymlとinit.shとstart.shを公開しましょう。
Dockerfile
FROM alpine
EXPOSE 5432
RUN apk update
ENV TZ=Asia/Tokyo
RUN apk --update add tzdata
RUN cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
RUN apk --update add pcre-dev openssl-dev bash
RUN apk add postgresql
RUN mkdir /run/postgresql && chown postgres:postgres /run/postgresql
RUN su - postgres -c "echo 'export PGDATA=/pgdata/db' >> /var/lib/postgresql/.profile"
WORKDIR /startup
docker-compose.yml
version: "3"
services:
db1:
build:
context: .
ports:
- "5432:5432"
expose:
- "5432"
hostname: pgtest1
volumes:
- ./data:/pgdata
- ./startup:/startup
tty: true
working_dir: /startup
command: bash /startup/start.sh
networks:
app-tier:
driver: host
startup/init.sh
#/bin/bash
initdb -D /pgdata/db --no-locale -E utf-8 -k
echo listen_addresses = \'0.0.0.0\' >> /pgdata/db/postgresql.conf
echo 'host all all 0.0.0.0/0 trust' >> /pgdata/db/pg_hba.conf
exec
startup/start.sh
#/bin/bash
if [ ! -e /pgdata/db ]; then
mkdir /pgdata/db && chown postgres:postgres /pgdata/db
su - postgres -c 'bash /startup/init.sh'
fi
su - postgres -c 'pg_ctl start'
bash
フォルダ構成
project
├Dockerfile
├docker-compose.yml
└startup
├init.sh
└start.sh
この構成で、
docker-compose up
すると、postgresqlサーバが起動し、TCP 5432番へ外部から接続することが出来ます。
このイメージは、alpineという小さいOSを使って作りました。
init.shで、postgresqlの初期設定を行っているので、カスタムしたい方は、ここを改造して下さいませ。
データは、ホストのdataフォルダに残るので、このフォルダだけ持ち出せば、すぐに使うことが出来ますよ。
もし、バージョンを固定して維持しつづけたい場合、イメージをメタデータ毎、バックアップしておけば、外部のDockerシステムでも同じ環境を構築することが可能です。
Dockerって、便利ですね