Docker 入门:http://www.docker.org.cn/book/docker/what-is-docker-16.html
Docker安装:http://www.docker.org.cn/book/install/supported-platform-17.html
Docker理论:
AUFS: http://www.open-open.com/lib/view/open1440483391763.html
Docker:容器和容器云--读书笔记
一,docker 命令:
1,docker信息:
docker info
docker version
2,image管理:
Docker registry是存储容器镜像的仓库。
镜像拉取:
docker pull [OPTION] NAME[:TAG @DIGEST]
如:
docker pull ubuntu
docker pull ubuntu:ubuntu12.04
docker pull SEL/ubuntu
docker pull 10.10.103.215:5000/sshd
镜像推送:
docker push [OPTIONS] NAME[:TAG]
如:
docker push SEL/ubuntu
查看本机镜像:
docker images [OPTIONS] [REPOSITORY[:TAG]]
如:
docker images
删除镜像:
docker rmi [OPTIONS] IMAGE [IMAGE...]
-f : 强制删除存在容器的镜像
查看镜像的历史:
docker history [OPTIONS] IMAGE
3,container管理:
基于一个镜像创建一个容器并运行:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
如:
docker run ubuntu echo "Hello World"
docker run -i -t --name mytest ubuntu /bin/bash
-i : 交互模式
-t : 伪终端
--name : 指定容器名
-c : CPU的share值
-m : 内存总量,以B,K,M,G为单位
-v : 挂载一个volumn,格式为[host-dir]:[container-dir]:[rw|ro]
-p : 将容器的端口暴露给宿主机的端口,格式为hostPort:container-Port,这样可以让外部主机通过宿主机暴露的端口访问容器内部的应用
--link : 设置另一个容器的通信地址,格式为[container-name]:[alias],docker将自动维护容器中/etc/hosts文件,如realip alias
启动,停止和重启一个已经存在的容器:
docker start/stop/restart CONTAINER_ID
-i : 交互模式
-a : 附加标准输入,输出或错误输出
-t : 设置停止前等待的时间
删除一个容器:
docker rm [OPTION] CONTAINER [CONTAINER...]
-f : 强制删除启动中的容器
将容器固化为一个新的镜像:
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
注意:建议通过docker build命令,结合Dockerfile创建并管理镜像
重点:运维
观察容器运行情况,或与容器主线程交互:
docker attach [OPTIONS] CONTAINER
查看容器或镜像详细信息:
docker inspect [OPTIONS] CONTAINER|IMAGE [CONTAINER|IMAGE...]
--format : 定制输出的模板格式,以便输出特定信息
查看容器相关信息:
docker ps [OPTIONS]
-a : 所有容器
-l : 最新创建的容器
打印容器中进程的运行日志:
docker logs [OPTIONS] CONTAINER
在一个容器中执行命令:
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
容器资源使用:
docker stats [OPTIONS] [CONTAINER...]
容器内进程运行情况:
docker top [OPTIONS] CONTAINER [ps OPTIONS]
查看容器与主机之间的端口映射关系:
docker port [OPTIONS] CONTAINER [PRIVATE_PORT[/PROTO]]
打印实时的系统事件:
docker events [OPTIONS]
docker search ubuntu: 搜索镜像
二,Docker的原理
1,namespace资源隔离
clone(),setns(),unshare()
UTS,IPC,PID,Network,Mount,User
CLONE_NEWUTS,CLONE_NEWIPC,CLONE_NEWPID,CLONE_NEWNET,CLONE_NEWNS,CLONE_NEWUSER
2,cgroup资源限制
内存配置,CPU优先级配置,资源使用统计(计费),任务控制
3,Docker架构
4,Docker client和daemon
5,libcontainer
6,镜像管理,存储管理,数据卷,网络管理,容器安全
三,Docker高级实践
1,容器化思维
容器是一个进程及运行该进程所需要的各种依赖
执行命令,调试用docker exec
长期使用的文件应加入到镜像;经常修改的文件用数据卷。
应用的stdout和stderr重定向到/var/log/containers/
2,网络配置
ip命令
3,Dockerfile最佳实践
定义:指令集,单独并自上而下执行,每执行一条会生成新的镜像,每层镜像有缓存机制,错误指令会被忽略(除了FROM)
语法:必须从FROM开始,指令不区分大小写但推荐大写
指令:
创建环境变量:
ENV <key> <value>或ENV <key>=<value> ...
使用环境变量:
$variable_name或${variable_name}
基础镜像:
FROM <image>:<tag>
复制:
COPY <src> <dest>
ADD <src> <dest> //多了自动解压和远程资源的能力
运行脚本:
RUN <command>
RUN ["executable","param1","param2"]
启动容器前:会被docker run命令提供的命令行参数覆盖,可以有多条,只有最后一条有效。
CMD <command>
CMD ["executable","param1","param2"]
CMD ["param1","param2"]//为ENTRYPOINT指令提供参数
启动容器前:不会被docker run命令提供的命令行参数覆盖,可以有多条,只有最后一条有效。
ENTRYPOINT <command>
ENTRYPOINT ["executable","param1","param2"]
添加一个将来执行的触发器指令到镜像中:
ONBUILD [INSTRUCTION]
注意:不要在Dockerfile中做端口映射(EXPOSE指令),会破坏Docker的可移植性,应在docker run命令中用-p参数指定。
4,Docker监控
a,Google的cAdvisor
b,Datadog
c,SoundCloud的Prometheus
5,容器化应用构建的基础:高可用配置中心
微服务发现,发布和订阅
etcd:解决分布式系统中数据一致性的问题
四,容器云
编排:Fig/Compose
DockerFile重现了一个容器,Compose重现容器的配置和集群
宿主机管理:Machine
创建已经安装好Docker的虚拟机
容器大一统命令行:Swarm
CoreOS的Fleet
容器云Flynn和Deis
Kubernates
定义:管理跨主机的容器化应用,可应用部署,高可用管理,弹性伸缩
kubectl: 客户端工具,可增删改查pod,replication controller,service
1,pod,kubernates的最小创建,调度和管理的粒度,一组同功能的容器集合(豆荚)
里面所有容器有相同的标签label
里面所有容器使用相同的IP,由service代理
里面所有的容器有相同的replication controller
里面的容器共享volumn
json格式配置文件
创建:kubectl create -f obj.json
查看:kubectl get pod
log:kubectl log [pod name] [container name]
删除:kubectl delete pod [pod name]
2,replication controller
功能:重启,弹性伸缩,悄悄更新
json格式配置文件: pod模板+期望副本数+label selector
创建:同上
查看:kubectl get replicationController -o wide
3,service(proxy或router)
管理IP,负载平衡
json格式配置文件: IP地址+一个label selector
查看:kubectl get services
注:没有label selector的service并不会创建endpoints,可以自定义一个endpoints对象,并指向外部系统,如数据库
五,openshift
OpenShift Container Platform 3.3 uses Kubernetes 1.3 and Docker 1.10.
1,Architecture
1.1 Overview
data:image/png;base64,iVBORw0K...
1.2 Infrastructure components
1.2.1 Kubernates infrastructure:
Master:
The master is the host or hosts that contain the master components, including the API server, controller manager server, and etcd. The master manages nodes in its Kubernetes cluster and schedules pods to run on nodes.
Nodes:
A node provides the runtime environments for containers. Each node in a Kubernetes cluster has the required services to be managed by the master. Nodes also have the required services to run pods, including the Docker service, a kubelet, and a service proxy.
Kubelet:
Each node has a kubelet that updates the node as specified by a container manifest, which is a YAML file that describes a pod. The kubelet uses a set of manifests to ensure that its containers are started and that they continue to run.
Service Proxy:
Each node also runs a simple network proxy that reflects the services defined in the API on that node. This allows the node to do simple TCP and UDP stream forwarding across a set of back ends.
1.2.2 Image Registry
OC Registry, 3th Registries
1.3.3 Web Console
object, controller: build...