2021-04-23 14:06:27 +00:00
## Compose sample application
2022-09-01 16:39:33 +00:00
### Use with Docker Development Environments
You can open this sample in the Dev Environments feature of Docker Desktop version 4.12 or later.
[Open in Docker Dev Environments <img src="../open_in_new.svg" alt="Open in Docker Dev Environments" align="top"/> ](https://open.docker.com/dashboard/dev-envs?url=https://github.com/docker/awesome-compose/tree/master/nginx-aspnet-mysql )
2021-04-23 14:06:27 +00:00
### ASP.NET server with an Nginx proxy and a MySQL database
Project structure:
```
.
├── backend
│ ├── Dockerfile
│ ├── aspnet.csproj
│ └── Program.cs
├── db
│ └── password.txt
2022-05-10 09:59:25 +00:00
├── compose.yaml
2021-04-23 14:06:27 +00:00
├── proxy
│ ├── conf
│ └── Dockerfile
└── README.md
```
2022-05-10 09:59:25 +00:00
[_compose.yaml_ ](compose.yaml )
2021-04-23 14:06:27 +00:00
```
services:
backend:
2022-07-12 12:39:02 +00:00
build:
context: backend
2021-04-23 14:06:27 +00:00
...
db:
2021-11-08 10:41:35 +00:00
# We use a mariadb image which supports both amd64 & arm64 architecture
2022-07-12 12:39:02 +00:00
image: mariadb:10-focal
2021-11-08 10:41:35 +00:00
# If you really want to use MySQL, uncomment the following line
2022-07-12 12:39:02 +00:00
#image: mysql:8
2021-04-23 14:06:27 +00:00
...
proxy:
build: proxy
ports:
- 80:80
...
```
The compose file defines an application with three services `proxy` , `backend` and `db` .
2022-05-10 09:59:25 +00:00
When deploying the application, docker compose maps port 80 of the proxy service container to port 80 of the host as specified in the file.
2021-04-23 14:06:27 +00:00
Make sure port 80 on the host is not already being in use.
2021-11-08 10:41:35 +00:00
> ℹ ️ **_INFO_**
> For compatibility purpose between `AMD64` and `ARM64` architecture, we use a MariaDB as database instead of MySQL.
> You still can use the MySQL image by uncommenting the following line in the Compose file
> `#image: mysql:8.0.27`
2022-05-10 09:59:25 +00:00
## Deploy with docker compose
2021-04-23 14:06:27 +00:00
```
2022-05-10 09:59:25 +00:00
$ docker compose up -d
2021-04-23 14:06:27 +00:00
```
## Expected result
Listing containers must show three containers running and the port mapping as below:
```
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8906b14c5ad1 nginx-aspnet-mysql_proxy "nginx -g 'daemon of…" 2 minutes ago Up 2 minutes 0.0.0.0:80->80/tcp nginx-aspnet-mysql
l_proxy_1
13e0e0a7715a nginx-aspnet-mysql_backend "/server" 2 minutes ago Up 2 minutes 8000/tcp nginx-aspnet-mysq
l_backend_1
ca8c5975d205 mysql:5.7 "docker-entrypoint.s…" 2 minutes ago Up 2 minutes 3306/tcp, 33060/tcp nginx-aspnet-mysql
l_db_1
```
After the application starts, navigate to `http://localhost:80` in your web browser or run:
```
$ curl localhost:80
["Blog post #0 ","Blog post #1 ","Blog post #2 ","Blog post #3 ","Blog post #4 "]
```
Stop and remove the containers
```
2022-05-10 09:59:25 +00:00
$ docker compose down
2021-04-23 14:06:27 +00:00
```