3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

tomcat と PostgreSQL 入りの Docker イメージを作る

Posted at

tomcat と PostgreSQL のイメージを別々に作って docker-compose で動かす例はよく見つかるのだけど、「1つのコンテナの中に両者を同梱させる」例がなかなか見つからなかったので試行錯誤してやってみた。

Dockerfile を作る

に、ubuntu のイメージをベースに、PostgreSQL 9.3 をインストールする例が載っていたので、これを参考に、ubuntu の代わりに tomcat 入りのイメージをベースにする。

Dockerfile

FROM tomcat:9.0-jre8
MAINTAINER SvenDowideit@docker.com

# Add the PostgreSQL PGP key to verify their Debian packages.
# It should be the same key as https://www.postgresql.org/media/keys/ACCC4CF8.asc
RUN apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --no-tty --recv-keys B97B0AFCAA1A47F044F244A07FCC7D46ACCC4CF8

# Add PostgreSQL's repository. It contains the most recent stable release
#     of PostgreSQL, ``9.6``.
RUN echo "deb http://apt.postgresql.org/pub/repos/apt/ precise-pgdg main" > /etc/apt/sources.list.d/pgdg.list

# Install ``python-software-properties``, ``software-properties-common`` and PostgreSQL 9.6
#  There are some warnings (in red) that show up during the build. You can hide
#  them by prefixing each apt-get statement with DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y software-properties-common postgresql-9.6 postgresql-client-9.6 postgresql-contrib-9.6

# Note: The official Debian and Ubuntu images automatically ``apt-get clean``
# after each ``apt-get``

# Run the rest of the commands as the ``postgres`` user created by the ``postgres-9.6`` package when it was ``apt-get installed``
USER postgres

# Create a PostgreSQL role named ``docker`` with ``docker`` as the password and
# then create a database `docker` owned by the ``docker`` role.
# Note: here we use ``&&\`` to run commands one after the other - the ``\``
#       allows the RUN command to span multiple lines.
RUN    /etc/init.d/postgresql start &&\
    psql --command "CREATE USER docker WITH SUPERUSER PASSWORD 'docker';" &&\
    createdb -O docker docker

# Adjust PostgreSQL configuration so that remote connections to the
# database are possible.
RUN echo "host all  all    0.0.0.0/0  md5" >> /etc/postgresql/9.6/main/pg_hba.conf

# And add ``listen_addresses`` to ``/etc/postgresql/9.6/main/postgresql.conf``
RUN echo "listen_addresses='*'" >> /etc/postgresql/9.6/main/postgresql.conf

# Expose the PostgreSQL port
EXPOSE 5432

# Add VOLUMEs to allow backup of config, logs and databases
VOLUME  ["/etc/postgresql", "/var/log/postgresql", "/var/lib/postgresql"]

# Set the default command to run when starting the container
CMD ["/usr/lib/postgresql/9.6/bin/postgres", "-D", "/var/lib/postgresql/9.6/main", "-c", "config_file=/etc/postgresql/9.6/main/postgresql.conf"]

FROM tomcat:9.0-jre8

Java8を使いたいので -jre8付き。

RUN apt-key adv …

--no-tty を追加した。これが無いと gpg: cannot open '/dev/tty': No such device or address というエラーが出たので(参考)。

RUN apt-get update && apt-get install …

9.39.6 に置換。
python-software-properties を削除。 software-properties-common だけで済むようになったみたい。

Docker イメージを作る

docker build ./pg9_tomcat9 -t pg9_tomcat9

image.png

コンテナ作成&postgres実行

docker run -d --rm -p 8888:8080 -p:5432:5432 --name pg9_tomcat9_1 pg9_tomcat9

コンテナ起動確認

docker ps

image.png

PostgreSQL 接続確認

Docker ホストから psql でつないでみる。

psql -h localhost -U docker -d docker
# Password: docker

docker=# \l

image.png

tomcat 起動

docker exec -d pg9_tomcat9_1 bash catalina.sh run

tomcat 動作確認

ホストのWebブラウザで http://localhost:8888/ を開く。

image.png

Dockerfile に tomcat も起動するように CMD を記述したいけどうまくいかなかった(tomcat を起動させたら postgres が起動しなくなってしまった)。

その他

コンテナに bash で入る

docker exec -it -u 0 pg9_tomcat9_1 bash

-u 0 を付けないと postgres ユーザーでログインしちゃう。

tomcat の停止

docker exec pg9_tomcat9_1 bash catalina.sh stop

docker run 時のボリューム指定はご自由に。

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?