文章

Docker容器技术企业应用案例笔记

Docker容器技术企业应用案例笔记

本文档介绍 Docker容器技术企业应用案例笔记 的相关内容。

案例一:整套项目打包部署

Docker Compose

简介

  1. 介绍
    Compose是一个定义和管理多容器的工具,使用Python语言编写,使用Compose配置文件描述多个容器应用的架构,比如使用什么镜像、数据卷、网络、映射端口等;然后一条命令管理所有服务,比如启动、停止、重启等。

  2. 安装

curl -L https://github.com/docker/compose/releases/download/1.15.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose # 或者 pip install docker-compose
  1. YAML文件格式及编写注意事项 YAML是一种标记语言很直观的数据序列化格式,可读性高。类似于XML数据描述语言,语法比XML简单的很多。
    YAML数据结构通过缩进来表示,连续的项目通过减号来表示,键值对用冒号分隔,数组用中括号括起来,hash用花括号括起来。

YAML文件格式注意事项:

  1. 不支持制表符tab键缩进,需要使用空格缩进
  2. 通常开头缩进2个空格
  3. 字符后缩进一个空格,如冒号、逗号、横杆
  4. 用井号注释
  5. 如果包含特殊字符用单引号引起来
  6. 布尔值(true、false、yes、no、on、off)必须用引号括起来,这样分析器会将他们解释为字符串

常用字段

配置文件常用字段
| 字段 | 描述 | | — | — | | build
   dockerfile
      context | 指定Dockerfile文件名,构建镜像上下文路径 | | image | 指定镜像 | | command | 指定命令,覆盖默认命令 | | container_name | 指定容器名称,由于容器名称是唯一的,如果指定自定义名称,则无法scale | | deploy | 指定部署和运行服务相关配置,只能在Swarm模式使用 | | environment | 添加环境变量 | | networks | 加入网络,引用顶级networks下条目 | | ports | 暴露端口,与-p相同,但端口不能低于60 | | volumes | 挂载宿主机路径或命名卷。如果是命名卷在顶级volumes定义卷名称 | | restart | 重启策略,默认no,always \ | | hostname | 容器主机名 | 官方文档:https://docs.docker.com/compose/compose-file
示例:

version: '3' services: nginx: hostname: nginx build: context: ./nginx dockerfile: Dockerfile ports: 81:80 networks: lnmp volumes: ./wwwroot:/usr/local/nginx/html php: hostname: php build: context: ./php dockerfile: Dockerfile networks: lnmp volumes: ./wwwroot:/usr/local/nginx/html mysql: hostname: mysql image: mysql:5.6 prots: 3306:3306 networks: lnmp volumes: ./mysql/conf:/etc/mysql/conf.d ./mysql/data:/var/lib/mysql command: --character-set-server=utf8 environment: MYSQL_ROOT_PASSWORD: YOUR_PASSWORD MYSQL_DATABASE: wordpress MYSQL_USER: user MYSQL_PASSWORD: YOUR_PASSWORD networks: lnmp:

常用命令 docker-compose –help

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

目录结构
<img src=http://note.youdao.com/yws/res/3145/BB090CC30F524C9F95F59573FA3458D5 width=300> 一键部署

docker-compose -f docker-compose.yml up # 部署前台运行 docker-compose ps # 查看当前容器 docker-compose -f docker-compose.yml up -d # 后台运行

案例二:基于Docker构建企业Jenkins Ci平台

案例三:容器服务注册与发现

Consul 服务发现

  1. 介绍
    Consul是一个分布式、高可用性,在基础设施中发现和配置服务工具。

  2. 安装
    下载二进制Consul包:https://www.consul.io/downloads.html

# unzip consul_0.9.2_linux_amd64.zip # mv consul /usr/bin
  1. 部署
# consul agent \ server \ bootstrap \ ui \ data-dir=/var/lib/consul-data \ bind=192.168.1.113 \ client=0.0.0.0 \ node=server01

consul常用方法

查看集群信息:

consul members consul info |grep leader consul catalog services

通过HTTP API获取集群信息:

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

服务注册:

curl -X PUT -d \ '{"id": "jetty", "name": "service_name","address":"192.168.1.121","port":"8080","tags": ["test"],"checks": [("http":"http://192.168.1.121:8080/","interval":"5s")]}' \ http://192.168.1.120:8500/v1/agent/service/register

Docker主机启动注册器:

# Docker + Registrator + Consul实现容器服务自动加入Nginx集群 # docker run -d \ --name=registrator \ --net=host \ -v /var/run/docker.sock:/tmp/docker.sock \ --restart=always \ gliderlabs/registrator:latest \ ip=192.168.1.122 \ consul://192.168.1.121:8500

Nginx负载均衡节点实现容器自动加入nginx集群

upstream http_backend { ip_hash; {{range service "nginx"}} server {{ .Address }}: {{ .Port }}; {{ end }} } server { listen 80; server_name localhost; location / { proxy_pass http://http_backend; } }
# consul-template \ -consul-addr 192.168.1.121:8500 \ -template "./nginx.ctmpl:/usr/local/nginx/conf/nginx.conf:/usr/local/nginx/sbin/nginx -s reload" \ -log-level=info
本文由作者按照 CC BY 4.0 进行授权