uwufuwuufudocke:容器的虚拟化,比传统的虚拟化轻量 linux6.5版本以上 资源利用率很高。更快的交付和部分。不需要的额外hypervisor支持。易迁移,对平台依赖性不强 以增量的方式进行分发和更该。


:镜像,是一个只读模板(类型于ios)
:容器:类似于os,可以被启动,开始,停止,删除等操作 每个容器都是相互隔离,
:仓库:存放镜像的一个场所,分为:公开和私有仓库:最大仓库docker.hub 国内公开仓库(dockerpool)


https://www.zybuluo.com/zhpro/note/314843 关于docker的一些信息和介绍
https://docs.docker.com/engine/installation/centos/  官网关于Centos系统安装docker的文档
Docker 学习笔记 By 枯木  http://blog.opskumu.com/docker.html
http://www.cnblogs.com/cuizhipeng/p/4383919.html  docker 命令介绍的网站


centos 6
yum -y install epel-release docker-io
/etc/init.d/docker start
centos 7
yum -y install epel-release docker
systemctl start docker 启动



     docker 的镜像管理
docker pull centos 从docker.com获取centos镜像
docker p_w_picpaths 查看本地有哪些镜像
docker tag centos  标签名(aa)  为centos镜像设置标签为aa 在使用docker p_w_picpaths查看会多出一行,改行的镜像id和centos的一样
docker search [镜像名] 从docker仓库搜索docker镜像,后面是镜像名
docker rmi centos 用来删除指定的镜像,其中后面的参数可以是tag,如果是tag时,实际上是删除该tag,只要改镜像还有其他tag,就不会删除该镜像。当后面的参数为镜像id时,会彻底删除整个镜像,连同所有标签一同删除。
     基于本地模板创建镜像
在openvz的官网下载一个模板
cat +下载的openvz模板 | docker import - 自定义的镜像名
docker save -o aa.tar.gz 源镜像名     把现有的镜像导成一个文件
利用现有文件恢复现有镜像
docker load --input 把镜像文件导入现有镜像 或者docker load < 镜像文件
把自己的镜像传入docker hub官网 需要注册一个用户:docker push 镜像名



docker的容器管理
docker run -t -i centos /bin/bash  用下载到的镜像开启容器,-i表示让容器的标准输入打开,-t 表示分配一个伪终端,注意:要把-i-t放到镜像名的前面。
docker start (IMAGE ID)  激活一个虚拟容器
docker exec -it (IMAGE ID)/bin/bash 进入虚拟容器
docker attach 容器id  使用attach这个命令进入的虚拟镜像,退出时容器也会中止。
docker ps 查看运行的容器,加-a选项可以查看更多的运行容器
  镜像使用容器生成新的镜像
docker run 运行以后,进入容器我们可以做一些更该,也可以根据這个容器创建新的镜像。
将修改过内容的容器保存为一个自定义的镜像
docker commit -m "change something" -a "somebodyinfo" container_id(通过docker ps -a获取id) 新的镜像名
-m :表示加一些改动的信息。-a指定特定作者相关信息。
docker rm `docker ps -aq` 删除容器下的所有进程
docker rm $(docker ps -q) 删除全部运行的容器
docker stop $(docker ps -q) & docker rm $(docker ps -aq) 一条命令实现停用并删除容器:


docker rm 容器id 删除一个容器    docker -f rm 容器id   可以强制删除一个容器 也可以同时删除多个容器
docker create -it 镜像名  创建一个容器但并不启动       (在本机镜像的基础上)
docker start 镜像名/p_w_picpath ID  启动一个容器  也可以同时启动多个容器
docker stop  镜像名/p_w_picpath ID  关闭一个容器
docker stop $(docker ps -q) 停止全部运行的容器
查看容器的日志输出信息
docker logs CONTAINER_ID


导入导出容器 -方便迁移
docker export CONTAINER_ID > file.tar
cat file.tar | docker import - 自定义镜像名



   私有仓库管理
下载私有仓库镜像:docker pull registry
依托registry镜像来创建容器:docker run -d -p 5000:5000 registry
-d 放到后台运行 -p 做一个端口映射,宿主机端口:容器端口 访问宿主机5000端口,就相当于访问该容器
当 docker ps的时候,会在 PORTS 列显示 0.0.0.0:5000->5000/tcp
用 curl 127.0.0.1:5000 测试 会显示"\"docker-registry server\""


上传一个镜像到私有仓库
首先要给这个镜像做tag  必须带有私有仓库的 ip:port 要不然会上传到共有仓库里面去
docker tag 镜像名 私有库ip:port/镜像名
其次更改https为http -- 在 /etc/init.d/docker 中加入 --insecure-registry 本机ip地址:5000
$exec -d $other_args &>> $logfile &
修改为: $exec -d --insecure-registry 192.168.3.4:5000 $other_args &>> $logfile &
 重启 docker 并启动 registry 容器



上传--docker push 私有库ip:port的镜像名
使用 Docker 的 RESTful API 可以查看仓库服务器中的镜像::curl http://ip:port/v1/search 也可以用 docker search ip:port 命令


拉取私有库的镜像,需要指定私有库的地址端口::docker pull ip/centos




docker的网络管理:
. docer 的 4 种网络模式
1   host 模式 : 在 docker run 时,用 --net=host 指定 。这种模式下容器复用了宿主机的网卡,容器内的 ip 和宿主机的 ip 是一致的。包括主机名都是一样的
2  container 模式: 使用--net=container:CONTAINER_ID/CONTAINER_NAME 指定。多个容器使用共同的网络。
CONTAINER_ID/CONTAINER_NAME 指复制哪个容器的网络模式。
 如下面这个示例:这个新建的test容器就复用了zhpro这个容器的网络模式。ip和test容器的ip是一致的。
1.例: #docker run --it --name=test --container:zhpro centos bash
3  none 模式 : 使用 --net=none 指定,这个模式下的容器会不配置任何网络,只有一个lo网卡
4  bridge 模式 : 使用 --net=bridge 指定。模式不指定就是这样模式,类似于 vmware 的 NAT 模式。同一个宿主机的容器在一个网段下,之间可以相互通信。


bridge 模式是 Docker 默认的网络设置,此模式会为每一个容器分配 Network Namespace、设置 IP 等,并将一个主机上的 Docker 容器连接到一个虚拟网桥上。当 Docker server 启动时,会在主机上创建一个名为 docker0 的虚拟网桥,此主机上启动的 Docker 容器会连接到这个虚拟网桥上。虚拟网桥的工作方式和物理交换机类似,这样主机上的所有容器就通过交换机连在了一个二层网络中。接下来就要为容器分配 IP 了,Docker 会从 RFC1918 所定义的私有 IP 网段中,选择一个和宿主机不同的IP地址和子网分配给 docker0,连接到 docker0 的容器就从这个子网中选择一个未占用的 IP 使用。如一般 Docker 会使用 172.17.0.0/16 这个网段,并将 172.17.42.1/16 分配给 docker0 网桥(在主机上使用 ifconfig 命令是可以看到 docker0 的,可以认为它是网桥的管理接口,在宿主机上作为一块虚拟网卡使用)


2.1 列出当前主机网桥# brctl show或brctl show docker0
brctl 工具依赖bridge-utils 包
2.2 查看当前 docker0 ip    # ifconfig docker0或者ip addr show docker0
2.3 自定义 docker0 网桥的网段
默认情况下 docker0 会分配172.1.42 或者192.168.42 这个网段。
我们也可以手动更改这个网段为 192.168.10.0/24。
要注意顺序:
1.# /etc/init.d/docker stop                    #停掉docker服务
2.# ip link set dev docker0 down               #停掉网桥docker0
3.# ip addr add 192.168.10.1/24 dev docker0    #给docker0添加地址
4.# ip addr del 192.168.42.1/24 dev docker0    #删除docker0原有的地址
5.# ip link set dev docker0 up                 #启动网桥docker0
6.# /etc/init.d/docker start                   #启动服务