笔记:这书很不推荐,内容浅显又特别能水

Docker Cookbook

docker kill SIGKILL信号 docker stop SIGTERM信号,一定时间内容器未停止会再发送SIGKILL信号

查看数据保存在宿主机上的位置 docker inspect -f {{.Mounts}} ID

docker image

  • commit方式
  • Dockerfile方式

查看在容器中对镜像做出的修改 docker diff ID

镜像的导入导出

docker export ID > update.tar docker import - update < update.tar

docker save -o update1.tar update docker load < update1.tar 区别:保存一个镜像会保留它的历史,而导出容器会对它的历史进行压缩。

CMD可以通过docker run后面的参数来覆盖,而ENTRYPOINT只能通过docker run--entrypoint参数来覆盖。

Dockerfile最佳实践

  • 在每个容器中只运行一个进程
  • 对容器的修改应该从基础镜像重新创建它
  • 使用.dockerignore文件
  • 利用docker hub官方镜像,不要重复造轮子
  • 最大限度减少镜像层的数量,并利用镜像缓存的优点

获取容器IP

docker inspect –format ‘{{ .NetworkSettings.IPAddress }}’ ID

容器的端口映射通过两种机制实现

  • 默认情况下Docker会修改宿主机的iptables规则
  • Docker会在宿主机上启动一个轻量的代理程序。

查看容器链接 docker inspect -f “{.HostConfig.Links}}” ID

Docker容器网络

默认情况下,DOcker会在宿主机上创建一个名为docker0的Linux网桥设备。该设备拥有一个私有网络地址及其所属子网。分配给Docker网桥的子网地址为172.[17-31].42.1/1610.[0-255].42.1/24192.168.[42-44].1/24中第一个没有被占用的子网地址。容器链接到网桥的网络接口会把docker0网络设备作为网关。

借助于Linux的IP转发功能和Docker引擎所管理的iptables规则,Docker为容器提供了对外部网络和NAT功能的访问

确认IP转发功能已开启cat /proc/sys/net/ipv4/ip_forword为1则是开启

Docker的三种网络模式

  • 网桥(默认)
  • 主机模式
  • 无网络模式
  • 与其他容器共享网络

pipework weaveworks

远程访问Docker

修改docker配置/etc/default/docker

1
2
3
...
DOCKER_OPTS="-H tcp://127.0.0.1:2375"
...
1
2
3
docker -H tcp://127.0.0.1:2375 images
#or
curl -s http://127.0.0.1:2375/images/json |python -m json.tool

kubernetes

功能

  • 容器编排
  • 可靠的容器重启
  • 自愈
  • 高集群利用率
  • 组织和分组
  • 水平扩展和复制
  • 微服务友好
  • 简化运维

kubernetes架构

  • kubernetes master包括(API server、Scheduler、Controller Mgr)。提供了API来收集和展现集群当前状态,并在节点之间分配pod。大多数用户将始终与master API直接交互
  • 主节点存储(etcd)。目前k8s的所有持久化状态都保存在etcd中
  • kubelet。agent运行在每个节点智商,负责控制Docker,向master报告自己的状态
  • kubernetes proxy。运行在每个节点智商,为本地容器提供了一个单一的网络接口,以连接到一组pod

查看容器状态docker stats ID

Docker log 收集