docker 笔记二

前言

承接之前 docker 笔记一,继续我们docker实用梳理,本节主要阐述容器管理 docker-compose 的实际使用,以及docker 日志方面查询,收集。演示环境CentOS 7,mac。

容器管理

在之前笔记中已经对 docker-compose 做过简单介绍,请参见docker 笔记一,此处继续。

docker-compose 常用命令

docker-compose 常用的命令包括:

# build镜像 -f为可选参数,用以指定具体docker-compose文件,默认使用当前路径下的docker-compose.yml
docker-compose -f your_docker_compose_file build

# 启动容器命令,如果没有创建container则新建,-d可选参数表示后台执行
docker-compose up -d

# 停止并移除container
docker-compose down

# 启动对应的所有容器,与up的区别,不会新建容器
docker-compose start

# 停止对应的所有容器,与down区别不会移除contaienr
docker-compose stop

# 其他命令参见 help查看
docker-compose --help

多容器管理

之前给出的示例yml文件展示了同时管理启动两个mysql container,其在于是直接获取镜像后新建容器。实际中可能是自己编写的多个工程,需要相互协作,并且作为一个服务。假设现有两个python小工程,作为一个整体服务,各自有自己的实现,依赖,其目录结构如下:
这里写图片描述
project_one 用dockerfile_one build镜像,并且需要安装其路径下的requirement.txt依赖,project_two类比需求,demo工程下载

docker-compose.yml文件内容如下:

version: '2'
services:
  web_one:
    build:
      context: ./project_one
      dockerfile: dockerfile_one
    container_name: web_one
    ports:
     - "8001:8001"
    restart: always
  web_two:
    build:
      context: ./project_two
      dockerfile: dockerfile_two
    container_name: web_two
    ports:
     - "8002:8002"
    restart: always

project_one 中的dockerfile内容如下:

FROM python:3.5.2
WORKDIR /web_one
ADD . /web_one
RUN pip install -r requirements.txt -i https://pypi.douban.com/simple
CMD ["python", "web_one.py"]

project_two 中的dockerfile内容如下:

FROM python:3.5.2
WORKDIR /web_two
ADD requirements.txt /web_two
RUN pip install -r requirements.txt -i https://pypi.douban.com/simple
ADD . /web_two
CMD ["python", "web_two.py"]

docker-compose.yml文件中,分别指定了两个服务web_one 和 web_two,与之前mysql不同在于不是使用现有image,而是通过dickerfile build。web_one指定上下文路径为 ./project_one docker-compose.yml文件所在路径下的 project_one 路径,所使用的DOCKERFILE 为 project_one 路径下的dockerfile_one,web_two类似。
执行build结果:
这里写图片描述

详细 docker-compose多文件build可以参见官网介绍,其中还可以指定参数在dockerfile中使用。

DOCKERFILE 编写技巧

上文中特别展示出两个dockerfile文件详细内容,细心读者或许发现稍有不同。dockerfile build镜像过程:
1,dockerfile在build镜像时并非一次性生成最终镜像,而是根据其中的执行步骤逐步生成中间层镜像,最后生成完整镜像。
dockerfile_one一共有5行,所以build过程中一共有 step1 至 step5,每一步会有一个中间镜像,且显示了中间镜像编号。
与之相对dockerfile_two一共有6个步骤,因此会有 step1 至 step6

2,build过程中会检测对应本步骤的文件、操作是否变化,如果没有则沿用上次build的镜像结果

由此请仔细比对两份 dockerfile。
dockerfile_one:
step1: 拉取基础镜像python 3.5.2运行环境
step2: 指定镜像中的工作目录为 /web_one
step3: 将dockerfile所在目录所有文件加载到镜像 /web_one中
step4: 安装工作目录下 requirements.txt 中依赖包
step5: 启动工程

dockerfile_two:
step1: 拉取基础镜像python 3.5.2运行环境
step2: 指定镜像中的工作目录为 /web_two
step3: 将dockerfile所在目录 requirements.txt 文件加载到镜像 /web_two中
step4: 安装工作目录下 requirements.txt 中依赖包
step5: 将dockerfile所在目录所有文件加载到镜像 /web_two中
step5: 启动工程

修改web服务的py代码文件,重新build镜像,执行结果如下:
这里写图片描述
仔细比对之前的build操作记录,web_one只沿用了之前的1,2中间层镜像,后面代码变动必须要重新安装依赖包,而web_two沿用了1-4层中间镜像,不需要重新安装依赖,因为requirements.txt文件并没变化。

这个在做CI时可以节省了很多时间,否则每次工程代码更新,依赖都需要重新安装,少量依赖,或者依赖资源比较优质还可以,一旦依赖比较多,中间的安装操作将会耗费大量时间。

所以dockerfile 的编写过程还是有很多技巧,包括工作目录指定,特别是python需要加载自定义包,需要读者在使用中积累。

docker log

默认方式

传统手工部署模式工程模式,通常工程的log是由用户手动控制输出的方式,或者有守护进程收集log后输出到指定的文件。docker对于部署的服务可以通过自身集成命令查看,这些log均是服务运行过程中的打印log,无需用户手动收集。
可以通过以下命令查看 container 的log:

# -f为可选参数,是否持续follow
docker logs -f container_name_or_id

CentOS下docker新建的容器所存放路径:
/var/lib/docker/containers
对应的默认日志存放文件也在其中,一般以 *-json.log 结尾。

指定log driver

默认情况启动 container 其log driver是json-file,此种设定就会让docker日志以前文方式存储收集。除此之外docker还支持多种log driver,详见官网中介绍
其中除 json-file 和 journald外,指定其他log driver后将不支持docker logs命令查看log。

个人选用fluentd作为log收集器,那么只需要在docker-compose 文件中为container指定fluentd服务地址即可:
形如:

version: '2'
services:
  web_one:
    build:
      context: ./project_one
      dockerfile: dockerfile_one
    container_name: web_one
    ports:
     - "8001:8001"
    logging:
      driver: "fluentd"
      options:
        fluentd-address: "localhost:24224"
        tag: "{{.Name}}"
    restart: always

之前的docker-compose官方文档结合,Fluentd logging driver 就可以明白此段配置含义。

fluent组件在docker hub上有镜像,可以直接pull下来后运行。
用fluent组件收集的日志和默认的内容有些许不同,是经过打包的,如果想真的取出container的日志,需要进行解析。

个人为企业调试平台搭建的实时 log 查阅系统的数据收集源至此便完成,后续又编写了一个解析器持续解析fluent收集的log文件后分不同工程log文件存储。
再配合 logio 系统,一套平台化基于docker的实时log查询系统便搭建成功了。

实际效果如下图:
这里写图片描述

小结:

在利用docker部署过程中还有很多配置,譬如环境变量,docker-compose管理网卡配置,文件共享,都可以去官网上找到使用方式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值