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って、便利ですね

 

Joomla templates by a4joomla