以前使用 Typora(markdown 编辑器) 在本地记了很多笔记,很多笔记内容比较适合自己查看,还不至于分享阶段,所以还没有必要分享到公众号或者知乎,但是本地笔记的一个问题是不好回顾时间线;最近发现使用 github pages + hexo + next + Typora 可以非常方便地同步本地笔记到个人博客上,同时也支持笔记标签,分类,归档的功能。所以后面打算把之前记的笔记慢慢迁移过来,同时也开始记录自己新的技术,思维成长以及分享自己的一些生活日常、观点和想法。
这次记录的是之前阅读《每天5分钟玩转docker》时记的笔记。
第三章 docker 镜像
docker info: 查看 docker 服务器的信息
docker images / docker image ls
镜像的内部结构
base 镜像
- rootfs
- 不同 linux 发型版的区别主要就是 rootfs
- 容器只能使用 host 的 kernel,并且不能修改
镜像的分层结构
- 容器层记录对镜像的修改,所有镜像层都是只读的,不会被容器修改,所以镜像可以被多个容器共享
构建镜像
docker commit
Dockerfile: docker build -t ubuntu-with-vim-dockerfile .
查看镜像分层结构
Docker history
Dockerfile 常用指令
FROM
MAINTAINER
COPY
ADD:会自动解压
ENV
EXPOSE
VOLUME
RUN
CMD
ENTRYPOINT
最佳实践 P45
更多 docker 命令
images
history
commit
build
tag
pull
push
rmi
Search
第四章 docker 容器
运行容器
docker create 基于镜像创建容器
docker start
docker run -it (=create+start)
-d 参数在后台启动容器
docker attach && docker exec(推荐 exec)
docker logs
stop/start/restart/kill 容器
--restart=always
--restart=on-failure:3
pause/unpause 容器
rm 容器
- docker rm 是删除容器,docker rmi 是删除镜像
资源限制
内存限制
docker run -m 200M --memory-swap=300M progrium/stress --vm 1 --vm-bytes 280M
cpu 限额
docker run --name container_A -it -c 1024 progrium/stress --cpu 1
docker run --name container_B -it -c 512 progrium/stress --cpu 1
docker-machine ssh default
block IO 带宽限额 P68
- block IO 权重
- 限制 bps (byte per second)和 iops(io per second)
实现容器的底层技术
- cgroup 实现资源限额
ls /sys/fs/cgroup/cpu
ls /sys/fs/cgroup/memory
ls /sys/fs/cgroup/blkio
-
namespace 实现6种资源隔离
- Mount:让容器看上去拥有整个文件系统
- UTS:让容器有自己的 hostname
- IPC:让容器拥有自己的共享内存和信号量来实现进程间通信,而不会与 host 和启动容器的 IPC 混在一起
- PID:容器拥有自己独立的一套 PID
- Network:容器拥有自己独立的网卡/IP/路由等资源
- User:容器能够管理自己的用户
第五章 网络
docker network ls
docker run -it --network=none centos-with-net-tools
host 网络
docker run -it --network=host centos-with-net-tools
- 共享 docker host 的网络栈,存在端口冲突问题
Bridge 网络
brctl show
docker network inspect bridge
user-defined 网络
docker network create --driver bridge my_net
docker network create --driver bridge --subnet 172.22.16.0/24 --gateway 172.22.16.1 my_net2
docker run -it --network=my_net2 --ip 172.22.16.18 centos-with-net-tools /bin/bash
docker connect my_net2 xxxxxx
容器间通信
- Host 网络: 容器对外网的访问(NAT)
- 外部世界访问容器: 端口映射( ps aux | grep docker-proxy)
第六章 存储
storage driver
- 分层结构: Copy-on-Write 技术
- Docker info
- 无状态应用的容器 && 有状态应用的容器
data volume
- bind mount
- -v containerpath:ro
- 应用: 将源码目录 mount 到容器,在 host 修改代码就可以看到应用的实时效果
- docker managed volume
docker volume ls
docker volume inspect xxxxxx
docker run -it -p 80:80 -v /testbylinyouquan centos-with-net-tools /bin/bash
数据共享
容器与 host 共享数据
docker cp
容器之间共享数据
- 共享数据放在 bind mount 中,然后将其 mount 到多个容器
volume container P101
--volumes-from
data-packed volume container P102
data volume 生命周期管理
- 备份/恢复/迁移/销毁 data volume
- 孤儿 volume,使用 docker volume rm 删除
第七章 多主机管理
创建 machine
docker-machine create --driver virtualbox lyq-host1
docker-machine ls
docker-machine ssh default
docker-machine ssh lyq-host1
docker-machine env lyq-host1
eval $(docker-machine env)
第八章 容器网络
P118-P172
- 跨主机网络方案
- Docker 原生的 overlay 和 macvlan
- 第三方方案:flannel/weave/calico
- libnetwork & CNM(Container Network Model)(P118)
- Sandbox
- Endpoint
- Network
overlay 网络
启动 consul 服务
docker run -d -p 8500:8500 --name consul progrium/consul -server -bootstrap
http://192.168.99.101:8500/ui/#/dc1/services
/etc/init.d/docker status
创建 overlay 节点
docker-machine create --driver virtualbox --engine-opt="cluster-store=consul://$(docker-machine ip default):8500" --engine-opt="cluster-advertise=eth1:2376" consul-test-host1
docker-machine create --driver virtualbox --engine-opt="cluster-store=consul://$(docker-machine ip default):8500" --engine-opt="cluster-advertise=eth1:2376" consul-test-host2
cat /var/lib/boot2docker/profile
docker network ls
docker network create --driver overlay ov_net1
docker network inspect ov_net1
docker run -itd --name bbox1 --network ov_net1 busybox
docker exec bbox1 ip r
docker network inspect docker_gwbridge
docker exec -it bbox1 ping -c 2 www.baidu.com
docker run -itd --name bbox2 --network ov_net1 busybox
docker exec -it bbox1 ping -c 2 bbox2
Overlay 网络中的容器可以直接通信,同时 docker 也实现了 DNS 服务
ip netns exec 1-defedcd6bf brctl show
ip netns exec 1-defedcd6bf ip -d l show vxlan0
boot2docker 安装包
tce-load -wi vim
tce-load -wi bridge-utils(安装 brutal)
第九章 容器监控
- docker container stats
- sysdig
- Weave scope(了解)
- cAdvisor:google 开发的容器监控工具
- Prometheus:非常优秀的监控工具
- Grafana
第十章 日志管理
-
docker logs
-
filebeat + ELK,利用了 docker 默认的 logging driver json-file
- Elasticsearch
- Logstash
- Kibana
-
fluentd
-
Graylog:与 ELK 想提并论的一款集中式日志管理方案(了解)
第十一章 数据管理
- 跨主机的 volume