目录
一.docker-compose简述
二.安装docker-compose
三.Docker-compose的相关命令格式
四.compose编排nginx
什么是docker-compose
1.使用Dockerfile定义应用程序的环境,以便于在任何地方进行复制。
2.在docker-compose.yml中定义组成应用程序的服务,以便于他们可以在隔离的环境中一起运行。
3.运行docker-compose并且撰写开始并且运行你的整个应用程序
容器的编排与部署
compose的原理
首先,用户执行的docker-compose up指令调用了命令行中的启动方法。功能简单明了,一个docker-compose.yml文件定义了一个docker-compose的project(项目),docker-compose操作提供的命令行参数规则作为这个project的启动参数交由peoject模块去处理。
其次,如果当前宿主机已经存在与该应用对应的容器,docker-compose将进行为逻辑判断。如果用户指定可以重新启动已有服务,docker-compose就会执行service模块的容器重启方法,否则就直接启动已有容器。这两种操作的区别在于前者会停止旧的容器,创建新的容器,并且把旧的容器移除掉。在这个过程中创建容器的各项定义参数都是从docker-compose up指令和docker-compose.yml中传入的。
接着,启动容器的方法也很简洁,这个方法中完成了一个docker容器启动所需要的主要参数的封装,并且在container模块执行启动。
最后,container模块会调用docker-py客户端执行docker daemon发起创建容器的POST请求,再往后就是Docker处理的范畴
安装docker-compose
[root@192 ~]# vim /etc/sysctl.conf
[root@192 ~]# sysctl -p
net.ipv4.ip_forward = 1
[root@192 ~]#
//下载docker-compose执行文件
curl -L https://github.com/docker/compose/releases/download/1.21.1/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
//添加执行权限
chmod +x /usr/local/bin/docker-compose
//查看版本
[root@192 ~]# docker-compose -v
docker-compose version 1.21.1, build 5a3f1a3
[root@192 ~]#
注:在使用curl下载docker-compose时,可以选择更高的版本
//命令格式
docker-compose [ -f ... ] [options] [COMMAND] [ARGS...]
//命令选项如下
-f,--file FILE指定compose模板文件,默认为docker-compose.yml,可以多次指定。
-p,--project-name NAME指定项目名称,默认将使用所在目录名称作为项目名
-x-network-driver 使用Dockerfile的可拔插网络后端特性(需要docker 1.9版本以上)
-x-network-driver DRIVER指定网络后端的驱动,默认为bridge
-verbose 输出更多的调式信息
-v,打印版本并且退出
docker-compose up的使用
//docker-compose up的命令格式
docker-compose up [options] [--scale SERVICE=NUM...] [SERVICE...]
//选项包括:
-d 在后台运行服务容器
–no-color 不使用颜色来区分不同的服务的控制输出
–no-deps 不启动服务所链接的容器
–force-recreate 强制重新创建容器,不能与–no-recreate同时使用
–no-recreate 如果容器已经存在,则不重新创建,不能与–force-recreate同时使用
–no-build 不自动构建缺失的服务镜像
–build 在启动容器前构建服务镜像
–abort-on-container-exit 停止所有容器,如果任何一个容器被停止,不能与-d同时使用
-t, –timeout TIMEOUT 停止容器时候的超时(默认为10秒)
–remove-orphans 删除服务中没有在compose文件中定义的容器
–scale SERVICE=NUM 设置服务运行容器的个数,将覆盖在compose中通过scale指定的参数
docker-compose up
启动所有服务
docker-compose up -d
在后台所有启动服务
-f 指定使用的Compose模板文件,默认为docker-compose.yml,可以多次指定。
docker-compose -f docker-compose.yml up -d
docker-compose的常用命令
docker-compose常用命令:
build 构建或重建服务
kill 杀掉容器
logs 显示容器的输出内容
port 打印绑定的开放端口
ps 显示容器
pull 拉取服务镜像
restart 重启服务
rm 删除停止的容器
run 运行一个一次性命令
scale 设置服务的容器数目
exec 在容器里搪行命令
start 开启服务
stop 停止服务
up 创建并启动容器
YAML文件格式以及常用字段
- 在缩排中空白字符的数目并不是非常重要,只要相同阶层的元素左侧对齐就可以了(不过不能使用TAB字符);
- 通常开头缩进2个空格;
- 字符的后面缩进1个空格,比如冒号、逗号、横杆;
- 支持#注释;
- 允许在文件中加入选择性的空行,以增加可读性;
字段 | 描述 |
build dockerfile context |
指定dockerfile文件名构建镜像上下文路径 |
image | 指定镜像 |
command | 执行命令,覆盖默认命令 |
container_name | 指定容器名称,由于容器名称唯一,如果指定自定义名称,则无发scale |
deploy | 指定部署和运行服务相关配置,只能在swarm模式中使用 |
environment | 添加环境变量 |
networks | 加入网络,引用顶级networks下条目 |
ports | 映射端口,与-p功能相同,但是端口不能低于60 |
volumes | 挂载宿主机路径或命名卷。如果命名卷在顶级volumes定义卷名称 |
restart | 重启策略,默认为no,always | on-failure | unless-stopped |
hostname | 定义容器主机名 |
编排nginx容器的具体步骤
[root@192 ~]# tree /compose_nginx/
/compose_nginx/
├── docker-compose.yml
├── nginx
│?? ├── Dockerfile
│?? ├── nginx-1.12.2.tar.gz
│?? └── run.sh
└── wwwroot
├── 1.gif
└── index.html
2 directories, 6 files
[root@192 ~]#
//创建compose_nginx这个目录用来存放相关的编排文件以及素材
//创建docker-compose.yml这个目录用来编排服务
//创建nginx这个目录用来存放Dockerfile文件以及源码包
//船舰wwwroot用作数据卷,作为nginx的站点目录
[root@192 nginx]# cat Dockerfile
FROM guyton/centos6
MAINTAINER this is nginx image
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.tar.gz /usr/local/src
WORKDIR /usr/local/src
WORKDIR nginx-1.12.2
RUN ./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module && make && make install
ENV PATH /usr/local/nginx/sbin:$PATH
EXPOSE 80
EXPOSE 443
RUN echo "daemon off;" >> /usr/local/nginx/conf/nginx.conf
ADD run.sh /run.sh
RUN chmod 755 /run.sh
CMD ["/run.sh"]
[root@192 nginx]# cat run.sh
#!/bin/bash
/usr/local/nginx/sbin/nginx
[root@192 nginx]#
[root@192 ~]# cd /compose_nginx/
[root@192 compose_nginx]# cat docker-compose.yml
version: '3.3' ##定义compose的版本号,可用docker-compose version 命令查看docker-py version
services: ##定义具体的服务
nginx:
hostname: nginx ##定义编排的容器名字
build: ##指定创建容器服务的路径
context: ./nginx
dockerfile: Dockerfile
ports: ##映射容器服务的端口,相当于docker run中的 -p
- 1216:80
- 1217:443
networks: ##定义网络名称
- cluster
volumes: ##设置数据卷
- ./wwwroot/:/usr/local/nginx/html
networks: ##定义全局网络名称
cluster:
[root@192 compose_nginx]#
//-f必须指定具体的文件路径,所以在/compose_nginx目录下直接使用文件
[root@192 compose_nginx]# docker-compose -f docker-compose.yml up -d
Successfully built 64a6a18722f0
Successfully tagged compose_nginx_nginx:latest
WARNING: Image for service nginx was built because it did not already exist. To rebuild this image you must use `docker-compose build` or `docker-compose up --build`.
Creating compose_nginx_nginx_1 ... done
[root@192 compose_nginx]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
compose_nginx_nginx latest 64a6a18722f0 45 seconds ago 672MB
guyton/centos6 latest 5f3e1df89d22 15 months ago 228MB
[root@192 compose_nginx]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
30d2416ae0eb compose_nginx_nginx "/run.sh" About a minute ago Up About a minute 0.0.0.0:1216->80/tcp, 0.0.0.0:1217->443/tcp compose_nginx_nginx_1
//使用docker-compose编排之后会生产镜像文件,和容器