使用 docker-compose.yml 文件创建 Docker 容器的示例

简要描述

作成時の要点をまとめたのでメモ

サンプルのurl : https://github.com/3104yoshi/docker_sample/tree/main

./setup.sh でコンテナを起動できる

样本摘要

    • DB と連携する webアプリケーション

 

    • DB、アプリケーションサーバともに、 docker コンテナ内で作成している

 

    • DB には postgres と Adminer を, アプリケーション側では Flask を使用しており、以下が必要

postgres
Adminer
python
Flask

docker によって ↑ を管理できるため、ホストマシンにインストールする必要がない

目录结构

root
 ├ src
 |  :
 ├ docker-compose
 ├ Dockerfile
 ├ .env                      # db の接続情報を分離
 └ postgres
    └ init
       ├ 1_create_table.sql  # テーブルの作成
       └ 2_insert.sql        # テーブルデータの初期化

docker-compose.yml的音译为”容器组合编排文件”。

version: '3'
services:
  postgres:
    image: postgres:14.4-alpine
    ports:
      - "5432:5432"
    volumes:
      - ./postgres/init:/docker-entrypoint-initdb.d
    container_name: postgres
    environment:
      POSTGRES_USER: $POSTGRES_USER
      POSTGRES_PASSWORD: "$POSTGRES_PASSWORD"
      POSTGRES_DB: "$POSTGRES_DB"
      
  
  server:
    build: .
    ports:
      - '4000:80'
    environment:
      POSTGRES_USER: $POSTGRES_USER
      POSTGRES_PASSWORD: "$POSTGRES_PASSWORD"
      POSTGRES_DB: "$POSTGRES_DB"
      POSTGRES_HOST: "$POSTGRES_HOST"
      FLASK_SECRET_KEY: "$FLASK_SECRET_KEY"
  
  adminer:
    container_name: adminer
    hostname: adminer
    image: adminer:4.7.5
    ports:
      - 8080:8080
    depends_on:
      - postgres

    • services

各コンテナの設定を定義している
このサンプルでは services 直下に db, アプリケーションサーバ, Adminer の3つのコンテナを定義している

image

Dockerイメージを指定する

build

Dockerfile のパスを指定する

如果从类似于Docker Hub的仓库中获取Docker映像,则使用’image’;如果要指定Dockerfile,则使用’build’。

    • volumes

/docker-entrypoint-initdb.d にローカルのディレクトリをマウントしている
マウントしたディレクトリ直下にある sql ファイルが build 時に実行される
実行順は prefix の数字に従う

環境変数

environment 下で用いている環境変数は .env ファイルで定義できる

這個問題的中譯為:「環境變數」。

    ここでは以下の環境変数を定義している
POSTGRES_USER
POSTGRES_PASSWORD
POSTGRES_DB
POSTGRES_HOST
FLASK_SECRET_KEY

启动容器

docker compose build
docker-compose up -d

连接到容器

    ポートやユーザ名は自身が定義したものを使用する

连接至数据库。

psql -h localhost -p 5432 -U postgres -d postgres

连接到应用服务器

http://localhost:4000/

使用docker-compose.yml的好处是什么?

    • Dockerfile をビルドしても、一度に 1 つのコンテナしか起動できない

 

    • docker-compose.yml をビルドすると、一度に複数のコンテナを起動できる

 

    コンテナの情報をまとめて管理できるため、多数のコンテナを使用するアプリケーションにおいて有用
广告
将在 10 秒后关闭
bannerAds