一、Docker Compose 容器编排
1、Docker Compose 前身是Fig,是一个定义及运行多个 Docker 容器的工具;
2、使用 Docker Compose 不再需要使用 shell脚本来启动容器;
3、Docker Compose 非常适合组合使用多个容器进行开发的场景。
4、Docker Compose 的文件结构:
YAML 是一种标记语言很直观的数据序列化格式
以下是文件格式及编写注意事项:
- 不支持制表符tab键缩进,需要使用空格键缩进
- 通常开头缩进2个字符
- 字符后缩进1个空格,如冒号、逗号、横杠
- 用#号注释
- 如包含特殊字符用单引号引起来
- 布尔值必须用引号括起来
二、Docker Compose 配置:
(1)常用字段:
字段 | 描述 |
---|---|
build dockerfile context | 指Dockerfile文件名构建上下文路径 |
image | 指定镜像 |
command | 执行命令,覆盖默认命令 |
container name | 指定容器名称,由于容器名称是唯一的,如果指定自定义名称,则无法scale |
deploy | 指定部署和运行服务的相关配置,只能在Swarm模式使用 |
environment | 添加环境变量 |
networks | 加入网络 |
ports | 暴露容器端口,与-p相同,但端口不能低于60 |
volumes | 挂载宿主机路径或命令卷 |
restart | 重启策略,默认no,always, no-failure,unless-stoped |
hostname | 容器主机名 |
(2)常用命令:
字段 | 描述 |
---|---|
build | 重新构建服务 |
ps | 列出容器 |
up | 创建和启动容器 |
exec | 在容器执行命令 |
scale | 指定一个服务容器启动数量 |
top | 显示容器进程 |
logs | 查看容器输出 |
down | 删除容器、网络、数据卷和镜像 |
stop/start/restart | 停止/启动/重启服务 |
(3) Compose 命令说明:
基本的使用格式
docker-compose +选项 +命令 +参数
docker-compose选项
- verbose 输出更多调试信息
- version打印版本并退出
- f,- -file FILE使用特定的compose模板文件,默认使用docker-compose.yml
- p,- -project-name NAME指定项目名称,默认使用目录名称
二、编排实例:
(1)优化网络:
vim /etc/sysctl.conf
net.ipv4.ip_forward=1 ##文件末尾加入
sysctl -p ##修改生效
systemctl restart network ##重启网络服务
systemctl restart docker #重启docker
(2)将下载好的 docker-compose 上传到 /usr/bin/ 目录下,并赋予执行权限:
chmod +x docker-compose
(3)创建工作目录(将nginx软件包拷贝到nginx目录下):
[root@localhost ~]# mkdir compose
[root@localhost ~]# cd compose/
[root@localhost compose]# mkdir nginx
[root@localhost nginx]# vi Dockerfile
FROM centos:7
MAINTAINER this is nginx image <kkun>
RUN yum -y update
RUN yum -y install pcre-devel zlib-devel gcc gcc-c++ make
RUN useradd -M -s /sbin/nologin nginx
ADD nginx-1.12.2 nginx-1.12.2
RUN cd nginx-1.12.2 && ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module && make -j2 && make install
RUN ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
RUN echo "daemon off;" >> /usr/local/nginx/conf/nginx.conf
ADD run.sh /run.sh
RUN chmod 755 run.sh
EXPOSE 80
EXPOSE 443
CMD ["./run.sh"]
[root@localhost nginx]# vi run.sh
#!/bin/bash
/usr/local/nginx/sbin/nginx
(4)创建编辑 yml 文件:
[root@localhost compose]# vi nginx.yml
version: '3'
services:
nginx:
hostname: nginx
build:
context: ./nginx
dockerfile: Dockerfile
ports:
- 1216:80
- 1217:443
networks:
- abc
volumes:
- ./wwwroot:/usr/local/nginx/html
networks:
abc:
(5)此时,可以用 tree 命令,查看一下根目录下的文件结构:
[root@localhost compose]# tree -L 2
.
├── nginx
│ ├── Dockerfile
│ ├── nginx-1.12.2
│ ├── nginx-1.12.2.tar.gz
│ └── run.sh
├── nginx.yml
└── wwwroot
└── index.html
3 directories, 5 files
(6)执行开启:
docker-compose -f nginx.yml up -d
查看镜像和容器是否都正常且创建成功:
[root@localhost compose]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
630fbee90f2c compose_nginx "./run.sh" 2 hours ago Up 2 hours 0.0.0.0:1216->80/tcp, 0.0.0.0:1217->443/tcp compose_nginx_1
(7)我们可以在站点目录下,创建一个网页,用浏览器访问是否可以正常显示:
[root@localhost compose]# echo "hello word" > wwwroot/index.html
浏览器访问(IP地址为本机地址):http://20.0.0.3:1216/