1、以指定用户运行容器
-u username
特殊权限
--privileged=true
-net=
--restart="always"
keepalived安装在宿主机
Docker生产环境实例1
几台运行着CentOS 7的Docker宿主机,使用systemd作为系统管理程
序;
一台MongoDB服务器或一个复制集合;
一台ElasticSearch服务器或一个集群。

其中systemd的写法如下:
环境变量
EnvironmentFile=/usr/etc/service-locations.env
EnvironmentFile=/usr/etc/service-config.env
EnvironmentFile=/usr/etc/cluster.env
EnvironmentFile=/usr/etc/secrets.env
EnvironmentFile=/usr/etc/%n.env
启动前旧容器被删除
ExecStartPre=-/bin/docker kill %n
ExecStartPre=-/bin/docker rm -f %n
启动脚本
ExecStart=/bin/docker
run
-p "{APP_PORT}"
-e "APP_PORT={SERVICE_C_HOST}"
-e "SERVICE_D_HOST={SERVICE_M_HOST}"
--add-host docker01:{DOCKER02_IP}
--volume /usr/local/docker-data/%n/db:/data/data
--volume /usr/local/docker-data/%n/logs:/data/logs
--name %n
{IMAGE_TAG}
停止容器
ExecStop=-/bin/docker stop %n
Restart=on-failure
RestartSec=1s
TimeoutStartSec=120
TimeoutStopSec=30
########环境文件的区分
service-locations.env:集群中所有服务的宿主机名。这个文件在不同集群里通常是一样,不过也有例外。
service-config.env:与服务自身相关的配置。如果不同集群运行的是服务的兼容性版本,这个文件应该是一样的。
secrets.env:密钥信息。因其内容关系,这个文件被处理的方法与其他文件不同,而且在不同集群上也有差异。
cluster.env:包括了集群间的所有不同之处,如所使用的数据库前缀、是测试还是生产环境、外部地址等。这个文件中最重要的信息是属于该集群的所有宿主机的IP地址。
cluster.env
CLUSTER_ID=alpha
CLUSTER_TYPE="test"
DOCKER01_IP=x.x.x.226
DOCKER02_IP=x.x.x.144
EXTERNAL_ADDRESS=https://somethingorother.com
LOG_STORE_HOST=x.x.x.201
LOG_STORE_PORT=9200
MONGODB_PREFIX=alpha
MONGODB_HOST_01=x.x.x.177
MONGODB_HOST_02=x.x.x.299
MONGODB_REPLICA_SET_ID=rs001
service-locations.env
SERVICE_A_HOST=docker01
SERVICE_B_HOST=docker03
CLIENTLOG_HOST=docker02
SERIVCE_D_HOST=docker01
...
SERVICE_Y_HOST=docker03
SERVICE_Z_HOST=docker01
日志与监控
日志聚合:fluentd+kibana以及docker-gen的组合。docker-gen可根据宿主机中运行的容器创建和重创建一个配置文件。docker-gen为每个运行中的容器生成一个fluentd条目,用于发送日志给kibana。这个服务运行良好,且易于调试。
监控:Datadog——一个SaaS监控服务。Datadog代理在容器中运行,用于监控各项性能指标、API使用情况和业务事件。Datadog为标签提供了丰富的支持,通过fluentd可以使用多种方式对单一事件进行标记。数据收集起来后(如跨集群的相同服务、所有Docker服务、使用某个发行版的所有API端点等),可以利用丰富的标签对数据进行多种方式的切割。
网友评论