入門docker 復習(8)
プロダクションでの活用
プロダクションへの導入
ローカル環境のDocker化
- チームの開発環境を統一する
テスト/CIへの導入
- ステージングへの導入
- 本番前に動作確認する
- 本番への導入
Tips
docker-compose
環境変数への読み込み
- docker-composeの起動時に渡す
docker-compose up -e MYSQL_PASSWORD=mypassword
- docker-compose.yamlへ記述
version: '3.7' services: app: build: . + environment: + - MYSQL_PASSWORD=mypassword
- シェル変数から読み込み
version: '3.7' services: app: build: . environment: - - MYSQL_PASSWORD=mypassword + - MYSQL_PASSWORD=${MYSQL_PASSWORD}
$ export MYSQL_PASSWORD=mypassword $ docker-compose up
- ファイルから読み込む
version: '3.7' services: app: build: . - environment: - - MYSQL_PASSWORD=mypassword + env_file: + - .env
#.env MYSQL_PASSWORD=mypassword
$ docker-compose up
ホストとコンテナ間のファイル共有の速度向上
オプション
consistend(default)
- ホストとコンテナ間の一貫性を担保するオプション
- オーバーヘッドが大きいため、ファイルの更新が発生する場合は非推奨
cached
- ホストの更新を優先する
- サービスコードのようにホスト側で更新するケース
delegated
- コンテナ側の更新を優先する
- MYSWLのようにコンテナからホストへの書き込みしかしないケース
- コンテナ上からライブラリのインストールをするコマンド(
composer install
,npm install
)を使用する場合
標準入力を有効にする
- デバッグに使用したい場合、明示的に設定可能
services: rails: build: . + tty: true + stdin_open: true ports: - '3000:3000' volumes: - './:/app:cached'
Multi-Stage Buildのローカル活用
- 過去のレイヤーを使用したい場合、明示的に設定可能
ersion: '3.7' services: app: build: context: . + target: build volumes: - ./:/go/app command: go run main.go
docker-compose間のnetworkの共有
- マイクロサービス化によってフロントとバックバックエンドでリポジトリが異なる場合がある
- ネットワークを共有する必要がある
backend
- internalとexternalのネットワークを用意する
version: '3.7' services: api: build: . ports: - 8000:80 + networks: + - internal + - external mysql: image: mysql:5.7 environment: MYSQL_ALLOW_EMPTY_PASSWORD: 'yes' + networks: + - internal +networks: + internal: + internal: true + external: + name: api_network
web
version: '3.7' services: web: #XXX APIアクセスはcurlで代用。 image: amazonlinux:2 command: curl api:80 +networks: + default: + external: + name: api_network