Docker实践技巧(0)

      访问: 1,745 次      评论    

整理自《Docker容器与容器云》一书。


1、非root 用户使用docker 命令

将普通用户加入docker用户组:

$ sudo usermod -aG docker your-user


2、设置容器的ulimit 参数
$ docker run --ulimit nofile=1024:1024 --ulimit nproc=1024:1024 --rm debian ulimit -n


3、备份、恢复或迁移volume

源容器(带volume):

$ docker run -it --name vol_simple -v /data ubuntu /bin/bash


1)备份

备份源容器的volume:(启动一个临时容器)

$ docker run --rm --volumes-from vol_simple -v $(pwd):/backup ubuntu tar cvf /backup/data.tar /data


2)恢复

新容器:

$ docker run -it --name vol_bck -v /data ubuntu /bin/bash

恢复源容器的数据到新容器:(启动一个临时容器)

$ docker run --rm --volumes-from vol_bck -v $(pwd):/backup ubuntu tar xvf /backup/data.tar -C /


4、SSH服务器的替代方案

容器实际上是一个进程,显然我们不会在进程里再启动一个SSH服务器。

Docker提供了 docker exec 命令,可以在已运行的容器中执行想要的命令,并得到反馈的结果。这个命令实际上可以解决大部分需要ssh进入容器的问题,同样也可以解决诸如定时任务等问题。

对于需要进入容器修改配置文件的需求:

  • 如果需要长期使用这份配置文件,它应该被集成到镜像中

  • 如果需要经常修改这份配置文件,那么应该使用volume共享这份配置

对于某些特殊需求需要进入容器,如程序调试等,则可以使用docker exec 直接在容器中启动一个shell:

$ docker exec -it <containerName> /bin/bash


5、Docker容器内应用日志的管理方案

容器的stdout和stderr 输出存在了 /var/lib/docker/containers/<containerID>/<containerID>-json.log 文件下( /var/lib/docker/ 即 docker graph 目录),docker logs 命令就是从这里读取日志的。

docker logs存在的问题:

  • JSON消息格式存储,日志文件增长过快

  • 日志文件没有自动切分功能(待验证)

  • docker logs命令返回的日志记录也过于冗长

主流解决方案,3种:

  1. 在容器内收集:

    1. 容器内启动一个日志收集进程

    2. 需要定制Docker镜像,典型代表为 baseimage-docker 项目

  2. 在容器外收集:

    1. 宿主机上运行一个单独收集日志的代理,收集所有容器的日志

    2. 容器挂载 volume 数据卷,把日志记录在挂载卷中

    3. 也可以直接处理 docker graph 目录下的容器日志,开源项目Fluentd

  3. 在专用容器中收集:

    1. 在宿主机运行日志收集代理的变种方案,该代理运行在一个容器中

    2. 且该容器的volume 使用docker run 的 --volumes-from 选项被绑定给其他应用程序容器

    3. 参考 Docker and Logstash 一文 


添加新评论