|
|
|
## Compose sample application
|
|
|
|
|
|
|
|
### An project deploy React Application with Nginx
|
|
|
|
|
|
|
|
Project structure:
|
|
|
|
|
|
|
|
```
|
|
|
|
├── compose.yaml
|
|
|
|
├── Dockerfile
|
|
|
|
├── .dockerignore
|
|
|
|
├── .nginx
|
|
|
|
│ └── nginx.conf
|
|
|
|
├── package.json
|
|
|
|
├── public
|
|
|
|
│ ├── ...
|
|
|
|
│ └── robots.txt
|
|
|
|
├── README.md
|
|
|
|
├── src
|
|
|
|
│ ├── ...
|
|
|
|
│ └── App.js
|
|
|
|
└── yarn.lock
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
[_compose.yaml_](compose.yaml)
|
|
|
|
|
|
|
|
```
|
|
|
|
services:
|
|
|
|
frontend:
|
|
|
|
build:
|
|
|
|
context: .
|
|
|
|
container_name: frontend
|
|
|
|
ports:
|
|
|
|
- "80:80"
|
|
|
|
```
|
|
|
|
|
|
|
|
The compose file defines an application with an services `frontend`.
|
|
|
|
When deploying the application, docker compose maps port 80 of the frontend service container to port 80 of the host as specified in the file.
|
|
|
|
|
|
|
|
## Deploy with docker compose
|
|
|
|
|
|
|
|
```
|
|
|
|
$ docker compose up -d
|
|
|
|
Building frontend
|
|
|
|
Sending build context to Docker daemon 1.49MB
|
|
|
|
|
|
|
|
Step 1/17 : FROM node:lts AS development
|
|
|
|
---> 9153ee3e2ced
|
|
|
|
Step 2/17 : WORKDIR /app
|
|
|
|
---> Using cache
|
|
|
|
---> a7909d92148a
|
|
|
|
Step 3/17 : COPY package.json /app/package.json
|
|
|
|
---> 2e690dfe99b2
|
|
|
|
Step 4/17 : COPY package-lock.json /app/package-lock.json
|
|
|
|
---> dd0132803f43
|
|
|
|
.....
|
|
|
|
Step 16/17 : COPY --from=build /app/build .
|
|
|
|
---> Using cache
|
|
|
|
---> 447488bdf601
|
|
|
|
Step 17/17 : ENTRYPOINT ["nginx", "-g", "daemon off;"]
|
|
|
|
---> Using cache
|
|
|
|
---> 6372a67cf86f
|
|
|
|
Successfully built 6372a67cf86f
|
|
|
|
Successfully tagged react-nginx_frontend:latest
|
|
|
|
```
|
|
|
|
|
|
|
|
## Expected result
|
|
|
|
|
|
|
|
Listing containers must show containers running and the port mapping as below:
|
|
|
|
|
|
|
|
```
|
|
|
|
$ docker ps
|
|
|
|
|
|
|
|
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
|
|
|
|
b6d00a4974ce react-nginx_frontend "nginx -g 'daemon of…" About a minute ago Up About a minute 0.0.0.0:80->80/tcp, :::80->80/tcp frontend
|
|
|
|
```
|
|
|
|
|
|
|
|
After the application start, navigate to http://localhost in your browser:
|
|
|
|
![page](./output.png)
|
|
|
|
|
|
|
|
Stop and remove the containers
|
|
|
|
|
|
|
|
```
|
|
|
|
$ docker compose down
|
|
|
|
Stopping frontend ... done
|
|
|
|
Removing frontend ... done
|
|
|
|
Removing network react-nginx_default
|
|
|
|
```
|