一、 定义和实现技术—整合现有的
- 定义:以容器技术为核心的IT标准化构建体系
- 隔离和资源限定: LXC
- 安全:GRSec
- 镜像文件:AUFS
二、目的
- 开发环境和生产环境一致! Build once, run anywhere(轻量)
- 独立的服务/应用在不同的环境中, 得到相同的运行结果
三、常用命令、实例
https://github.com/deeponder/dockerbook-code
四、核心组件
- Docker客户端和服务器
- Registry—镜像仓库
-
Docker镜像—由基础镜像(FROM), 一层层叠加镜像,最后在最顶层加载一个读写层,运行程序,写时复制
- docker容器—镜像是docker生命周期中构建和打包阶段,容器是启动和执行阶段
五、容器的使用
https://github.com/deeponder/dockerbook-code/tree/master/3 建议单个容器只运行一个服务或者进程, 微服务、分布式、扩展
- 自动重启容器 –restart
- 容器的监控统计 docker stats xxxx
- 日志驱动 若启用syslog, 则docker logs无日志
- 要保持容器的活跃装填, 运行的程序不能中断!
- 容器和宿主端口映射 -p 8080:80 容器80端口绑定到主机8080
- 特权模式(容器中运行容器) –privileged
六、镜像的使用
https://github.com/deeponder/dockerbook-code/tree/master/4
- 同个仓库(服务/应用)可以有多个镜像 tag
七、镜像的构建
1. 方式
- commit命令
- Dockerfile(推荐)
2. Dockerfile 构建步骤
- 创建一个目录(如:webapp)作为我们的构建环境
- 在构建环境新建Dockerfile文件, 编写构建指令, 每条指令都创建一个新的镜像层并提交
- 通过docker build -t deeponder/webapp:v1 . 完成基于Dockerfile的镜像构建
- Push到指定的镜像仓库
3. 常用Dockerfile指令
- 除非用host网络模式,否则需要通过EXPOSE 暴露需要用到的端口, 特别注意程序的默认端口
- CMD, ENTRYPOINT, WORKDIR, ENV(设置一些环境变量,代理等), USER(指定用户运行), VOLUME(目录挂载),ADD(自动解压)/COPY(自动创建目录)
八、卷
1. 是什么
存在于宿主机器中, 被一个或多个容器选定的目录,用于共享和持久化数据, 不跟镜像走。
2. 场景
- 多个容器共享的配置/代码
- 不想改动,就重新构建镜像
3. 示例
$ sudo docker run -d -p 80 --name website \
-v $PWD/website:/var/www/html/website \
deeponder/nginx nginx:v1
九、网络
1. 内部如何联网—未指定net, 默认用这种bridge
- 通过veth*接口绑定到docker0网桥,创建了一个虚拟子网,该子网由宿主机和各个容器共享
- 容器地址的下一跳都是先到docker0, 通过traceroute 跟踪
- IPTables NAT 路由配置
2. container
- 先创建一个网络, 在这个网络下启动容器
- 支持随时加入和退出这个桥接网络
- 本地访问
3. Host
直接用宿主机的IP地址, 隔离型不好。
十、Docker编排
K8s, swarm, mesos, Docker Compress (待续)