docker--supervisor、compose.pdf

来源:互联网 发布:电影社交网络百度云 编辑:程序博客网 时间:2024/05/22 16:52

一、使用 Supervisor 来管理进程

Docker 容器在启动的时候开启单个进程,例如,一个ssh 或者Apache 的daemon服务。
但我们经常需要在一个机器上开启多个服务,这可以有很多方法,最简单的就是把多个启动命令放到一个启动脚本里面,启动的时候直街启动这个脚本。
例如:  docker run  -d 镜像  /run.sh
另一种方法就是使用进程管理工具 supervisor 。
进程管理工具 supervisor 来管理容器中的多个进程。使用Supervisor 可以更好的控制、管理、重启我们希望运行的进程。
Supervisor 是一个进程控制系统,它是一个C/S系统(注意:其提供WEB借口给用户查询和控制),它允许用户去监控和控制在类UNIX系统的进程。
在这里我们演示一下如何同时使用ssh和Apache服务。
准备工作;(这里ip是 192.168.221.141)
[root@gy ~]# systemctl start docker
[root@gy ~]# setenforce 0
[root@gy ~]# vim /etc/sysctl.conf
[root@gy ~]# sysctl -p
net.ipv4.ip_forward = 1
配置:
  首先创建一个Dockerfile,
[root@gy ~]# mkdir -p /docker/apache
[root@gy ~]# cd /docker/apache
[root@gy apache]# vim Dockerfile

在Dockerfile中写入一下内容;

 然后再在Apache目录下,创建supervisord.conf 配置文件
[root@gy apache]# vim supervisord.conf

接下来,创建image

[root@gy apache]# docker build  -t centos:superviord .

查看镜像

启动 supervisor 容器(由于后面需要80端口,这里就用-P指定端口了)
[root@gy ~]# docker run -dit -P -d centos:superviord 

测试 :访问容器提供的http://192.168.221.141:32768

或ssh
[root@gy ~]# ssh root@192.168.221.141

二、 Docker Compose项目
compose 项目简介
compose项目来源于之前的Fig项目,使用python代码编写。compose项目主要用于编排部署docker的应用。本身与docker / swarm 配合度很高。
Docker Compose 是Docker编排服务的一部分,可以让用户在其他平台快速安装Docker,Swarm 可以让docker容器在集群中高效运转,而Compose可以让用户在集群中部署分布式应用。简单的说,docker compose 属于一个“应用层”的服务,用户可以定义哪个容器组运行哪个应用。它支持动态改变应用,并在需要时扩展。
相对于kubernetes 来说功能比较简单,相当于kubernetes的一个子集。
dockerfile 可以让用户冠以一个单独的应用容器,而compose则允许用户在一个模板(yaml格式)中定义一组相关联的应用容器(被称为一个project,即项目),例如一个调度器,两个web服务容器再加上后端的数据库服务容器等。


安装Compose 之前,要先安装docker,这里就不说了
安装Docker-compose
先安装pip
注;  pip 类似RedHat 里面的 yum,安装python包非常方便。
[root@gy ~]# wget https://bootstrap.pypa.io/get-pip.py

[root@gy ~]# python get-pip.py

再装compose
[root@gy ~]# pip install docker-compose

[root@gy ~]# ln -s /usr/bin/docker-compose  /usr/local/bin/
安装完成后,可以使用docker-compose的版本和命令的用法。
[root@gy ~]# docker-compose -v

[root@gy ~]# docker-compose -h

首先介绍几个术语。
服务(serveice): 一个应用容器,它实际上可以运行多个相同的镜像实例。
项目 (project ): 由一组关联的应用容器组成的一个完整业务单元。
可见,一个项目可以有多个服务(容器)关联而成,compose面向项目尽心管理。
docker-compose命令说明
大多数compose命令都是运行于一个或者多个服务的,如果服务没有指定,该命令将会应用到所有服务,如果要获得所有可用信息,使用命令;
docker-compose [command] --help

下面是命令(COMMAND)的说明:

build 
创建或者再建服务 
服务被创建后会标记为project_service(比如composetest_db),如果改变了一个服务的Dockerfile或者构建目录的内容,可以使用docker-compose build来重建它

 

help 
显示命令的帮助和使用信息

 

kill 
通过发送SIGKILL的信号强制停止运行的容器,这个信号可以选择性的通过,比如: 
docker-compose kill -s SIGKINT

 

logs 
显示服务的日志输出

 

port 
为端口绑定输出公共信息

 

ps 
显示容器

 

pull 
拉取服务镜像

 

rm 
删除停止的容器

 

run 
在服务上运行一个一次性命令,比如: 
docker-compose run web Python manage.pyshell

 

scale 
设置为一个服务启动的容器数量,数量是以这样的参数形式指定的:service=num,比如: 
docker-compose scale web=2 worker=3

 

start 
启动已经存在的容器作为一个服务

 

stop 
停止运行的容器而不删除它们,它们可以使用命令docker-composestart重新启动起来

 

up 
为一个服务构建、创建、启动、附加到容器 
连接的服务会被启动,除非它们已经在运行了 

运行docker-composeup -d会在后台启动容器并使它们运行 

 

–verbose 
显示更多输出

 

–version 
显示版本号并退出

 

-f,–file FILE 
指定一个可选的Compose yaml文件(默认:docker-compose.yml)

 

-p,–project-name NAME 
指定可选的项目名称(默认:当前目录名称)

 

docker-compose.yml命令说明

每一个定义在docker-compose.yml中的服务必须明确指定一个image或者build选项,这与docker run命令行中输入的是对应相同的,对于docker run,在Dockerfile文件中指定的选项(比如CMD、EXPOSE、VOLUME、ENV)是默认的,因此不必在docker-compose.yml中再指定一次

 

image

标明image的ID,这个image ID可以是本地也可以是远程的,如果本地不存在,Compose会尝试去pull下来

image: ubuntu

image: orchardup/postgresql

image: a4bc65fd   

 

build

该参数指定Dockerfile文件的路径,该目录也是发送到守护进程的构建环境(这句有点),Compose将会以一个已存在的名称进行构建并标记,并随后使用这个image 

build: /path/to/build/dir

 

command

重写默认的命令,覆盖容器启动后默认执行的命令

command:要执行的命令

 

links

连接到其他服务中的容器,可以指定服务名称和这个链接的别名,或者只指定服务名称

links:   

 - db

 -db:database

 -redis

此时,在容器内部,会在/etc/hosts文件中用别名创建一个条目,就像这样:

192.168.221.141 db

192.168.221.141  database

192.168.221.141 redis

 

环境变量也会被创建,关于环境变量的参数,会在后面讲到

external_links

连接到在这个docker-compose.yml文件或者Compose外部启动的容器,特别是对于提供共享和公共服务的容器。在指定容器名称和别名时,external_links遵循着和links相同的语义用法

external_links:   

 -redis_1   

 -project_db_1:mysql

 -project_db_1:postgresql

 

ports

暴露端口,指定两者的端口(主机:容器),或者只是容器的端口(主机会被随机分配一个端口)

注:当以主机:容器的形式来映射端口时,如果使容器的端口小于60,那可能会出现错误,因为YAML会将xx:yy这样格式的数据解析为六十进制的数据,基于这个原因,时刻记得要将端口映射明确指定为字符串

ports:   

 -"3000"   

 -"8000:8000"   

 -"49100:22"   

 -"127.0.0.1:8001:8001"   

 

expose

暴露端口而不必向主机发布它们,而只是会向链接的服务(linked service)提供,只有内部端口可以被指定

 

expose:   

 -"3000"   

 -"8000"   

 

volumes

挂载路径最为卷,可以选择性的指定一个主机上的路径(主机:容器),或是一种可使用的模式(主机:容器:ro)

volumes:
- /var/lib/mysql
- cache/:/tmp/cache
- ~/configs:/etc/configs/:ro

 

volumes_from:   

从另一个服务或容器挂载它的所有卷。

volumes_from:

- service_name

 -container_name

 

environment

加入环境变量,可以使用数组或者字典,只有一个key的环境变量可以在运行Compose的机器上找到对应的值,这有助于加密的或者特殊主机的值

environment:   

 RACK_ENV: development   

 SESSION_SECRET:   

environments:   

  -RACK_ENV=development   

  -SESSION_SECRET   

 

env_file

从一个文件中加入环境变量

如果通过docker-compose -f FILE 指定了模板文件,则env_file中路径会基于模板文件路径。如果有变量名称与 environment 指令冲突,则以后者为准。

env_file: .env
env_file:
- ./common.env
- ./apps/web.env
- /opt/secrets.env
环境变量文件中每一行必须符合格式,支持 #开头的注释行。
# common.env: Set Rails/Rack environment
RACK_ENV=development

 

net

网络模式,可以在docker客户端的--net参数中指定这些值

net: "bridge"   

net: "none"   

net: "container:[name orid]"   

net: "host"   

 

dns

自定义DNS服务,可以是一个单独的值或者一张列表

dns: 8.8.8.8   

dns:   

  -8.8.8.8   

  -9.9.9.9   

 

dns_search

自定义DNS搜索范围,可以是单独的值或者一张列表

 

dns_search: example.com   

dns_search:   

  -dc1.example.com   

  -dc2.example.com   

 

使用Compose只需要简单的三个步骤:

首先,使用Dockerfiledocker  commit来定义你的应用环境

第二步,用一个docker-compose.yml来定义你的应用,他们可以在下个互隔离的容器中组成你的应用。

第三步,执行docker-composeup  -d来启动你的应用,它会根据docker-compose.yml的设置来pull/run相关的容器。

测试案例

下面,我们创建一个经典的 Web 项目:一个Haproxy,挂载三个 Web 容器。

 

docker-haproxy目录,作为项目工作目录,并在其中分别创建两个子目录:haproxy和web。

#mkdir -p /root/docker-haproxy/{haproxy,web}

在/root/docker-haproxy/目录下创建docker-compose.yml文件

在/root/docker-haproxy/haproxy目录下创建haproxy的主配置文件haproxy.cfg

在/root/docker-haproxy/web目录下存放web站点网页文件

目录结构如下图所示:


[root@gy ~]# mkdir -p /root/docker-haproxy/{haproxy,web}
[root@gy docker-haproxy]# vim dock-compose.yml

docker-compose.yml
编写 docker-compose.yml文件,这个compose使用的主模板文件。内容简单,指定3个web容器,以及1个haproxy容器。
[root@gy docker-haproxy]# cd haproxy/
[root@gy hapoxy]# vim haproxy.cfg

[root@gy hapoxy]# cd ..
[root@gy docker-haproxy]# cd web/
root@gy web]# vim index.html

查看目录:

运行 compose项目;
在docker-haproxy目录下执行docker-compose up -d 来启动容器
注意:必须在docker-haproxy目录下,如不在此目录,需要进入此目录。
[root@gy docker-haproxy]# docker-compose up -d
注意:如果启动失败,请查看80端口是否占用。
查看启动情况

或者
[root@gy docker-haproxy]# docker-compose ps

打开浏览器访问本机ip地址:
http://192.168.221.141

或者
http://192.168.221.141:70