精华内容
下载资源
问答
  • 当我们使用 Docker Compose 启动应用程序之后,如果主机发生重启,应用容器无法自动启动。 我们可以使用 Docker Compose重启策略,但是也存在一些问题。 该笔记将记录:1)自动启动服务的解决方案、2)及其常见...

    永久地址:Docker Compose —— 开机自动启动应用容器(保存网址不迷路 🙃)

     

    问题描述

    当我们使用 Docker Compose 启动应用程序之后,如果主机发生重启,应用容器无法自动启动。

    我们可以使用 Docker Compose 的重启策略,但是也存在一些问题。

    该笔记将记录:1)自动启动服务的解决方案、2)及其常见问题和解决方法

    方法一、通过 Docker Restart Policy 方法

    在 Docker 中,支持 --restart 选项,来控制容器自动启动。在 Docker Compose 中,应该使用 restart 属性:

    version: "3.6"
    services:
    
      frontend:
        image: frontend:v1.0.0
        depends_on:
          - backend
        restart: always
    
      backend:
        image: backend:v1.0.0
        restart: always
    

    注意事项:
    1)Docker 并不知道这些服务的依赖关系及启动顺序,需要我们精心编排 docker-compose.yaml 文件;
    2)Docker Compose 不支持 deploy:restart_policy 属性,该属性只能用于 a swarm with docker stack deploy 环境;

    方法二、通过进程管理服务(推荐)

    该方法本质上还是在执行 docker-compose 命令。

    使用 systemd 管理

    如下示例,可以根据需要进行设置:

    # cat /etc/systemd/system/docker-compose-app.service
    
    [Unit]
    Description=Docker Compose Application Service
    Requires=docker.service
    After=docker.service
    
    [Service]
    Type=oneshot
    RemainAfterExit=yes
    WorkingDirectory=/srv/docker/app/
    ExecStart=/usr/local/bin/docker-compose up -d
    ExecStop=/usr/local/bin/docker-compose down
    TimeoutStartSec=0
    
    [Install]
    WantedBy=multi-user.target
    

    相关文章

    「Docker Compose」- docker-compose.yaml(学习笔记)
    「Docker Compose」- 在构建时,使用网络加速(代理)
    「Docker Compose」- 在 CI/CD 中,分离 docker-compose build 与 docker-compose up 指令
    「Docker Compose」- 向远程主机部署服务
    「Docker Compose」- 重启特定服务(容器),并使配置生效
    「Docker Compose」- 配置 Bash 补全(Bash Completion)
    「Docker Compose」- 生成镜像构建命令

    参考文献

    Start containers automatically | Docker Documentation
    How to run docker-compose up -d at system start up? - Stack Overflow
    Compose file version 3 reference | Docker Documentation

    展开全文
  • Docker Compose简介

    千次阅读 2021-03-25 19:21:30
    目录Docker Compose 容器编排理论加实操一、Docker Compose简介二、Docker Compose配置介绍(一)、Docker Compose配置常用字段(二)、Docker Compose 常用命令(三)、Compose 命令说明三、Dokcer 编排实验3.1 ...

    Docker Compose 容器编排理论加实操

    一、Docker Compose简介

    • Docker Compose的前身是Fig,Fig被Docker收购之后正式更名为Compose,Compose向下兼容Fig

    • Docker Compose是一个用于定义和运行多容器Docker应用的工具,只需要一个Compose的配置文件和一个简单的命令就可以创建并运行应用所需的所有容器,而不再需要使用shell脚本来启动容器

    • Docker Compose 非常适合组合使用多个容器进行开发的场景

    • Docker Compose 的文件结构:

      vim docker-compose.yml

    YAML 是一种标记语言很直观的数据序列化格式。 文件格式及编写注意事项如下所示:

    • ① 不支持制表符Tab 建缩进,需要使用空格缩进
    • ② 通常开头缩进2个空格
    • ③ 字符后缩进1个空格,如:冒号,逗号,横杆
    • ④ 用井号注释
    • ⑤ 如果包含特殊字符用单引号引起来
    • ⑥ 布尔值必须用单引号括起来

    Docker compose 使用的三个步骤:

    ① 使用Dokcerfile 定义应用程序的环境
    ② 使用docker-compose.yml 定义构成应用程序的服务,这样它们就可以再隔离环境中一起运行
    ③ 最后执行 docker-compose up 命令来启动并运行整个应用程序

    二、Docker Compose配置介绍

    (一)、Docker Compose配置常用字段

    字段描述
    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容器主机名

    (二)、Docker Compose 常用命令

    字段描述
    build重新构建服务
    ps列出容器
    up创建和启动容器
    exec在容器里面执行命令
    scale指定一个服务容器启动数量
    top显示容器进程
    logs查看容器输出
    down删除容器、网络、数据卷和镜像
    stop/start/restart停止/启动/重启服务

    (三)、Compose 命令说明

    docker-compose选项

    –verbose 输出更多调试信息
    –version 打印版本并退出
    -f, --file FILE 使用特定的 compose 模板文件,默认为 docker-compose.yml
    -p, --project-name NAME 指定项目名称,默认使用目录名称

    三、Dokcer 编排实验

    实验环境:

    环境部署主机安装docker环境

    3.1 下载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
    

    环境设置

    cp -p docker-compose /usr/local/bin
    
    chmod +x /usr/local/bin/docker-compose
    
    docker-compose --version
    

    3.2 构建Nginx

    • 创建工作目录,将nginx软件包拷贝到该目录
    mkdir /opt/compose-nginx
    
    cd /opt/compose-nginx
    
    vim /opt/compose-nginx/docker-compose.yml
    
    version: '3'
    services:
      nginx:
        hostname: nginx
        build:
          context: .
          dockerfile: Dockerfile
        ports:
    
          - 1216:80
          - 1217:443
        networks:
          - cluster
        volumes:
          - ./wwwroot:/usr/local/nginx/html
    networks:
      cluster:
    

    将之前写好的Dockerfile、run.sh、nginx压缩包都放到这个目录下面
    在这里插入图片描述
    添加首页内容:

    在这里插入图片描述
    构建镜像
    docker-compose -f docker-compose.yml up -d
    查看容器、使用浏览器访问测试
    在这里插入图片描述
    在这里插入图片描述

    四、Consul 容器自动更新与发现

    (一)、Consul 介绍

    Consul是HashiCorp公司推出的开源工具,用于实现分布式系统的服务发现与配置

    1、关键功能

    ① 服务发现: Consul的某些客户端可以提供一个服务,例如api或者mysql,其它客户端可以使用Consul去发现这个服务的提供者。使用DNS或者HTTP,应用可以很容易的找到他们所依赖的服务。
    ② 健康检查:Consul客户端可以提供一些健康检查,这些健康检查可以关联到一个指定的服务(服务是否返回200 OK),也可以关联到本地节点(内存使用率是否在90%以下)。这些信息可以被一个操作员用来监控集群的健康状态,被服务发现组件路由时用来远离不健康的主机。
    ③ 键值存储: 应用可以使用Consul提供的分层键值存储用于一些目的,包括动态配置、特征标记、协作、leader选举等等。通过一个简单的HTTP API可以很容易的使用这个组件。
    ④ 多数据中心:Consul队多数据中心有着非常好的支持,这意味着Consul用户不用担心由于创建更多抽象层而产生多个区域
    特点:

    ① 支持健康检查,允许存储键值对
    ② 一致性协议采用Raft算法,用来保证服务高可用
    ③ 成员管理和消息广播采用GOSSIP协议,支持ACL访问控制
    ④ 方便部署,与Docker等轻量级容器可无缝配合
    在这里插入图片描述
    Consul 作用
    现在企业应用都向微服务化方向发展,当把我们的系统功能拆分成一个一个的微服务后,存在以下问题:
    ① 需要配置N个服务的网络位置,加大配置的复杂性
    ② 服务的网络位置变化,都需要改变每个调用者的配置
    ③ 集群的情况下,除了反向代理方式,难以做负载

    (二)、Consul中的基本概念

    ① Client
    表示 Consul 客户端模式,是 Consul 节点的一种模式,所有注册到 Client 节点的服务会被转发到 Server 。本身无状态不持久化如何数据。Client 通过 HTTP、DNS、GRPC 接口请求转发给局域网内的服务端集群。
    ② Server
    表示 Consul 的服务端模式, Server 功能和 Client 都一样,不同的是 Server 持久化数据到本地。在局域网内与本地 Client 通讯,通过广域网与其他数据中心通讯。每个数据中心的 Server 数量推荐为 3 个或是 5 个。
    ③ Server-leader
    表示这个 Server 是它们的老大,它和其它 Server 不一样的一点是,它需要负责同步注册的信息给其它的 Server 节点,同时也要负责各个节点的健康监测。如果 Leader 宕机了,通数据中心的所有 Server 内部会使用 Raft 算法来在其中选取一个 Leader 出来。
    ④ Agent
    Agent 是 Consul 的核心进程,Agent 的工作是维护成员关系信息、注册服务、健康检查、响应查询等等。Consul 集群的每一个节点都必须运行 agent 进程
    server 与 client 只是 consul 群集层面的区分,与搭建在 cluster 之上的应用服务无关。

    (三)、Consul 原理概述

    在分布式系统结构中,往往由成百上千的业务服务组成,为了容灾(节点宕机)、扩容(增加节点)、提高运维效率(动态配置)等原因,需要服务能够实现灵活发现,避免问题节点等功能,以提高系统稳定性
    ① 服务发现及注册
    当服务Producer 启动时,会将自己的Ip/host等信息通过发送请求告知 Consul,Consul 接收到 Producer 的注册信息后,每隔一段时间会向 Producer 发送一个健康检查的请求,检验Producer是否健康。
    ② 服务调用
    当 Consumer 请求Product时,会先从 Consul 中拿到存储Product服务的 IP 和 Port 的临时表(temp table),从temp table表中任选一个· Producer 的 IP 和 Port, 然后根据这个IP和Port,发送访问请求;temp table表只包含通过了健康检查的 Producer 信息,并且每隔一段时间更新

    3.1 Consul 核心 agent组件

    Agent是一个独立的程序,通过守护进程的方式,运行在consul集群中的每个节点上。每个Consul agent维护它自己的服务集合以及检查注册和健康信息。agent负责执行自己的健康检查和更新本地状态其中,Agent 根据节点的性质,分为:

    Agent Server

    client将 HTTP 和 DNS 接口请求转发给局域网内的服务端集群。

    Agent Client

    server 保存client的注册信息,集群的配置信息, 维护集群高可用, 在局域网内与本地客户端通讯, 通过广域网与其它数据中心通讯。 每个数据中心的 server 数量推荐为 3 个或是 5 个,通过 Raft 算法来保证一致性。

    3.2 Consul 通信接口

    ① RPC

    用于内部通讯Gossip/日志分发/选主等

    ② HTTP API

    服务发现/健康检查/KV存储等几乎所有功能, 默认端口为8500

    ③ Consul Commands (CLI)

    consul命令行工具可以与consul agent进行连接,提供部分consul的功能。

    实际上Consul CLI 默认就是调用的HTTP API来与consul集群进行通讯。

    ④ DNS

    仅用于服务查询,例如:dog @127.0.0.1 -p 8600 web.service.consul

    可以通过cosul提供的DNS接口来获取当前的服务“web”对应的可用节点

    Consul 内部端口说明:

    端口说明
    TCP/83008300端口用于服务器的节点,客户端通过该端口RPC协议调用服务端节点
    TCP/UDP/83018301端口用于单个数据中心所有节点之间的相互通讯,即对LAN池信息的同步,它使得整个数据中心能够自动发现服务器地址,分布式检测节点故障,事件广播(如leader选举事件)
    TCP/UDP/83028302端口用于单个或多个数据中心之间的服务器节点的信息同步,即对LAN池信息的同步,它针对互联网的高延迟进行优化,能够实现跨数据中心请求
    85008500端口基于HTTP协议,用户API接口或WEB UI访问
    86008600端口作为DNS服务器,它使得我们可以通过节点名查询节点信息

    五、 搭建Consul集群实验

    5.1 实验环境

    基于之前的实验,在准备一台装好docker的centos

    第一台centos 7 IP地址:192.168.126.10
    需求的软件包:Docker-ce、Compose 3 、Consul、Consul-template
    第二台centos 7 IP地址:192.168.226.133
    需求的软件包:Docker-ce 、registrator

    5.2 配置 consul服务器

    安装consul软件包

    mkdir /root/consul
    cd /root/consul
    unzip consul_0.9.2_linux_amd64.zip
    mv consul /usr/bin
    
    consul agent \
    -server \
    -bootstrap \
    -ui \
    -data-dir=/var/lib/consul-data \
    -bind=192.168.126.10 \
    -client=0.0.0.0 \
    -node=consul-server01 &> /var/log/consul.log &
    

    查看集群信息

    consul members
    consul info | grep leader
    

    在这里插入图片描述
    在这里插入图片描述
    通过httpd api 获取集群信息

    curl 127.0.0.1:8500/v1/status/peers  //查看集群server成员
    curl 127.0.0.1:8500/v1/status/leader  //集群Raf leader
    curl 127.0.0.1:8500/v1/catalog/services  //注册的所有服务
    curl 127.0.0.1:8500/v1/catalog/nginx  //查看nginx服务信息
    curl 127.0.0.1:8500/v1/catalog/nodes  //集群节点详细信息
    

    5.3 容器服务自动加入nginx集群—(记得关闭防火墙)

    1、安装Gliderlabs/Registrator(可检查容器运行状态自动注册,还可以注销docker容器的服务 到服务配置中心)
    目前支持 Consul、Etcd和SkyDNS2

    另起一台服务器操作 192.168.126.20

    docker run -d \
    --name=registrator \
    --net=host \
    -v /var/run/docker.sock:/tmp/docker.sock \
    --restart=always \
    gliderlabs/registrator:latest \
    -ip=192.168.126.20 \
    consul://192.168.126.10:8500
    

    2、测试服务功能是否正常

    docker run -itd -p 83:80 --name test-1 -h test1 nginx
    docker run -itd -p 84:80 --name test-2 -h test2 nginx
    docker run -itd -p 88:80 --name test-3 -h test3 httpd
    docker run -itd -p 89:80 --name test-4 -h test4 httpd
    

    在这里插入图片描述
    3、验证http和nginx服务是否注册到consul
    浏览器输入 http://192.168.126.10:8500 单击“NODES”,然后单击“consul-server”,会出现5个服务
    在这里插入图片描述
    在consul服务器上查看

    [root@consul consul]#curl 127.0.0.1:8500/v1/catalog/services
    {"consul":[],"httpd":[],"nginx":[]}
    

    4、安装consul-template(consul服务器)
    Consul-Tepmlate是一个守护进程,用于实时查询Consul集群信息,并更新文件系统上任意数量的指定模板,生成配置文件,更新完成以后,可以选择运行shell命令执行更新操作,重新加载Nginx Consul-Tepmlate可以查询到Consul中的服务目录,Key,Key-values等
    其强大的抽象功能和查询语言模板使得Consul-Template特别适合动态的创建配置文件,
    例如:Nginx/Apache Proxy Balancers、Haproxy Backends
    5、 准备 Template nginx模板文件
    在consul服务器的consul目录中添加nginx模板

    vim /root/consul/nginx.ctmpl
    
    upstream http_backend {					#群集模块模板
        {{range service "nginx"}}				#指定nginx服务项
         server {{.Address}}:{{.Port}};			#指向真实服务器的地址和端口“{{.Address}}” 此参数会根据consul群集的参数自动设置上去
         {{end}}						#结束语句(以上为轮询请求方式)
    }
    
    server {
           listen 88;					#对外提供的端口,可自行设置,只要不起冲突
           server_name localhost 192.168.126.10;		#本地反向代理的节点地址
           access_log /var/log/nginx/kgc.cn-access.log;	#访问日志文件目录(需手动创建)
           index index.html index.php;			#指定访问的index 首页类型
           location / {
              proxy_set_header HOST $host;			#反向代理的请求头部信息
              proxy_set_header X-Real-IP $remote_addr;	#真实服务器IP
              proxy_set_header Client-IP $remote_addr; 	#客户IP
              proxy_set_header X-Fprwarded-For $proxy_add_x_forwarded_for;	#Forward转发地址
              proxy_pass http://http_backend;		#反向代理指向upstream地址池
                     }
           }
    

    6、手工编译安装nginx服务

    yum install gcc gcc-c++ pcre-devel zlib-devel -y
    

    把nginx压缩包放到/root/consul目录

    tar zxvf nginx-1.12.0.tar.gz -C /opt
    cd /opt/nginx-1.12.0/
    ./configure --prefix=/usr/local/nginx
    make && make install
    

    7、配置nginx

    vim /usrlocal/nginx/conf/nginx.conf
    

    #在http模块下 添加

    http {
        include       mime.types;
        include       vhost/*.conf;			#vhost目录需手动创建
    #在http模块下 添加include vhost/*.conf
    

    创建虚拟主机vhost文件目录

    mkdir /usr/local/nginx/conf/vhost
    

    创建日志文件目录

    mkdir /var/log/nginx
    

    启动nginx

    /usr/local/nginx/sbin/nginx
    

    8、配置并启动template
    上传consul-template_0.19.3_linux_amd64.zip 包到/root目录下

    unzip consul-template_0.19.3_linux_amd64.zip 
    mv consul-template /usr/bin/
    

    启用模板

    consul-template -consul-addr 192.168.126.10:8500 -template "/root/consul/nginx.ctmpl:/usr/local/nginx/conf/vhost/test.conf:/usr/local/nginx/sbin/nginx -s reload" --log-level=info
    

    参数详解:

    -consul-addr 192.168.226.132:8500:指向consul服务端节点
    
    -template "/root/consul/nginx.ctmpl:指定模板路径
    
    :/usr/local/nginx/conf/vhost/test.conf:指定文件生成到vhost中并命名为test.conf
    
    :/usr/local/nginx/sbin/nginx -s reload:不中断服务reload重载nginx服务让配置文件生效
    
    –log-level=info:产生日志,级别为info(日志生成位置在nginx.ctml中定义“access_log”)
    

    另外打开一个终端查看生成配置文件

    cat /usr/local/nginx/conf/vhost/test.conf
    

    在这里插入图片描述

    增加一个nginx容器节点,测试服务器发现以及配置更新功能

    docker run -itd -p 85:80 --name test-5 -h test5 nginx
    

    查看kgc.conf中的服务信息

    cat /usr/local/nginx/conf/vhost/test.conf
    

    5.5 consul多节点

    添加一台已有docker环境的服务器192.168.126.40/24加入已有的群集中

    mkdir /root/consul
    cd /root/consul
    unzip consul_0.9.2_linux_amd64.zip
    mv consul /usr/bin
    
    consul agent \
    -server \
    -bootstrap \
    -ui \
    -data-dir=/var/lib/consul-data \
    -bind=192.168.126.40 \
    -client=0.0.0.0 \
    -node=consul-server02 \
    -enable-script-checks=true \
    -datacenter=dc1 \
    -join 192.168.126.10 &> /var/log/consul.log &
    

    -enable-script-checks=true \ #设置检查服务为可用
    -datacenter=dc1 \ #数据中心名称
    -jion 192.168.126.10 &> /var/log/consul.log & 加入到已有集群中

    在这里插入图片描述

    展开全文
  • Docker Compose应用Docker Compose简介查阅官方文档Docker Compose安装Docker Compose初体验Docker Compose配置编写规则使用Compose一键部署Wordpress博客 Docker Compose简介 Docker开源项目,负责实现对Docker...

    Docker Compose简介

    • Docker开源项目,负责实现对Docker容器集群的快速编排
    • 托管于Github上,由Python实现,调用 Docker服务的API负责实现对Docker容器集群的快速编排,即通过一个单独的yaml文件,来定义一组相关的容器来为一个项目服务
    • 所以,Docker-compose默认的管理对象是项目,通过子命令的方式对项目中的一组容器进行生命周期的管理
    • Docker Compose来轻松高效的管理容器,定义运行多个容器
    • 作用:批量容器编排

    查阅官方文档

    • https://docs.docker.com/compose/
    • Compose是一个用于定义和运行容器Docker应用程序的工具
    • 使用Compose,可以使用YAML文件来配置应用程序的服务。然后,使用一个命令,从配置中创建并启动所有服务
    • Compose适用于所有环境:生产暂存开发测试以及CI工作流
    • 使用Compose基本上分为三个步骤:
      1. 使用Dockerfile定义应用程序的环境,以便可以在任何地方复制。
      2. Docker-compose.yml中定义组成应用程序的服务,以便它们可以在隔离的环境中一起运行
      3. 运行Docker compose up,Docker compose命令启动并运行整个应用程序。也可以使用Docker compose二进制文件运行Docker compose up。

    Docker Compose安装

    #由于官方镜像是国外的太慢,使用国内镜像下载
    [root@docker ~]# curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
    
    #为compose授权
    [root@docker ~]# chmod +x /usr/local/bin/docker-compose
    [root@docker bin]# docker-compose version
    

    Docker Compose初体验

    创建应用
    #为项目创建目录
    [root@docker docker]# mkdir composetest
    
    #在项目目录中创建一个名为app.py的文件
    [root@docker composetest]# vim app.py
    import time
    
    import redis
    from flask import Flask                                 #导入Flask框架
    
    app = Flask(__name__)
    cache = redis.Redis(host='redis', port=6379)            #使用redis缓存
    
    def get_hit_count():
        retries = 5
        while True:
            try:
                return cache.incr('hits')
            except redis.exceptions.ConnectionError as exc:
                if retries == 0:
                    raise exc
                retries -= 1
                time.sleep(0.5)
    
    @app.route('/')
    def hello():
        count = get_hit_count()
        return 'Hello World! I have been seen {} times.\n'.format(count)
    
    #在项目目录中创建另一个名为requirements.txt的文件(依赖包)
    [root@docker composetest]# vim requirements.txt
    flask
    redis
    
    创建Dockerfile
    [root@docker composetest]# vim Dockerfile
    FROM python:3.7-alpine
    WORKDIR /code
    ENV FLASK_APP=app.py
    ENV FLASK_RUN_HOST=0.0.0.0
    RUN apk add --no-cache gcc musl-dev linux-headers
    COPY requirements.txt requirements.txt
    RUN pip install -r requirements.txt
    EXPOSE 5000
    COPY . .
    CMD ["flask", "run"]
    
    在yml文件中合成服务
    [root@docker composetest]# vim docker-compose.yml
    version: "3"
    services:
      web:
        build: .
        ports:
          - "5000:5000"
      redis:
        image: "redis:alpine"
    
    使用Compose构建并运行应用程序
    
    #从项目目录中,通过运行docker compose up启动应用程序
    [root@docker composetest]# docker-compose up
    
    Creating composetest_web_1   ... done
    Creating composetest_redis_1 ... done
    
    #本机测试
    [root@docker composetest]# curl localhost:5000
    Hello World! I have been seen 1 times.
    

    Docker Compose配置编写规则

    • 只有三层
    • https://docs.docker.com/compose/compose-file/compose-file-v3/
      • 第一层:Version 版本,与Docker Engine对应
      • 第二层:Services服务
        • 服务1:web (服务配置)images build Network
        • 服务2:redis
      • 第三层:其他配置
        • 网络/卷,全局规则
    • Service+的参数
      • container_name:指定自定义容器名称,而不是生成的默认名称
      • depends_on表示服务之间的依赖关系,服务依赖性导致以下行为,[ 如:启动顺序 web -> redis web依赖redis ]

    使用Compose一键部署Wordpress博客

    #创建一个空的项目目录
    [root@docker /]# mkdir my_wordpress
    
    #编写docker-compose.yml文件
    [root@docker my_wordpress]# vim docker-compose.yml
    version: "3.3"
        
    services:
      db:
        image: mysql:5.7                      #镜像使用mysql:5.7
        volumes:
          - db_data:/var/lib/mysql            #数据卷挂载 主机路径:容器路径
        restart: always                       #总是重启,创建容器时没有添加参数导致的后果是当Docker重启时,容器未能自动启动
        environment:                          #环境
          MYSQL_ROOT_PASSWORD: somewordpress
          MYSQL_DATABASE: wordpress
          MYSQL_USER: wordpress
          MYSQL_PASSWORD: wordpress
        
      wordpress:
        depends_on:                           #依赖于数据库db
          - db
        image: wordpress:latest               #下载wp最新版镜像
        volumes:
          - wordpress_data:/var/www/html      #数据卷挂载
        ports:
          - "8000:80"                         #本机8000端口映射容器80端口
        restart: always
        environment:
          WORDPRESS_DB_HOST: db:3306
          WORDPRESS_DB_USER: wordpress
          WORDPRESS_DB_PASSWORD: wordpress
          WORDPRESS_DB_NAME: wordpress
    volumes:
      db_data: {}
      wordpress_data: {}
    
    [root@docker my_wordpress]# docker-compose up    #前台运行
    [root@docker my_wordpress]# docker-compose up -d #后台运行
    

    在这里插入图片描述

    使用Compose搭建lnmp环境

    • 创建compose目录并下载镜像
    [root@docker]# mkdir /lnmp
    [root@docker lnmp]# docker pull nginx:1.18
    [root@docker lnmp]# docker pull  mysql:5.7
    [root@docker lnmp]# docker pull php:5.6-fpm
    
    • 建立目录并创建文件
    [root@docker lnmp]# tree
    .
    ├── conf
    │   └── default.conf
    ├── docker-compose.yml
    └── html
        ├── index.php
        ├── index.html
    
    • 创建nginx配置文件
      • 直接启动容器从容器中复制配置文件进行修改
    [root@docker lnmp]# vim conf/default.conf
    server {
        listen       80;
        listen  [::]:80;
        server_name  localhost;
    
    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;
    
    location / {
        root   /usr/share/nginx/html;
        index  index.html index.php index.htm;
    }
    
    #error_page  404              /404.html;
    
    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
    
    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}
    
    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php$ {
        root           /var/www/html;
        fastcgi_pass   php:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
    
    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
    }
    
    • 网页内容
    [root@docker lnmp]# cat html/index.html 
    ok
    [root@docker lnmp]# cat html/index.php 
    <?php
    $conn=mysql_connect("mysql","root","123456");
    if ($conn) echo "It's ok!!";
    mysql_close();
    ?>
    
    • Docker-compose.yml 文件
    [root@docker lnmp]# vim docker-compose.yaml
    version: "3"
    services:
      nginx:
       image: nginx:1.18
       ports:
         - 80:80
       volumes:
         - /lnmp/conf/default.conf:/etc/nginx/conf.d/default.conf
         - /lnmp/html:/usr/share/nginx/html
       depends_on:
         - php
      php:
        image: php:5.6-fpm
        volumes:
         - /lnmp/html:/var/www/html/
        depends_on:
         - mysql
      mysql:
        image: mysql:5.7
        ports:
          - 3306:3306
        environment:
          - MYSQL_ROOT_PASSWORD=123456
    
    • 使用Docker-compose构建
    [root@docker lnmp]# docker-compose up -d
    [root@docker lnmp]# docker-compose ps
    
    • 构建完成后访问页面进行测试
      • 192.168.100.100/index.php
      • 192.168.100.100/index.html
      • 此时可能会发生php与mysql无法对接的问题,需要进入php安装插件
        • ./docker-php-ext-install mysql
    • 部署WordPress
    #进入宿主机lnmp目录下的html主页目录解压WordPress
    [root@docker html]# tar xf wordpress-4.9.4-zh_CN.tar.gz
    #删除源码包
    [root@docker html]# rm -rf wordpress-4.9.4-zh_CN.tar.gz
    #进入解压后的路径
    [root@docker html]# cd wordpress/
    #移动目录下的所有文件至上一级html主页目录
    [root@docker wordpress]# mv ./* ..
    
    • 再次访问宿主机IP地址
      • 根据提示创建php文件
      • 进入数据库主机,为WordPress创建数据库授权账户

    在这里插入图片描述

    展开全文
  • Docker Compose

    2020-12-28 17:37:49
    Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。 Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后...

    简介

           Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。
    Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。

    组成

           Docker Compose 将所管理的容器分为三层,分别是工程(project)、服务(service)、容器(container)
           Docker Compose 运行目录下的所有文件(docker-compose.yml)组成一个工程,一个工程包含多个服务,每个服务中定义了容器运行的镜像、参数、依赖,一个服务可包括多个容器实例

           Docker-Compose运行目录下的所有文件(docker-compose.yml,extends文件或环境变量文件等)组成一个工程,若无特殊指定工程名即为当前目录名。一个工程当中可包含多个服务,每个服务中定义了容器运行的镜像,参数,依赖。一个服务当中可包括多个容器实例。

           服务(service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。每个服务都有自己的名
    字、使用的镜像、挂载的数据卷、所属的网络、依赖哪些其他服务等等,即以容器为粒度,用户需要Compose所完成的任务。
           项目(project):由一组关联的应用容器组成的一个完成业务单元,在docker-compose.yml中定义。即是
    Compose的一个配置文件可以解析为一个项目,Compose通过分析指定配置文件,得出配置文件所需完成的所有容器管理与部署操作。

           Docker-Compose的工程配置文件默认为docker-compose.yml,可通过环境变量COMPOSE_FILE或-f参数自定义配置文件,其定义了多个有依赖关系的服务及每个服务运行的容器。
           使用一个Dockerfile模板文件,可以让用户很方便的定义一个单独的应用容器。在工作中,经常会碰到需要多个容器相互配合来完成某项任务的情况。
    例如:要部署一个Web项目,除了Web服务容器,往往还需要再加上后端的数据库(mysql)服务容器等,甚至还包括负载均衡(nginx)容器等。

    Docker-compose使用的三个步骤:

    1. 使用 Dockerfile 定义应用程序的环境。
    2. 使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。
    3. 最后,执行 docker-compose up 命令来启动并运行整个应用程序。

    安装与卸载

    安装方式1:

    # 安装
    apt install python-pip
    pip install docker-compose
    PS:centos使用命令yum -y install python-pip安装pip
    
    # 查看安装的版本
    docker-compose --version
    
    # Docker-compose卸载
    
    pip uninstall docker-compose
    

    安装方式2:

    curl -L https://github.com/docker/compose/releases/download/1.24.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
    
    # 设置文件可执行权限
    chmod +x /usr/local/bin/docker-compose
    
    # 查看版本信息
    docker-compose -version
    
    #卸载docker-compose
    rm -f /usr/local/bin/docker-compose
    

    Docker-compose常用命令

    1. Docker-compose命令格式

      docker-compose [-f <arg>...] [options] [COMMAND] [ARGS...]
      
      命令选项如下:
      -f --file FILE指定Compose模板文件,默认为docker-compose.yml
      -p --project-name NAME 指定项目名称,默认使用当前所在目录为项目名
      --verbose  输出更多调试信息
      -v,-version 打印版本并退出
      --log-level LEVEL 定义日志等级(DEBUG, INFO, WARNING, ERROR, CRITICAL)
      
    2. 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文件中定义的容器
      
    3. docker-compose ps

      docker-compose  ps [options] [SERVICE...]
      列出项目中所有的容器
      
    4. docker-compose stop

      docker-compose stop [options] [SERVICE...]
      
      选项包括
      -t, –timeout TIMEOUT 停止容器时候的超时(默认为10秒)
      docker-compose stop
      停止正在运行的容器,可以通过docker-compose start 再次启动
      
    5. docker-compose -h

      docker-compose -h
      查看帮助
      
    6. docker-compose down

      docker-compose down [options]
      停止和删除容器、网络、卷、镜像。
      
      选项包括:
      –rmi type,删除镜像,类型必须是:all,删除compose文件中定义的所有镜像;local,删除镜像名为空的镜像
      -v, –volumes,删除已经在compose文件中定义的和匿名的附在容器上的数据卷
      –remove-orphans,删除服务中没有在compose中定义的容器
      docker-compose down
      停用移除所有容器以及网络相关
      
    7. docker-compose logs

      docker-compose logs [options] [SERVICE...]
      
      查看服务容器的输出。默认情况下,docker-compose将对不同的服务输出使用不同的颜色来区分。可以通过–no-color来关闭颜色。
      docker-compose logs
      查看服务容器的输出
      -f 跟踪日志输出
      
    8. docker-compose bulid

      docker-compose build [options] [--build-arg key=val...] [SERVICE...]
      构建(重新构建)项目中的服务容器。
      
      选项包括:
      –compress 通过gzip压缩构建上下环境
      –force-rm 删除构建过程中的临时容器
      –no-cache 构建镜像过程中不使用缓存
      –pull 始终尝试通过拉取操作来获取更新版本的镜像
      -m, –memory MEM为构建的容器设置内存大小
      –build-arg key=val为服务设置build-time变量
      服务容器一旦构建后,将会带上一个标记名。可以随时在项目目录下运行docker-compose build来重新构建服务
      
    9. docker-compose pull

      docker-compose pull [options] [SERVICE...]
      拉取服务依赖的镜像。
      
      选项包括:
      –ignore-pull-failures,忽略拉取镜像过程中的错误
      –parallel,多个镜像同时拉取
      –quiet,拉取镜像过程中不打印进度信息
      docker-compose pull
      拉取服务依赖的镜像
      
    10. docker-compose restart

      docker-compose restart [options] [SERVICE...]
      重启项目中的服务。
      
      选项包括:
      -t, –timeout TIMEOUT,指定重启前停止容器的超时(默认为10秒)
      docker-compose restart
      重启项目中的服务
      
    11. docker-compose rm

      docker-compose rm [options] [SERVICE...]
      删除所有(停止状态的)服务容器。
      
      选项包括:
      –f, –force,强制直接删除,包括非停止状态的容器
      -v,删除容器所挂载的数据卷
      docker-compose rm
      删除所有(停止状态的)服务容器。推荐先执行docker-compose stop命令来停止容器。
      
    12. docker-compose start

      docker-compose start [SERVICE...]
      docker-compose start
      启动已经存在的服务容器。
      
    13. docker-compose run

      docker-compose run [options] [-v VOLUME...] [-p PORT...] [-e KEY=VAL...] SERVICE [COMMAND] [ARGS...]
      在指定服务上执行一个命令。
      docker-compose run ubuntu ping www.baidu.com
      在指定容器上执行一个ping命令。
      
    14. docker-compose scale

      docker-compose scale web=3 db=2
      设置指定服务运行的容器个数。通过service=num的参数来设置数量
      
    15. docker-compose pause

      docker-compose pause [SERVICE...]
      暂停一个服务容器
      
    16. docker-compose kill

      docker-compose kill [options] [SERVICE...]
      通过发送SIGKILL信号来强制停止服务容器。
      支持通过-s参数来指定发送的信号,例如通过如下指令发送SIGINT信号:
      docker-compose kill -s SIGINT
      
    17. docker-compose config

      docker-compose config [options]
      验证并查看compose文件配置。
      选项包括:
      –resolve-image-digests 将镜像标签标记为摘要
      -q, –quiet 只验证配置,不输出。 当配置正确时,不输出任何内容,当文件配置错误,输出错误信息
      –services 打印服务名,一行一个
      –volumes 打印数据卷名,一行一个
      
    18. docker-compose create

      docker-compose create [options] [SERVICE...]
      为服务创建容器。
      
      选项包括:
      –force-recreate:重新创建容器,即使配置和镜像没有改变,不兼容–no-recreate参数
      –no-recreate:如果容器已经存在,不需要重新创建,不兼容–force-recreate参数
      –no-build:不创建镜像,即使缺失
      –build:创建容器前  ,生成镜像
      
    19. docker-compose exec

      docker-compose exec [options] SERVICE COMMAND [ARGS...]
      
      选项包括:
      -d 分离模式,后台运行命令。
      –privileged 获取特权。
      –user USER 指定运行的用户。
      -T 禁用分配TTY,默认docker-compose exec分配TTY。
      –index=index,当一个服务拥有多个容器时,可通过该参数登陆到该服务下的任何服务,例如:docker-compose exec –index=1 web /bin/bash ,web服务中包含多个容器
      
    20. docker-compose port

      docker-compose port [options] SERVICE PRIVATE_PORT
      显示某个容器端口所映射的公共端口。
      
      选项包括:
      –protocol=proto,指定端口协议,TCP(默认值)或者UDP
      –index=index,如果同意服务存在多个容器,指定命令对象容器的序号(默认为1)
      
    21. docker-compose push

      docker-compose push [options] [SERVICE...]
      推送服务依的镜像。
      
      选项包括:
      –ignore-push-failures 忽略推送镜像过程中的错误
      
    22. docker-compose stop

      docker-compose stop [options] [SERVICE...]
      停止运行的容器
      
    23. docker-compose uppause

      docker-compose unpause [SERVICE...]
      恢复处于暂停状态中的服务。
      

    Docker-compose模板文件

    Docker-compose模板文件简介
      Compose允许用户通过一个docker-compose.yml模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目(project)。
           Compose模板文件是一个定义服务、网络和卷的YAML文件。Compose模板文件默认路径是当前目录下的docker-compose.yml,可以使用.yml或.yaml作为文件扩展名。
    Docker Compose的模板文件主要分为4个区域,如下:

    1. version 版本信息
    2. services
      服务,在它下面可以定义应用需要的一些服务,每个服务都有自己的名字、使用的镜像、挂载的数据卷、所属的网络、依赖哪些其他服务等等。
    3. volumes 数据卷,在它下面可以定义的数据卷(名字等等),然后挂载到不同的服务下去使用。
    4. networks 应用的网络,在它下面可以定义应用的名字、使用的网络类型等等。

           最关键的是services和networks两个部分。

    编写模板文件

    官网地址:https://docs.docker.com/compose/compose-file/

    # docker-compose版本 version: '1' version: '2' version: '3'
    version: '2'
    # 服务
    services:
      redis:
        image: nuiiqk/redis
        restart: always
        # 暴露端口信息  - "宿主机端口:容器暴露端口"
        ports:
          - "6379:6379"
        container_name: "redis"
        networks:
          - dev
      mysql:
        image: nuiiqk/mysql
        restart: always
        # 环境变量配置,可以用数组或字典两种方式
        environment:
          MYSQL_ROOT_PASSWORD: "root"
        ports:
          - "3306:3306"
        container_name: "mysql"
        networks:
          - dev
      nginx:
        # 指定服务所使用的镜像
        image: nuiiqk/nginx
        # 配置重启,docker每次启动时会启动该服务
        restart: always
        ports:
          - "80:80"
        # 容器别名
        container_name: "nginx"
        networks:
          - dev
        # 卷挂载路径,定义宿主机的目录/文件和容器的目录/文件的映射  宿主机路径:容器路径
        volumes:
          # - "/home/nginx/conf/nginx.conf:/etc/nginx/nginx.conf"
          - "/home/nginx/html:/usr/share/nginx/html"
          - "/home/nginx/logs:/var/log/nginx"
    # 网络类型
    networks:
      dev:
        driver: bridge
      pro:
        driver: bridge
    
    

           Compose目前有三个版本分别为Version 1,Version 2,Version 3,Compose区分Version 1和Version 2(Compose 1.6.0+,Docker Engine 1.10.0+)。Version 2支持更多的指令。Version 1将来会被弃用。

    启动服务

    # 进到docker-compose.yml目录
    cd /home/docker/
    
    # up 命令行
    docker-compose up
    
    # 如果后台启动则使用如下命令  -d 后台启动
    docker-compose up -d
    
    # 若要停止
    docker-compose stop
    

    成功样例
           看到这三个服务代表已经成功了

    服务访问

           通过浏览器访问一下nginx服务

    http://ip地址

    展开全文
  • Docker Compose容器编排

    2021-03-22 11:48:53
    Docker Compose容器编排一、Docker Compose概念1.介绍2.YAML3.docker compose配置常用字段4.docker compose常用命令5.compose命令说明 一、Docker Compose概念 1.介绍 Docker Compose的前身是Fig,它是一个定义及...
  • 25.13/25.14 Dockerfile格式 25.15/25.16 Dockerfile示例(安装nginx) 25.17 用docker compose部署服务 25.18 docker compose示例 一、Dockerfile创建镜像 – Dockerfile格式 1....
  • consuldocker composedocker compose容器编排docker compose配置常用字段docker compose常用命令compose部署部署consulconsul服务器上容器服务自动加入consul集群 docker compose docker compose是一个定义及运行...
  • 当我们使用 Docker Compose 启动应用程序之后,如果主机发生重启,应用容器无法自动启动。 我们可以使用 Docker Compose重启策略,但是也存在一些问题。 该笔记将记录:1)自动启动服务的解决方案、2)及其常见...
  • docker三剑客之docker compose

    千次阅读 2021-02-05 22:53:29
    docker三剑客之docker composedocker compose简介docker compose安装docker-compose的常用命令docker-compose.yml属性创建docker-compose.yml文件(haproxy,nginx) docker compose相关的一些介绍. docker compose...
  • Docker Compose 30

    2020-02-04 19:11:00
    Docker Compose 30什么是 Docker Compose概述Docker Compose 安装与卸载二进制包PIP 安装bash 补全命令容器中执行卸载Docker Compose 使用术语场景web 应用Dockerfiledocker-compose.yml运行 compose 项目Docker ...
  • [root@localhost ~]# cd /usr/local/bin/ [root@localhost bin]# ls ...docker-compose [root@localhost bin]# chmod +x docker-compose [root@localhost bin]# ls docker-compose [root@localho
  • 容器自动编排工具----Docker Compose 一:什么是Docker ComposeDocker Compose 的前身是Fig,它是一个定义及运行多个容器的工具,使用Docker Compose不再需要使用shell脚本来启动容器。通过Docker Compose可以...
  • DockerDocker Compose 详解 Docker Compose 概述与安装? 前面我们使用 Docker 的时候,定义 Dockerfile 文件,然后使用 docker build、docker run 等命令操作容器。然而微服务架构的应用系统一般包含若干个微服务...
  • 文章目录一、Docker Compose(1)、Docker Compose概述(2)、YAML(3)、Docker Compose配置常用字段(4)、Docker Compose常用命令(5)、Compose命令说明二、compose的安装和使用 一、Docker Compose (1)、...
  • 一文掌握Docker Compose 目录 Docker Compose介绍 Docker Compose安装 Docker Compose基本示例 1、基本文件及目录设置 2、创建一个Dockerfile 3、通过docker-compose.yml定义服务 4、通过Docker Compose...
  • Docker Compose方式安装GitLab

    千次阅读 2019-07-17 16:06:03
    文章目录用Docker Compose方式安装GitLab前提条件一键自动化以Docker Compose方式安装GitLabGitLab Docker Compose文件打开防火墙端口访问GitLab配置GitlabTroubleshooting其它参考文档 用Docker Compose方式安装...
  • Docker Compose 详解

    2020-10-16 11:47:00
    docker compose 简介 官方文档 https://docs.docker.com/compose docker compose 是一个容器编排的利器,日常工作中,在一台服务器上,避免不了需要多个容器共同配合来完成某项任务的情况,如一个web项目,除了...
  • Docker Compose快速入门

    2020-06-09 20:49:25
    Docker ComposeDocker官方推出的一种容器编排服务,可以快速在集群中部署分布式应用。本文主要参考官方的快速入门示例来总结一下Docker Compose的简单使用。示例的场景是构建一个运行在Docker Compose上的简单...
  • ce配置阿里云镜像加速设置开启自启docker使用帮助命令镜像命令容器命令docker-compose安装docker-composedocker-compose.yml模板文件docker-compose常用命令 简介 Docker是一个开源的容器引擎,它有助于更快地交付...
  • Docker容器之Docker ComposeDocker Compose概述新的改变 Docker Compose概述 Compose项目是Docker官方的开源项目,是一个用于定义和运行多个Docker容器应用的工具。负责实现对Docker容器集群的快速编排,其前身是...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,186
精华内容 2,474
关键字:

dockercompose自动重启