1.没有Docker Compose的“黑日子”
在前面的章节中,如果我们启动一个简单的应用,要把应用对应的容器启动起来,要把mysql容器启动起来,要把Nginx容器启动起来,要把redis容器启动起来。见证了多容器的APP是真的很恶心。总结起来要以下步骤:
- 要从Dockerfile build image或者Dockerhub拉取image,
- 要创建多个container
- 要管理这些container(启动、停止、删除)
2.Docker Compose
能不能统一管理以下呢~~OK,那就需要Docker Compose了。Docker Compose是一个工具,这个工具可以通过一个yml文件定义多容器的docker应用。通过一条命令就可以根据yml文件的定义去创建或管理多个容器。
docker Compose中有三个概念:
- services
一个service代表一个container,这个container可以从dockerhub的image来创建,或者从本地的Dockerfile build出来的image来创建 - networks
- volumes
services:
db:
image: postgres:9.4
volumes:
- "db-data:/var/lib/postgresql/data"
networks:
- back-tier
类似于docker run -d --network back-tier -v db-data:/var/lib/postgresql/data postgres:9.4
docker volume create db-data
docker network create -d bridge back-tier
3.Docker-compose
docker-compose -f docker-compose.yml up,该命令可以自动完成包括构建镜像,(重新)创建服务,启动服务,并关联服务相关容器的一系列操作。-f可以省略,如果docker-compose.yml文件就在当前目录下。
我们先看一个docker-compose.yml文件的例子:
[root@master word-press]# cat docker-compose.yml
version: '3'
services:
wordpress:
image: wordpress
ports:
- 8080:80
depends_on:
- mysql
environment:
WORDPRESS_DB_HOST: mysql
WORDPRESS_DB_PASSWORD: root
networks:
- my-bridge
mysql:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: wordpress
volumes:
- mysql-data:/var/lib/mysql
networks:
- my-bridge
volumes:
mysql-data:
networks:
my-bridge:
driver: bridge
执行docker-compose up可以看到以下内容:
使用docker-compose stop和start可以进行停止和启动。执行docker-compose down来停止以及删除container,并且还会删除network,但是这个down命令并不会删除本地的image。
docker-compose ps可以看到启动的container
docker-compose images可以看到其中的image有哪些
如果我们要进入到某个container里面该怎么办呢?
docker-compose exec mysql bash或者docker-compose exec wordpress bash