04/02/2018 - DOCKER
In this example, we are creating docker-compose-*.yml
files for DEV
, STAG
and PROD
environments. They all will have some default settings/variables and some custom ones.
DEV
, STAG
and PROD
environments.DEV
environment.STAG
environment.PROD
environment.DEV
- Variables will come from ".env" file.STAG
and PROD
- Variables will come from ".env" file and when we run docker-compose up
command.If you don't instruct, Docker by default reads "docker-compose.yml" and "docker-compose.override.yml" files so the docker-compose up
will boot DEV
environment. You'll see below how it can be used for other stages later on.
ubuntu@linux:~/football$ tree -a
.
├── docker
│ ├── docker-compose.override.yml # DEV (default)
│ ├── docker-compose.prod.yml # PROD
│ ├── docker-compose.stag.yml # STAG
│ ├── docker-compose.yml # Common
│ ├── .env
│ └── nginx
│ ├── Dockerfile # DEV (default)
│ ├── Dockerfile.prod # PROD
│ └── Dockerfile.stag # STAG
├── index.html
└── logs
└── nginx
├── access.log
└── error.log
4 directories, 11 files
ubuntu@linux:~/football$ cat index.html
Hello!
ubuntu@linux:~/football$ cat docker/.env
COMPOSE_PROJECT_NAME=football
NGINX_IP=192.168.0.11
NETWORK_SUBNET=192.168.0.0/24
ubuntu@linux:~/football$ cat docker/docker-compose.yml
version: '3'
services:
nginx_img:
container_name: ${COMPOSE_PROJECT_NAME}_nginx_con
build:
context: ./nginx
networks:
public_net:
ipv4_address: ${NGINX_IP}
networks:
public_net:
driver: bridge
ipam:
driver: default
config:
- subnet: ${NETWORK_SUBNET}
ubuntu@linux:~/football$ cat docker/docker-compose.override.yml
version: '3'
services:
nginx_img:
build:
dockerfile: Dockerfile
ports:
- 1000:80
volumes:
- ..:/usr/share/nginx/html
- ../logs/nginx:/var/log/nginx
environment:
- ENV=dev
ubuntu@linux:~/football$ cat docker/docker-compose.stag.yml
version: '3'
services:
nginx_img:
build:
dockerfile: Dockerfile.stag
ports:
- 80:80
volumes:
- ..:/usr/share/nginx/html
environment:
- ENV=stag
ubuntu@linux:~/football$ cat docker/docker-compose.prod.yml
version: '3'
services:
nginx_img:
build:
dockerfile: Dockerfile.prod
ports:
- 80:80
- 443:443
volumes:
- ..:/usr/share/nginx/html
environment:
- ENV=prod
ubuntu@linux:~/football$ cat docker/nginx/Dockerfile
FROM nginx:1.13.8
RUN echo 'Dev Dockerfile'
ubuntu@linux:~/football$ cat docker/nginx/Dockerfile.stag
FROM nginx:1.13.8
RUN echo 'Stag Dockerfile'
ubuntu@linux:~/football$ cat docker/nginx/Dockerfile.prod
FROM nginx:1.13.8
RUN echo 'Prod Dockerfile'
ubuntu@linux:~/football/docker$ docker-compose config
networks:
public_net:
driver: bridge
ipam:
config:
- subnet: 192.168.0.0/24
driver: default
services:
nginx_img:
build:
context: /home/ubuntu/football/docker/nginx
dockerfile: Dockerfile
container_name: football_nginx_con
environment:
ENV: dev
networks:
public_net:
ipv4_address: 192.168.0.11
ports:
- 1000:80/tcp
volumes:
- /home/ubuntu/football:/usr/share/nginx/html:rw
- /home/ubuntu/football/logs/nginx:/var/log/nginx:rw
version: '3.0'
ubuntu@linux:~/football/docker$ NGINX_IP=192.168.0.88 docker-compose -f docker-compose.yml -f docker-compose.stag.yml config
networks:
public_net:
driver: bridge
ipam:
config:
- subnet: 192.168.0.0/24
driver: default
services:
nginx_img:
build:
context: /home/ubuntu/football/docker/nginx
dockerfile: Dockerfile.stag
container_name: football_nginx_con
environment:
ENV: stag
networks:
public_net:
ipv4_address: 192.168.0.88
ports:
- 80:80/tcp
volumes:
- /home/ubuntu/football:/usr/share/nginx/html:rw
version: '3.0'
ubuntu@linux:~/football/docker$ NGINX_IP=192.168.2.99 docker-compose -f docker-compose.yml -f docker-compose.prod.yml config
networks:
public_net:
driver: bridge
ipam:
config:
- subnet: 192.168.0.0/24
driver: default
services:
nginx_img:
build:
context: /home/ubuntu/football/docker/nginx
dockerfile: Dockerfile.prod
container_name: football_nginx_con
environment:
ENV: prod
networks:
public_net:
ipv4_address: 192.168.2.99
ports:
- 80:80/tcp
- 443:443/tcp
volumes:
- /home/ubuntu/football:/usr/share/nginx/html:rw
version: '3.0'
ubuntu@linux:~/football/docker$ docker-compose up -d --build
Dev Dockerfile
ubuntu@linux:~$ docker exec -it football_nginx_con printenv ENV
dev
ubuntu@linux:~$ curl 192.168.0.11
Hello!
ubuntu@linux:~/football/docker$ NGINX_IP=192.168.0.88 docker-compose -f docker-compose.yml -f docker-compose.stag.yml up -d --build
Stag Dockerfile
ubuntu@linux:~$ curl 192.168.0.88
Hello!
ubuntu@linux:~$ docker exec -it football_nginx_con printenv ENV
stag
ubuntu@linux:~/football/docker$ NGINX_IP=192.168.0.99 docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d --build
Prod Dockerfile
ubuntu@linux:~$ curl 192.168.0.99
Hello!
ubuntu@linux:~$ docker exec -it football_nginx_con printenv ENV
prod