概要
こちらの本を参考に、pythonやDB系のツールのdocker-compose.yaml
(docker-compose.yml
、またはcompose.yml
)の設定ファイルの一覧を備忘として残します。
参考にしている本の設定ファイルをそのまま、にしているか所もありますが、私の経験をもとにより使いやすくなるような設定もしています。
本記事で紹介しているdocker-compose.yaml設定ファイルの一覧
- DjangoとPostgreSQL
- DjangoとPostgreSQLをつなげて動くサーバ
- Flask
- Flaskが動くサーバ
- mariadb
- MariaDBが動くサーバ
- mariadbとphpmyadmin
- MariaDBとそれをSQLクライアントで接続して、SQLをたたけるようにしているdocker-compose.yamlの設定
- postgresql
- PostgreSQLが動くサーバ
- postgresqlとpgadmin4
- PostgreSQLとそれをSQLクライアントで接続して、SQLをたたけるようにしているdocker-compose.yamlの設定
Github
DjangoとPostgreSQL
- DjangoとPostgreSQLをつなげて動くサーバ
Dockerfile
FROM python:3.10
WORKDIR /code
ADD requirements.txt /code/
RUN pip install --no-cache-dir -r requirements.txt
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
docker-compose.yaml
services:
db:
image: postgres:14.2
environment:
POSTGRES_DB: testdb
POSTGRES_USER: testuser
POSTGRES_PASSWORD: testpass
volumes:
- db-data:/var/lib/postgresql/data
web:
build:
context: .
dockerfile: Dockerfile
depends_on:
- db
ports:
- "8000:8000" # 「http://localhost:8000/」
volumes:
- .:/code
volumes:
db-data:
requirements.txt
Django
psycopg2-binary
manage.py
#!/usr/bin/env python
"""Django's command-line utility for administrative tasks."""
import os
import sys
def main():
"""Run administrative tasks."""
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')
try:
from django.core.management import execute_from_command_line
except ImportError as exc:
raise ImportError(
"Couldn't import Django. Are you sure it's installed and "
"available on your PYTHONPATH environment variable? Did you "
"forget to activate a virtual environment?"
) from exc
execute_from_command_line(sys.argv)
if __name__ == '__main__':
main()
Flask
- Flaskが動くサーバ
Dockerfile
FROM python:3.10
WORKDIR /usr/src/app
RUN pip install flask==2.3.1
CMD ["flask", "run", "--host=0.0.0.0", "--debug"]
docker-compose.yaml
services:
web:
build:
context: .
dockerfile: Dockerfile
container_name: flask-container
ports:
- "5000:5000" # 「http://localhost:5000/」
volumes:
- ./src:/usr/src/app
src/manage.py
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello_flask() -> str:
return "hello flask!" # ブラウザに hello flask を表示する
docker-compose.yaml
services:
web:
build:
context: .
dockerfile: Dockerfile
container_name: flask-container
ports:
- "5000:5000" # 「http://localhost:5000/」
volumes:
- ./src:/usr/src/app
mariadb
- MariaDBが動くサーバ
docker-compose.yaml
# DBを使うためには、ユーザ名やパスワードの設定が必要である.
# MariaDBの主な環境変数は
# - MARIADB_ROOT_PASSWORD : ルートユーザのパスワード
# - MARIADB_DATABASE : データベース名
# - MARIADB_USER : データベースのユーザ名
# - MARIADB_PASSWORD : データベースのパスワード
services:
mariadb:
image: mariadb:10.7
container_name: mariadb-container
environment:
MARIADB_ROOT_PASSWORD: rooptpassword
MARIADB_DATABASE: testdb
MARIADB_USER: testuser
MARIADB_PASSWORD: testpass
volumes:
- db-data:/var/lib/mysql
# 通常はコンテナを削除した時に、コンテナのデータも一緒に削除されてしまう.
# それを避けるために、ボリュームの永続化をする.
# 永続化したいディレクトリを以下のvolumesで定義しておく.
# 定義する時は、ホスト側(ローカル側)のPCのディレクトリを指定しておく.
volumes:
db-data:
mariadbとphpmyadmin
- MariaDBとそれをSQLクライアントで接続して、SQLをたたけるようにしているdocker-compose.yamlの設定
docker-compose.yaml
# DBを使うためには、ユーザ名やパスワードの設定が必要である.
# MariaDBの主な環境変数は
# - MARIADB_ROOT_PASSWORD : ルートユーザのパスワード
# - MARIADB_DATABASE : データベース名
# - MARIADB_USER : データベースのユーザ名
# - MARIADB_PASSWORD : データベースのパスワード
services:
db:
image: mariadb:10.7
environment:
MARIADB_ROOT_PASSWORD: rootpass
MARIADB_DATABASE: tetsdb
MARIADB_USER: testuser
MARIADB_PASSWORD: testpass
volumes:
- db-data:/var/lib/mysql
phpmyadmin:
image: phpmyadmin:5.2
depends_on:
- db
environment:
PMA_HOST: db # データベースのホスト名。MariaDBのコンテナの名前を設定する.
PMA_USER: testuser # データベースのユーザ名。上で設定したMariaDBのユーザ名を設定する.
PMA_PASSWORD: testpass # データベースのパス。上で設定したMariaDBのパスワードを設定する.
ports:
- "8080:80" # ブラウザで「http://localhost:8080/」
volumes:
- phpmyadmin-data:/sessions
volumes:
db-data:
phpmyadmin-data:
postgresql
- PostgreSQLが動くサーバ
docker-compose.yaml
# DBを使うためには、ユーザ名やパスワードの設定が必要である.
# PostgreSQLの主な環境変数は
# - POSTGRES_DB : データベース名
# - POSTGRES_USER : データベースのユーザ名
# - POSTGRES_PASSWORD : データベースのパスワード
services:
db:
image: postgres:14.2
environment:
POSTGRES_DB: testdb
POSTGRES_USER: testuser
POSTGRES_PASSWORD: testpass
volumes:
- db-data:/var/lib/postgresql/data
volumes:
db-data:
postgresqlとpgadmin4
- PostgreSQLとそれをSQLクライアントで接続して、SQLをたたけるようにしているdocker-compose.yamlの設定
docker-compose.yaml
# DBを使うためには、ユーザ名やパスワードの設定が必要である.
# PostgreSQLの主な環境変数は
# - POSTGRES_DB : データベース名
# - POSTGRES_USER : データベースのユーザ名
# - POSTGRES_PASSWORD : データベースのパスワード
services:
db:
image: postgres:14.2
environment:
POSTGRES_DB: testdb
POSTGRES_USER: testuser
POSTGRES_PASSWORD: testpass
volumes:
- db-data:/var/lib/postgresql/data
pgadmin4:
image: dpage/pgadmin4:8.13
depends_on:
- db
environment:
PGADMIN_DEFAULT_EMAIL: admin@gmail.com # 【実際に自分が使用できるメアド】
PGADMIN_DEFAULT_PASSWORD: pass
ports:
- "8080:80" # ブラウザで「http://localhost:8080/」
volumes:
- pgadmin4-data:/var/lib/pgadmin
volumes:
db-data:
pgadmin4-data:
まとめ
- Dockerを使う系のファイルを参考書籍を基にまとめてみました。
-
docker-compose.yaml
って今はcompose.yaml
でも良いとのことらしいです。Dockerのバージョンが変わり、compose.yaml
が今は推奨で、docker-compose.yaml
が非推奨(知らなかったです..しかし、docker-compose.yamlの方が書きなれているので、今回はずっとファイル名を古い名前でやってました。) - 今後、上記していないdockerコンテナ用の設定ファイルも作成次第、Githubにも随時更新をしていこうと思っています。
- 特に、pythonやjupyterなど、データサイエンスでよく使う系のコンテナを作成したいと思っています。