Docker‐compose - artemovsergey/ASP GitHub Wiki
Docker-compose
networks:
network:
driver: bridge
volumes:
postgres_data:
services:
nginx:
container_name: TicTacToeNginx
build:
context: .
dockerfile: loadbalancer/Dockerfile
restart: always
ports:
- "80:80"
- "443:443"
networks:
- network
depends_on:
- api
angular:
container_name: TicTacToeAngular
restart: always
build:
context: .
dockerfile: TicTacToe.Angular/Dockerfile
ports:
- "4201:4200"
depends_on:
- api
networks:
- network
api:
container_name: TicTacToeAPI
image: tictactoe.api
environment:
- ASPNETCORE_ENVIRONMENT=Production
- ASPNETCORE_URLS=http://*:8080
env_file:
- game.env
build:
context: .
dockerfile: TicTacToeApp.API/Dockerfile
ports:
- "8080:8080"
networks:
- network
depends_on:
db:
condition: service_healthy # ⚠️ Ждём, пока БД не станет healthy
db:
image: postgres:latest
container_name: TicTacToeAppPostgreSQL
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: root
POSTGRES_DB: TicTacToeAppDatabase
healthcheck:
test: [ "CMD-SHELL", "pg_isready -U postgres" ]
interval: 5s
timeout: 5s
retries: 5
ports:
- "5433:5432"
volumes:
- postgres_data:/var/lib/postgresql/data
networks:
- network
# mssql:
# image: mcr.microsoft.com/mssql/server:2019-latest
# container_name: SampleAppMssql
# environment:
# SA_PASSWORD: "HlxTm2fcFE54JA1I_Yp5"
# ACCEPT_EULA: "Y"
# ports:
# - "1434:1433"
# volumes:
# - sql_data:/var/opt/mssql
# networks:
# - network
#
# redis:
# image: "redis:latest"
# container_name: SampleAppRedis
# ports:
# - "6380:6379"
# networks:
# - network
Переменные окружения
file.env
TICTACTOE_BOARD_SIZE=3
TICTACTOE_LINE_TO_WIN=3
TICTACTOE_CHANCE=50
TICTACTOE_NUMBER_STEP=2
Команды
- docker network ls
- docker network inspect example_asp-dotnet-network
Замечание: имена сервисов Docker работают только с кодом, запущенным в сети контейнеров
Docker-compose: nginx,angular,.net, pg, pgadmin
- docker-compose up --build --watch Замечание: можно использовать docker-compose.override.yml или docker-compose.prod.yml
version: '3.0'
networks:
asp-dotnet-network:
driver: bridge
services:
# letsencrypt:
# image: jrcs/letsencrypt-nginx-proxy-companion
# volumes:
# - /var/run/docker.sock:/var/run/docker.sock
# - ./letsencrypt:/etc/letsencrypt
# - ./webroot:/var/www/certbot
# - ./certs:/etc/nginx/certs
# - ./html:/usr/share/nginx/html
# - ./acme:/etc/acme.sh
# environment:
# - NGINX_PROXY_CONTAINER=nginx
# - NGINX_DOCKER_GEN_CONTAINER=nginx
# depends_on:
# - nginx
# certbot:
# image: certbot/certbot
# volumes:
# - ./letsencrypt:/etc/letsencrypt
# - ./webroot:/var/www/certbot
# command: certonly --register-unsafely-without-email --webroot -w /var/www/certbot -d example.com -d www.example.com --agree-tos --no-eff-email --force-renewal
# environment:
# - WEBROOT=/var/www/certbot
# depends_on:
# - nginx
nginx:
container_name: ContainerNginx
build:
context: .
dockerfile: loadbalancer/Dockerfile
restart: always
ports:
- "80:80"
- "443:443"
links:
- api
- angular
depends_on:
- db
- api
- angular
networks:
- asp-dotnet-network
angular:
container_name: ContainerAngular
restart: always
build:
context: .
dockerfile: Example.Angular/Dockerfile
# develop:
# watch:
# - action: sync
# path: ./Example.Angular/src
# target: /app/src
# ignore:
# - node_modules/
# - action: rebuild
# path: package.json
environment:
- Production
ports:
- "4200:4200"
networks:
- asp-dotnet-network
depends_on:
- db
- api
api:
container_name: ContainerAPI
restart: always
build:
context: .
dockerfile: Example.API/Dockerfile
environment:
- ASPNETCORE_ENVIRONMENT=Development
- ASPNETCORE_HTTP_PORTS=5001
- ASPNETCORE_HTTPS_PORTS=5001
ports:
- "5010:5001"
networks:
- asp-dotnet-network
depends_on:
- db
volumes:
- ${APPDATA}/Microsoft/UserSecrets:/home/app/.microsoft/usersecrets:ro
- ${APPDATA}/ASP.NET/Https:/home/app/.aspnet/https:ro
db:
image: postgres:latest
container_name: ContainerPostgreSQL
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: root
POSTGRES_DB: Example
ports:
- "5432:5432"
volumes:
- postgres_data:/var/lib/postgresql/data
networks:
- asp-dotnet-network
pgadmin:
container_name: ContainerPgAdmin
image: dpage/pgadmin4
restart: always
environment:
PGADMIN_DEFAULT_EMAIL: [email protected]
PGADMIN_DEFAULT_PASSWORD: root
volumes:
- postgres_data:/var/lib/postgresql/dbadmin
ports:
- "5050:80"
networks:
- asp-dotnet-network
volumes:
postgres_data:
Docker-compose for production
services:
nginx:
container_name: ContainerNginx
image: artik3314/react_nginx:latest
restart: always
ports:
- "80:80"
- "443:443"
links:
- api
- angular
depends_on:
- db
- api
- angular
networks:
- asp-dotnet-network
angular:
container_name: ContainerAngular
restart: always
image: artik3314/react_angular:latest
environment:
- Production
ports:
- "4200:4200"
networks:
- asp-dotnet-network
depends_on:
- db
- api
api:
container_name: ContainerAPI
restart: always
image: artik3314/react_api:latest
environment:
- ASPNETCORE_ENVIRONMENT=Development
ports:
- "5010:5001"
networks:
- asp-dotnet-network
depends_on:
- db
db:
image: postgres:latest
container_name: ContainerPostgreSQL
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: root
POSTGRES_DB: Example
ports:
- "5432:5432"
volumes:
- postgres_data:/var/lib/postgresql/data
networks:
- asp-dotnet-network
volumes:
postgres_data:
networks:
asp-dotnet-network:
driver: bridge
nginx.conf
events {
worker_connections 1024;
}
http {
upstream angular {
# These are references to our backend containers, facilitated by
# Compose, as defined in docker-compose.yml
server angular:4200;
}
upstream api {
# These are references to our backend containers, facilitated by
# Compose, as defined in docker-compose.yml
server api:5001;
}
server {
listen 80;
server_name angular;
server_name api;
location / {
resolver 127.0.0.11 valid=30s;
proxy_pass http://angular;
# для работы websocket
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $host;
}
location /api {
resolver 127.0.0.11 valid=30s;
proxy_pass https://api;
proxy_set_header Host $host;
}
}
}
- docker compose up --build
- docker compose up --build -d
- docker compose down
- git stash -u сохраняет все изменения перед созданием новой ветки
- docker container ls - список все запущенных контейнеров
- docker exec -it 39fdcf0aff7b bash - запуск команды в контейнере по id контейнера
- example=# INSERT INTO "Students" ("ID", "LastName", "FirstMidName", "EnrollmentDate") VALUES (DEFAULT, 'Whale', 'Moby', '2013-03-20');
- docker compose rm
- docker compose up --build
- docker compose watch