1. dcoker 环境安装
在本机玩docker,到官网,使用的环境是mac
2.docker 容器和镜像
docker镜像在我的理解中就是一个小型的linux系统的压缩包,而容器就是根据这个压缩包启动一个Linux环境,在制作镜像的时候你可以给这个Linux系统安装好多的工具和环境,比如GCC,vim,node……
当制作好一个镜像后然后启动这个镜像就形成了一个docker容器,ok 现在你可以进入这个容器了,里面有根据你的镜像形成的环境。
2.1. docker镜像的制作
大多数的时候我们可以去dokerhub上寻找需要的,然后pull。根据基础镜像搭建自己的镜像那就需要书写Dockerfile了,其实这个文件和Makefile有点像,书写好之后docker build 一下就好啦
2.1.1 Dockerfile
Dockfile是一种被Docker程序解释的脚本,Dockerfile由一条一条的指令组成,每条指令对应Linux下面的一条命令。Docker程序将这些Dockerfile指令翻译真正的Linux命令
1 | # VERSION 1.0.0 |
- 创建镜像
docker build -t <镜像名> <Dockerfile路径>
比如:
如Dockerfile在当前路径: docker build -t xx/gitlab .
以下是常用的的和镜像有关的几个命令
- 拉取镜像
1 | docker pull <镜像名:tag> |
- 查看已经拉取得镜像
1 | docker images |
- 删除镜像
1 | docker rmi xxx:tag |
docker 容器
- 根据镜像创建自己的docker容器并启动
1 | docker run --name jimscx.node -i -t -p 9003:9000 -p 9013:9010 -d -v /User/home:/home node |
–name 指定容器的名字 -p端口映射(容器外的端口:容器里的端口)可以有多个端口映射只是不要和别的容器的冲突就好 -i表示同步container的stdin,-t表示同步container的输出,-d表示deamon,以后台启动这个container -v:目录映射 (容器外的目录:容器里边的目录) 最后是镜像的名字
- 进入自己创建的容器
docker exec -it xxx bash
xxx便是容器的名字
- 查看正在运行的容器
1 | docker ps |
- 查看容器详情
1 | docker inspect 镜像 ID(镜像名)/ 容器 ID(容器名) |
- 查看容log
1 | docker logs --tail 50 -f xxxx |
- 删除单个容器
1 | docker rm <容器名orID> |
- 停止、启动、杀死一个容器
1 | docker stop <容器名orID> |
docker日志收集
日志驱动设置
要将docker 配置为默认的日志驱动程序,请使用--log-driver=<VALUE>
选项。如果驱动程序有可配置的选项,则可以使用一个或多个--log-opt<NAME>=<VALUE>
来进行设置。 如果你没有指定日志驱动,那么默认是json-file
, 日志存放的地址是:/var/lib/docker/containers/容器id/容器id-json.log
Driver | Description |
---|---|
Driver | Description |
none | 无日志 |
json-file | 将日志写入json-file,默认值 |
syslog | 将日志写入syslog,syslog必须在机器上启动 |
journald | 将日志写入journald,journald必须在机器上启动 |
gelf | 将日志写入GELF端点,如Graylog或Logstash |
fluentd | 将日志吸入fluentd,fluentd必须在机器上启动。 |
awslogs | 将日志写入亚马逊Cloudwatch |
splunk | 使用HTTP事件收集器将日志写入splunk |
etwlogs | 将日志消息作为windows时间跟踪。仅在windows平台可用 |
gcplogs | 将日志写入Google云平台 |
nats | 将日志发布到NATS服务器 |
更详细的配置config
需要注意的几点
docker logs
命令不能用于json-file
和journald
之外的日志驱动给容器打
tag
1 | --log-opt tag=xxxx |
log-drive
的几个选项,特别是异步的选项,因为如果没有设置为异步,fluentd挂了,容器就挂了。日志轮换,避免磁盘溢出。
1 | --log-driver=json-file --log-opt max-size=10m --log-opt max-file=5。(文件超过10M将被轮换,最多保留5个文件) |
收集方案
- 容器外收集。将主机磁盘挂在为容器中的日志目录和文件。主机上做日志收集。
- 日志容器收集。运行一个日志收集容器,连接到应用容器,共享日志卷,日志容器中收集日志。
- 容器内收集。在应用容器内运行一个后台日志收集服务,收集日志。
- 网络收集。容器内应用将日志通过网络直接发送给日志中心。
- 网络收集。将容器的
--log-driver
设置为syslog
,splunk
,fluentd
等网络收集服务,日志将直接通过网络发送。
第三种方式违反一个容器只运行一个应用的方式,不推荐采取。相比之下推荐第一种。
使用logstash收集日志方案
启动logstash
容器
1 | docker run \ |
logstash 测试配置
1 | input { |
查看到日志被写到/root/test_log.log
文件中