Docker---compose的部署以及编排容器服务

目录

一.docker-compose简述

二.安装docker-compose

三.Docker-compose的相关命令格式

四.compose编排nginx


一.docker-compose简述

什么是docker-compose

  • compose是定义和运行多容器的Docker应用程序的工具。使用compose可以使用YAML文件来配置应用程序。然后,使用单个命令,就可以创建并且启动配置中的所有服务。
  • compose适用于所有环境:生产,开发,测试以及CI工作流程。使用compose基本上有三步流程:

1.使用Dockerfile定义应用程序的环境,以便于在任何地方进行复制。

2.在docker-compose.yml中定义组成应用程序的服务,以便于他们可以在隔离的环境中一起运行。

3.运行docker-compose并且撰写开始并且运行你的整个应用程序

  • docker-compose是用来做docker的多容器控制,docker-compose是一个用来把docker自动化的工具,有了docker-compose你可以把所有繁复的docker操作使用一条命令自动化完成。

容器的编排与部署

  • docker有很多优势,但是对于运维或者开发来说,docker最大的优点在于它提供了一种全新的发布机制。这种发布机制指的是我们使用docker镜像作为统一的软件制品载体,使用docker容器提供独立的软件运行环境,使用docker hub提供镜像统一的协作,最重要的是该机制使用dockerfile定义容器内部行为和容器关键属性来支持软件的运行。
  • Dockerfile作为整个机制的核心,这是一个非常了不起的创新。因为在Dockerfile文件中,不但能够定义使用者在容器中需要进行的操作,而且能够定义容器中运行软件需要的配置,于是软件开发和运维终于能够在一个配置文件上达成统一。运维人员使用同一个Dockerfile能在不同的场合下“重现”与开发者环境中一模一样的运行单元(docker容器)出来。
  • 编排,即orchestration,它根据被部署的对象之间的耦合关系,以及被部署对象环境的依赖,制定部署流程中各个动作的执行顺序,部署过程所需要的依赖文件的存储位置和获取方式,以及如何验证部署成功,这些信息都会在编排工具中指定的格式(比如配置文件或者特定的代码)来要求运维人员定义并且保存起来,从而保证这个流程能够随时在全新的环境中可靠有序地重现出来。
  • 部署,即deployment,它是按照编排所指定地内容和流程,在目标机器上执行编排指定环境初始化,存放指定的依赖和文件,运行指定的部署动作,最终按照编排中的规则来确定联署成功。

compose的原理

  • docker-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

安装docker-compose

  • 网络优化
[root@192 ~]# vim /etc/sysctl.conf 
[root@192 ~]# sysctl -p
net.ipv4.ip_forward = 1
[root@192 ~]# 
  • 下载docker-compose执行文件,且添加权限
//下载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的相关命令格式

  • docker-compose的命令格式
//命令格式
docker-compose [ -f <arg>... ] [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  创建并启动容器

四.compose编排nginx

YAML文件格式以及常用字段

  • YAML是一种标记语言,可读性很强。类似于XML数据描述语言,语法比XML简单的多。YAML数据结构通过缩进来表示,连续的项目通过减号来表示,键值对用冒号分融,数组用括号括起来,hash用花括号。
  • YAML文件格式注意事项:
  1. 在缩排中空白字符的数目并不是非常重要,只要相同阶层的元素左侧对齐就可以了(不过不能使用TAB字符);
  2. 通常开头缩进2个空格;
  3. 字符的后面缩进1个空格,比如冒号、逗号、横杆;
  4. 支持#注释;
  5. 允许在文件中加入选择性的空行,以增加可读性;
  • docker-compose中YAML常用的字段:
字段 描述

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容器的具体步骤

  • 使用tree命令查看具体的文件以及目录
[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的站点目录
  • nginx目录下的Dockerfile配置以及run.sh文件的配置(镜像制作参考上一篇博文)
[root@192 nginx]# cat Dockerfile 
FROM guyton/centos6
MAINTAINER this is nginx image <xu>
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]# 

  • docker-compose.yml自动编排文件的配置(注意使用docker-compse.yml不能用Tab键,可以使用空格键)
[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编排之后会生产镜像文件,和容器
  • 检测容器服务

发布了144 篇原创文章 · 获赞 175 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qq_42761527/article/details/105229241