Docker在生产环境中的一些注意事项

本文介绍了在Docker生产环境中需要注意的日志大小控制、内存资源限制和时区设定。通过设置日志选项限制日志文件大小和数量,避免硬盘空间被填满;限制容器内存使用,防止资源耗尽影响其他容器;调整容器时区,确保时间函数正确。此外,还推荐了数据卷映射的最佳方式,以保持数据持久化和避免容器初始化时的数据丢失。
摘要由CSDN通过智能技术生成

本文从本人博客搬运,原文格式更加美观,可以移步原文阅读:Docker在生产环境中的一些注意事项

限制容器日志大小

Docker在不重建容器的情况下,日志文件默认会一直追加,时间一长会逐渐占满服务器的硬盘的空间,内存消耗也会一直增加。以下方式可以控制日志文件大小:

  • 启动容器时,通过参数来控制日志文件的个数和大小
# 设置容器日志文件最大10MB,最大日志文件数量为3
docker run -it --log-opt max-size=10m --log-opt max-file=3 redis
  • 全局日志配置,创建或修改文件 /etc/docker/daemon.json,并增加以下配置
{
    "log-driver":"json-file",
    "log-opts":{
        "max-size" :"50m","max-file":"1"
    }
}

然后重启docker服务即可生效。但是已经存在的容器不会生效

限制容器可以使用的内存资源

默认情况下,容器最多可以使用的最大内存为宿主机的内存。比如4GB内存的虚拟机,查看每个容器的内存限制如下

采用默认配置的情况下,如果某个容器内存消耗过大,占满宿主机内存资源,那么就会导致其他容器内存资源不足,影响其他容器的运行。所以一般情况下我们要限制容器的内存,可以在启动容器时用-m参数指定

# 限制容器可用最大内存为500MB
docker run -d -m 500MB redis:5

指定容器时区

Docker容器默认的时区为UTC时区。在运行容器前,推荐指定容器时区为东八区,否则在容器内部执行一些时间函数(比如MySQL容器的sysdate()或JDK容器的时间api)得到的结果将比北京时间早8个小时

如果我们要给docker容器统一时区,有以下几种方案:

  • 如果是自己用dockerfile构建的镜像,那么可以在dockerfile中构建镜像时指定好时区
# 设置容器时区
RUN echo 'Asia/Shanghai' > /etc/timezone
  • 如果是镜像已经存在,我们可以在启动容器时指定时区:

    • 将时区设置为与宿主机相同

      # 将宿主机的时区相关目录映射到容器中
      docker run -v /etc/timezone:/etc/timezone -v /etc/localtime:/etc/localtime
      
    • 通过设置环境变量TZ指定时区

      # 指定容器时区,不指定的话mysql的时间函数执行结果会不正确
      docker run -p 3306:3306 --name mysql5.7 -e TZ="Asia/Shanghai" -d mysql:5.7
      
  • 如果是在docker-compose中,同样可以给容器设置环境变量来指定时区

version: "3.2"  

services:
  mysql5: 
    container_name: mysql01
    image: mysql:5.7
    ports:
      - "3306:3306"
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - TZ=Asia/Shanghai # 设置时区

数据卷的推荐映射方式

容器数据卷映射到宿主机一般有两种方式,第一种方式如下:

docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名

但要注意通过这种方式指定数据卷时,假设指定的宿主机目录是空的,那么数据卷映射建立后,容器中对应的映射目录也会被清空。如果容器中对应的目录原来有内容(比如一些默认的配置文件),并且你想保留,那么就不能用这种方式直接创建数据卷。此时要先创建不带数据卷映射的容器,进入容器将想要保留的内容拷贝出来到宿主机的目录,然后再重新建立这个已经包含拷贝出来文件的宿主机目录与容器目录进行映射的容器,十分麻烦

为了解决上述问题,推荐使用下面这种方式:

docker run -v 自定义数据卷名称:/容器内目录 镜像名

比如

docker run -d -p 8080:8080 --name tomcat02 -v baobao:/usr/local/tomcat/webapps tomcat:8.0-jre8

这里baobao代表一个数据卷的名称,名称可以随便写,docker会在创建这个数据卷同时自动将其映射到宿主机中的/var/lib/docker/volumes目录中。同时在启动容器时,会自动将baobao对应的容器目录中的全部内容复制到baobao映射的宿主机目录中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值