Docker

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...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值