Dockerネットワーク入門:Apacheコンテナでテストページ表示
2024-10-194分で読める
DockerでApacheコンテナを作成し、ポートフォワーディングを設定して、ホストのブラウザにテストページを表示する手順を解説します。
2024-11-204分で読める
※この記事で使用しているリソースを一括でダウンロードすることができます。
今回はpostgresを入れたコンテナとpythonを入れたコンテナを使用して、コンテナ間通信を実現する方法について解説していきます。
結論から先に言うとコンテナ間で通信を行うためには、通信を行うコンテナを同一のネットワークに追加する必要があります。
Dockerにおけるポートフォアーディング設定については理解していること。
postgresのコンテナとpythonのコンテナについて準備していきましょう。ディレクトリ構成は以下のようになります。
ディレクトリ構成. ├── postgres │ └── Dockerfile └── python ├── Dockerfile └── get_user.py
postgresのイメージを作成するためににDockerfileを作成します。
docker-entrypoint-initdb.dディレクトリにsqlファイルを入れておくことで、コンテナ作成時にテーブル作成や初期データの投入などを行うことができます。これを利用してpostgresコンテナ作成時にusersテーブルとadminユーザのデータを入るようにしておきます。
DockerfileFROM postgres:17.0 ENV POSTGRES_PASSWORD=postgres # 初期化用SQLスクリプトを作成 RUN echo "CREATE TABLE users (id SERIAL PRIMARY KEY, username TEXT NOT NULL);" \ > /docker-entrypoint-initdb.d/init.sql \ && echo "INSERT INTO users (username) VALUES ('admin');" \ >> /docker-entrypoint-initdb.d/init.sql
pythonのイメージを作成するためににDockerfileを作成します。
postgresにアクセスできるようにライブラリpsycopg2-binaryをpipインストールしておきます。またの後の手順で作成するget_user.pyをコピーするようにしておきます。
DockerfileFROM python:3.11.10 RUN pip install psycopg2-binary COPY ./get_user.py /
pythonコンテナからpostgresに接続できることを確認するためにpythonコードを書いておきます。
内容はpostgresに接続してユーザーテーブルを検索した結果をprintで出力するようなコードにしています。
ここで重要なことはDockerのネットワーク上でコンテナ間で通信を行う場合のホストはコンテナ名になることです。(後のdocker runでpostgresのコンテナ名をdbとするので「host="db"」としています。)
get_user.pyimport psycopg2 try: # `with`で接続を管理 with psycopg2.connect(host="db", database="postgres", user="postgres", password="postgres", port=5432) as connection: # `with`でカーソルを管理 with connection.cursor() as cursor: # SQLクエリを実行 query = "SELECT * FROM users;" cursor.execute(query) # 結果を取得して処理 rows = cursor.fetchall() for row in rows: print(row) except psycopg2.Error as e: print("データベース操作中にエラーが発生しました:", e)
postgresイメージとpythonイメージをビルドします。
※postgresコンテナのビルド時に「ENVにパスワードを記載しない」とwarningが出ますが今回は手順削減のためにENVに記載していることを理解してください。
ターミナルdocker build ./postgres -t postgres

ターミナルdocker build ./python -t python

ここで本記事のタイトルにもあるネットワーク設定をしていきます。network createでネットワークを作成することができます。docker runするときにこのネットワークに追加するようなイメージになります。
ターミナルdocker network create simple-network

オプションの解説-postgresコンテナ
ターミナルdocker run --name db -d --rm --net=simple-network -p 5432:5432 postgres
オプションの解説-postgresコンテナ
ターミナルdocker run --name python -d --rm --net=simple-network -it python

pythonコンテナにshellをアタッチしてpythonファイル(get_user.py)を実行します。
pythonコンテナshellpython ./get_user.py

今回はネットワークにコンテナを追加し、コンテナ間で通信できるようにしてみました。開発で使っていくイメージがついてきたのではないでしょうか? また、今回はネットワーク作成やコンテナ起動を個別に行っていきましたが、docker-composeというものを使用するとビルドからコンテナ起動までを1コマンドで実施することができます。今後docker-composeについても記事にしていきます!
今回の記事が役に立った、ほかにも記事が見たいという方は最新情報を公式Xで配信しているのでフォローお願いします!
2024-10-194分で読める
DockerでApacheコンテナを作成し、ポートフォワーディングを設定して、ホストのブラウザにテストページを表示する手順を解説します。
2026-04-189分で読める
マンション備え付けの壁埋め込みWiFiで「5GHzが繋がらない・2.4GHzが33Mbpsしか出ない」問題を、WiFi 6ルーターをAPモードで追加して650Mbpsまで改善した記録です。
2024-12-015分で読める
Dockerで開発を進めるのであれば必須!複数コンテナを一括管理するdocker-composeについて解説します。