有时候,我们会发现把所有的应用都放在一个容器里面非常不好管理,由此引入了docker-compose,可以实现多个容器结合整合使用,其实本质上docker-compose也是docker的一部分,只是对于linux需要另外安装,安装也是很简单的。
docker-compose使用主要分为三部分:
创建单个容器的Dockerfile,对应每个功能,例如:nginx可以写一个Dockerfile,redis也可写一个Dockerfile
利用外层的docker-compose.yaml 来组合容器,形成多容器应用,其中包含着各个容器之前的关系,这个文件遵循yaml配置文件的编写规范。(springboot也是用这种类型的文件配置)
使用docker-compose up来启动这个多容器应用
接下来,通过简单的实例来对docker-compose来理解,一些具体的知识这里不再介绍,可自行百度。
利用docker-compose组建ghost 博客系统
主要有nginx、ghost、mysql三个容器
1. 新建 ghost主文件夹,下面三个文件夹分别是ghost、nginx、data,还有一个docker-compose.yaml配置文件
ghost放ghost-app的Dockerfile文件和ghost的配置文件
ngxin放nginx的Dockerfile的文件和nginx的虚拟主机配置文件
data放mysql的数据文件
这个地方特别注意下,所有非静态数据都需要另外挂载出来,容器不会存储动态文件
2. 介绍下docker-compose.yaml配置文件
#此处需要和你的docker-compose版本一致,例如你的docker-compose版本为1.7.8 那么这个版本就是2
version: "2"
networks:
ghost:
#服务,主要用来整合容器,表明他们之前的关系
services:
#二级标签是 ghost-app,这个名字是用户自己自定义,它就是服务名称。
ghost-app:
#基于一份 Dockerfile,在使用 up 启动之时执行构建任务,
#这个构建标签就是 build,它可以指定 Dockerfile 所在文件夹的路径
#这里就是找当前下的ghost文件夹
build: ghost
#加入指定网络
networks:
- ghost
#容器的依赖、启动先后的问题,先启动依赖
depends_on:
- db
ports:
- 2368:2368
nginx:
build: nginx
networks:
- ghost
depends_on:
- ghost-app
#宿主机会随机映射端口。
ports:
- 80:80
- 88:88
db:
#指定服务的镜像名称或镜像 ID
image: mysql:5.7.20
networks:
- ghost
#设置镜像变量,它可以保存变量到镜像里面
environment:
MYSQL_ROOT_PASSWORD: mysqlroot
MYSQL_USER: ghost
MYSQL_PASSWORD: ghost
#挂载一个目录或者一个已存在的数据卷容器,
volumes:
- ./data:/var/lib/mysql
ports:
- 3306:3306
上面的使用过的基本都解释了,其实里面还有很多,后续会单独对这个文件进行更加详细的介绍。
3. ghost文件夹内容
这个里面主要有个两个文件,一个自然是Dockerfile,另外一个就是ghost的应用配置文件
- config.production.json
{
"url": "http://localhost:2368/",
"server": {
"port": 2368,
"host": "0.0.0.0"
},
"database": {
"client": "mysql",
"connection": {
"host": "db",
"user": "ghost",
"password": "ghost",
"database": "ghost",
"port": 3306,
"charset": "utf8"
}
},
"mail": {
"transport": "Direct"
},
"logging": {
"transports": [
"file",
"stdout"
]
},
"process": "systemd",
"paths": {
"contentPath": "/var/lib/ghost/content"
}
}
这个文件就不介绍了,不是本系列文章的重点,想了解的小伙伴可以去百度ghost博客
- /ghost/Dockerfile
FROM ghost
COPY ./config.production.json /var/lib/ghost/content/config.production.json
EXPOSE 2368
这块的内容在之前的文章里面介绍到了,基本能看懂。不懂请翻阅之前的文章
4.data文件夹 主要用来挂载数据库信息,存放数据资料
5. nginx文件夹内容
主要有个两个文件 一个是Dockerfile文件,另外一个是nginx虚拟域名配置文件
- /nginx/Dockerfile
FROM nginx:latest
COPY ./nginx.conf /etc/nginx/conf.d/ghost.conf #这个路径对应的nginx的vhost目录,会自动加载.conf的文件
EXPOSE 80
EXPOSE 88
这个地方特意暴露两个端口,是为了测试后面的虚拟域名
- ghost.conf
server {
listen 88;
location / {
proxy_pass http://ghost-app:2368; #ghost-app会自动从配置文件中获取
}
}
到此我们的文件基本都写完了,不需要安装nginx 不需要安装数据库mysql,只需通过简单的配置就行了。
接下来我们看看怎么运行,
6. 运行这个多容器应用
进入.yaml文件的同级目录,然后使用docker-compose build 就会开始构建这个多容器
然后docker-compose up 启动这个多容器应用 加上-d参数就是后台运行,测试阶段建议不要-d 可以看到后台的一些信息。
7.介绍下docker-compose的一些常用命令
docker-compose build 构建
docker-compose stop 停止
docker-compose rm 删除
docker-compose up 启动