mirror of
https://github.com/docker/awesome-compose.git
synced 2025-04-19 07:18:06 +02:00
Adopt Compose v2 (#240)
* Adopt Compose v2 Signed-off-by: Nicolas De Loof <nicolas.deloof@gmail.com>
This commit is contained in:
parent
bc95525543
commit
667bd9facb
79 changed files with 237 additions and 237 deletions
|
@ -9,14 +9,14 @@ Project structure:
|
|||
│ ...
|
||||
├── db
|
||||
│ └── password.txt
|
||||
├── docker-compose.yaml
|
||||
├── compose.yaml
|
||||
├── frontend
|
||||
│ ├── ...
|
||||
│ └── Dockerfile
|
||||
└── README.md
|
||||
```
|
||||
|
||||
[_docker-compose.yaml_](docker-compose.yaml)
|
||||
[_compose.yaml_](compose.yaml)
|
||||
```
|
||||
services:
|
||||
backend:
|
||||
|
@ -39,7 +39,7 @@ services:
|
|||
...
|
||||
```
|
||||
The compose file defines an application with three services `frontend`, `backend` and `db`.
|
||||
When deploying the application, docker-compose maps port 3000 of the frontend service container to port 3000 of the host as specified in the file.
|
||||
When deploying the application, docker compose maps port 3000 of the frontend service container to port 3000 of the host as specified in the file.
|
||||
Make sure port 3000 on the host is not already being in use.
|
||||
|
||||
> ℹ️ **_INFO_**
|
||||
|
@ -47,10 +47,10 @@ Make sure port 3000 on the host is not already being in use.
|
|||
> You still can use the MySQL image by uncommenting the following line in the Compose file
|
||||
> `#image: mysql:8.0.27`
|
||||
|
||||
## Deploy with docker-compose
|
||||
## Deploy with docker compose
|
||||
|
||||
```
|
||||
$ docker-compose up -d
|
||||
$ docker compose up -d
|
||||
Creating network "react-express-mysql_default" with the default driver
|
||||
Building backend
|
||||
Step 1/16 : FROM node:10
|
||||
|
@ -87,7 +87,7 @@ $ curl localhost:80
|
|||
|
||||
Stop and remove the containers
|
||||
```
|
||||
$ docker-compose down
|
||||
$ docker compose down
|
||||
Stopping react-express-mysql_frontend_1 ... done
|
||||
Stopping react-express-mysql_backend_1 ... done
|
||||
Stopping react-express-mysql_db_1 ... done
|
||||
|
|
|
@ -4,12 +4,12 @@
|
|||
|
||||
### Local Development Features
|
||||
|
||||
- **Dev as close to prod as you can**. docker-compose builds a local development image that is just like production image except for the below dev-only features needed in image. Goal is to have dev env be as close to test and prod as possible while still giving all the nice tools to make you a happy dev.
|
||||
- **Dev as close to prod as you can**. docker compose builds a local development image that is just like production image except for the below dev-only features needed in image. Goal is to have dev env be as close to test and prod as possible while still giving all the nice tools to make you a happy dev.
|
||||
- **Prevent needing node/npm on host**. Installs `node_modules` outside app root in container so local development won't run into a problem of bind-mounting over it with local source code. This means it will run `npm install` once on container build and you don't need to run npm on host or on each docker run. It will re-run on build if you change `package.json`.
|
||||
- **One line startup**. Uses `docker-compose up` for single-line build and run of local development server.
|
||||
- **Edit locally while code runs in container**. docker-compose uses proper bind-mounts of host source code into container so you can edit locally while running code in Linux container.
|
||||
- **Use nodemon in container**. docker-compose uses nodemon for development for auto-restarting node in container when you change files on host.
|
||||
- **Enable debug from host to container**. opens the inspect port 9229 for using host-based debugging like chrome tools or VS Code. Nodemon enables `--inspect` by default in docker-compose.
|
||||
- **Edit locally while code runs in container**. docker compose uses proper bind-mounts of host source code into container so you can edit locally while running code in Linux container.
|
||||
- **Use nodemon in container**. docker compose uses nodemon for development for auto-restarting node in container when you change files on host.
|
||||
- **Enable debug from host to container**. opens the inspect port 9229 for using host-based debugging like chrome tools or VS Code. Nodemon enables `--inspect` by default in docker compose.
|
||||
- **Provides VSCode debug configs and tasks for tests**. for Visual Studio Code fans, `.vscode` directory has the goods, thanks to @JPLemelin.
|
||||
- **Small image and quick re-builds**. `COPY` in `package.json` and run `npm install` **before** `COPY` in your source code. This saves big on build time and keep container lean.
|
||||
- **Bind-mount package.json**. This allows adding packages in realtime without rebuilding images. e.g. `dce node npm install --save <package name>`
|
||||
|
@ -18,19 +18,19 @@
|
|||
### Production-minded Features
|
||||
|
||||
- **Use Docker build-in healthchecks**. uses Dockerfile `HEALTHCHECK` with `/healthz` route to help Docker know if your container is running properly (example always returns 200, but you get the idea).
|
||||
- **Proper NODE_ENV use**. Defaults to `NODE_ENV=production` in Dockerfile and overrides to `development` in docker-compose for local dev.
|
||||
- **Don't add dev dependencies into production image**. Proper `NODE_ENV` use means dev dependencies won't be installed in container by default. Using docker-compose will build with them by default.
|
||||
- **Proper NODE_ENV use**. Defaults to `NODE_ENV=production` in Dockerfile and overrides to `development` in docker compose for local dev.
|
||||
- **Don't add dev dependencies into production image**. Proper `NODE_ENV` use means dev dependencies won't be installed in container by default. Using docker compose will build with them by default.
|
||||
- **Enables proper SIGTERM/SIGINT for graceful exit**. Defaults to `node index.js` rather then npm for allowing graceful shutdown of node. npm doesn't pass SIGTERM/SIGINT properly (you can't ctrl-c when running `docker run` in foreground). To get `node index.js` to graceful exit, extra signal-catching code is needed. The `Dockerfile` and `index.js` document the options and links to known issues.
|
||||
- **Use docker-stack.yml example for Docker Swarm deployments**.
|
||||
|
||||
|
||||
### Assumptions
|
||||
|
||||
- You have Docker and Docker-Compose installed (Docker for Mac, Docker for Windows, get.docker.com and manual Compose installed for Linux).
|
||||
- You have Docker and docker compose installed (Docker for Mac, Docker for Windows, get.docker.com and manual Compose installed for Linux).
|
||||
- You want to use Docker for local development (i.e. never need to install node/npm on host) and have dev and prod Docker images be as close as possible.
|
||||
- You don't want to loose fidelity in your dev workflow. You want a easy environment setup, using local editors, node debug/inspect, local code repo, while node server runs in a container.
|
||||
- You use `docker-compose` for local development only (docker-compose was never intended to be a production deployment tool anyway).
|
||||
- The `docker-compose.yml` is not meant for `docker stack deploy` in Docker Swarm, it's meant for happy local development. Use `docker-stack.yml` for Swarm.
|
||||
- The `compose.yaml` is not meant for `docker stack deploy` in Docker Swarm, it's meant for happy local development. Use `docker-stack.yml` for Swarm.
|
||||
|
||||
|
||||
### Getting Started
|
||||
|
@ -46,7 +46,7 @@ If this was your Node.js app, to start local development you would:
|
|||
- Compose should detect if you need to rebuild due to changed package.json or Dockerfile, but `docker-compose build` works for manually building.
|
||||
- Be sure to use `docker-compose down` to cleanup after your done dev'ing.
|
||||
|
||||
If you wanted to add a package while docker-compose was running your app:
|
||||
If you wanted to add a package while docker compose was running your app:
|
||||
- `docker-compose exec node npm install --save <package name>`
|
||||
- This installs it inside the running container.
|
||||
- Nodemon will detect the change and restart.
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
"name": "node-docker-good-defaults",
|
||||
"private": true,
|
||||
"version": "2.0.1",
|
||||
"description": "Node.js Hello world app using docker features for easy docker-compose local dev and solid production defaults",
|
||||
"description": "Node.js Hello world app using docker features for easy docker compose local dev and solid production defaults",
|
||||
"author": "Bret Fisher <bret@bretfisher.com>",
|
||||
"main": "src/index.js",
|
||||
"scripts": {
|
||||
|
|
2
react-express-mysql/backend/src/config.js
vendored
2
react-express-mysql/backend/src/config.js
vendored
|
@ -14,7 +14,7 @@ module.exports = {
|
|||
: null
|
||||
},
|
||||
port: process.env.PORT || 8080
|
||||
// if you're not using docker-compose for local development, this will default to 8080
|
||||
// if you're not using docker compose for local development, this will default to 8080
|
||||
// to prevent non-root permission problems with 80. Dockerfile is set to make this 80
|
||||
// because containers don't have that issue :)
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue