docker

Docker 生产环境实践1

2019-12-04  本文已影响0人  SkTj

1、以指定用户运行容器
-u username

特殊权限

--privileged=true

-net=
--restart="always"

keepalived安装在宿主机


Docker生产环境实例1
几台运行着CentOS 7的Docker宿主机,使用systemd作为系统管理程
序;
一台MongoDB服务器或一个复制集合;
一台ElasticSearch服务器或一个集群。


image.png

其中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}:{APP_PORT}"
-e "APP_PORT={APP_PORT}" \ -e "SERVICE_C_HOST={SERVICE_C_HOST}"
-e "SERVICE_D_HOST={SERIVCE_D_HOST}" \ -e "SERVICE_M_HOST={SERVICE_M_HOST}"
--add-host docker01:{DOCKER01_IP} \ --add-host docker02:{DOCKER02_IP}
--volume /usr/local/docker-data/%n/db:/data/data
--volume /usr/local/docker-data/%n/logs:/data/logs
--name %n
{IMAGE_NAME}:{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端点等),可以利用丰富的标签对数据进行多种方式的切割。

上一篇 下一篇

猜你喜欢

热点阅读