Docker Compose (多个容器编排)
是一个定义及运行多个docker容器的工具,可以使用YAML文件来配置应用,使用命令,可以创建并启动配置中的所有服务。docker compose会通过解析容器之间的依赖关系,按先后顺序启动容器。
适应所有环境过程
- 使用Dockerfile定义应用程序的环境,可以在任何地方复制
- docker-compose.yml中定义组成应用程序服务,可以在任何环境中运行
- 运行docker-compose开始运行应用程序
官方文档:https://docs.docker.com/compose/overview
Docker compose优点
能将多个繁琐的docker命令步奏,简化成一个命令
compose原理
首先docker-compose up -d指令启动,一个docker-compose.yml定义了一个docker -compose的project(一个项目),compose会传到project参数由project模块处理
其次若果宿主机有与应用对应的容器,docker-compose将进行逻辑判断,可以指定直接启动已有容器,docker-compose会执行server模块的容器重启,否则直接启动已有容器。
最后就是在container模块执行启动时,模块会调用docker-py客户端执行post请求
compose案例
#首先安装docker-compose
/usr/bin/docker-compose #一般默认在这里面
#如果没有下载到这里面
[root@localhost ~]# chmod +x /usr/bin/docker-compose #给他可执行权限
[root@localhost ~]# docker-compose version #查看版本号就可以使用了
docker-compose version 1.21.1, build 5a3f1a3
docker-py version: 3.3.0
CPython version: 3.6.5
OpenSSL version: OpenSSL 1.0.1t 3 May 2016
docker-compose用法
格式:docker-compose [-f
docker-compose常用选项-f
- --verbose:输出更多调试信息
- --version:打印版本信息
- -f,--file FILE 使用特定的compose模板文件,默认为docker-compose.yml
- -p,--project-name NAME 指定项目名称,默认使用目录名称
docker-compose常用命令:
- –build 在启动容器前构建服务镜像
- kill 杀掉容器
- logs 显示容器输出内容
- port 打印绑定的开放端口
- ps 显示容器
- pull 拉去服务镜像
- restart 重启服务
- rm 删除停止的容器
- run 运行一个一次性命令
- scale 设置服务的容器数目
- exec 切换到容器内
- start 开启服务
- stop 停止服务
- up 创建并启动服务
docker-compose中的yml文件
YAML全称YAML Ain't Markup Language表示“YAML不是一种标记语言”的缩写,为了强调YAML语言以数据作为中心,不是以标记语言为重点,使用返璞词重新命名。
YAML是一种直观的能够被电脑识别的数据序列化格式,是一个可读性高且容易被人类阅读,容易和脚本语言交互,用来表达资料序列的编程语言。
YAML文件注意事项
- 通常开头缩进两个空格(不能使用tab键)
- 字符的后面缩进一个空格,冒号,逗号,横杆等。
- 支持#注释
- 允许加入空格
docker-comopse.yml文件lnmp
version: '3'
services:
nginx:
hostname: nginx
build:
context: ./nginx
dockerfile: Dockerfile
ports:
- 80:80
networks:
- lnmp
volumes:
- ./wwwroot:/usr/local/nginx/html
php:
hostname: php
build:
context: ./php
dockerfile: Dockerfile
ports:
- 9000:9000
networks:
- lnmp
volumes:
- ./wwwroot:/usr/local/nginx/html
mysql:
hostname: mysql
image: mysql:5.6
ports:
- 3306:3306
networks:
- lnmp
volumes:
- ./mysql/conf:/etc/mysql/conf.d
- ./mysql/data:/var/lib/mysql
command: --character-set-server=utf8
environment:
MYSQL_ROOT_PASSWORD: 123456
MYSQL_DATABASE: wordpress
MYSQL_USER: user
MYSQL_PASSWORD: user123
networks:
lnmp:
docker-compose中YAML常用字段
- images用来指定服务的镜像名称或镜像ID,如果镜像在本地不存在,compose将会尝试去拉取这个镜像。
- volumes指令用于设置数据卷挂载路径,数据卷挂载路径可以是一个目录或一个已经存在的数据卷容器,可以设置宿主机路径HOST:CONTAINER或加*问模式HOST:CONTAINER:ro。使用ro表示对于容器来说数据卷是只读的,这样可以有效地保护宿主机的文件系统。
- networks指令用于设置指定网络
- command覆盖容器启动后默认执行的命令
- ports暴露端口,与-p相同,但端口不能低于60
#使用docker编译lnmp
上传或者编译lnmp目录包,里面有各种配置,以及最主要的compose.yml,宿主机
[root@localhost ~]# cd compose_lnmp/
[root@localhost compose_lnmp]# ls
docker-compose.yml mysql nginx php wwwroot
[root@localhost compose_lnmp]# ls mysql/
conf data
[root@localhost compose_lnmp]# ls nginx/
Dockerfile nginx-1.12.1.tar.gz nginx.conf run.sh
[root@localhost compose_lnmp]# ls php/
Dockerfile php-5.6.39.tar.gz php.ini
[root@localhost compose_lnmp]# ls wwwroot/
index.html index.php
#所有准备好后
docker-compose up -d #在目录里,要识别到.yml文件
构建完成后
docker-compose ps #查看状态
docker-compose restart #三个容器重启(也就是说一下管理三个容器)
此时就可以查看端口,访问页面了