Docker镜像

Docker镜创建三种方法

基于已有的镜像创建

基于已有镜像创建只要使用dockers commit 命令。实质就是把一个容器里面运行的镜像程序以及该程序的运行环境打包起来生成新的镜像

-m 说明信息
-a 作者信息
-p 生产过程中停止容器的运行
docker ps -a 列出所有的容器
docker ps -l 列出最新创建的容器

创建基于已有的镜像创建

docker create -it jasonlix/docker-cobbler /bin/bash  #创建一个新的镜像
docker ps -a  #列出所有容器 
CONTAINER ID  docker守护进行在开启的时候会给容器分配的唯一ID

Docker 数据管理与网络通信_第1张图片

基于本地模板创建

通过导入操作系统模板文件可以生成镜像,模板从OPENVZ 开源项目下载

wget http://download.openvz.org/template/precreated/debian-7.0-x86-minimal.tar.gz
cat debian-7.0-x86-minimal.tar.gz | docker import - daoke:new 名字可以自定义

docker images | grep new

Docker 数据管理与网络通信_第2张图片

基于Dockerfile创建

除了手动生成Docker镜像之外还可以使用Dockerfile 自动生成镜像,Dockerfile是由组指令组成文件,其中每条指令对应Linux中的一条命令,docker程序将读取Dockerfile中的指令生成指定镜像Dockerfil结构大致分为四个部分,基础镜像信息,维护者信息,镜像操作指令和容器启动指令Dockerfile每条指令可以携带多个参数,支持使用#开头的注释

mkdir  apache
cd  apache
vim Dockerfile

vim run.sh

#!/bin/bash
rm -rf /run/httpd/*  #清楚缓存
exec /usr/sbin/apachectl -D FOREGROUND  #开启服务exec命令用于调用并执行指令的命令。
echo "this is ssoo" > index.html  # 生成主页
//生成镜像
docker build -t httpd:centos . 

//新镜像运行容器 端口自定映射为80端端口
docker run -d -p 1122:80 httpd:centos

//测试
http://192.168.10.11:1122

Docker 数据管理与网络通信_第3张图片
Docker 数据管理与网络通信_第4张图片
Docker 数据管理与网络通信_第5张图片
Docker 数据管理与网络通信_第6张图片

Docker 数据管理与网络通信_第7张图片

将镜像上传到私有仓库中

随着创建的镜像越来越多,目前有公有,私有。最方便就是公有仓库上传和下载都需要注册的私有也要注册

docker pull registry  # 私有仓库建立
vim /etc/docker/daemon.json  # 在etc/docker/目录下创建一个json文件否则在往自定义的私用云中上传镜像时回报错
{ "insecure-registries":["192.168.10.11:5000"]} # 在本地启动一个私有仓库监听端口号为5000
systemctl restart docker.service   重启服务
docker run -d -p 5000:5000 -v /data/registry:/tmp/registry registry #下载rsgistry 搭建本地私有云
docker tag jasonlix/docker-cobbler 192.168.10.11:5000/cobbler  #生成别名
docker push 192.168.10.11:5000/cobbler #上传
The push refers to a repository [192.168.10.11:5000/cobbler]
curl -XGET http://192.168.10.11:5000/v2/_catalog  #查看上传的镜像
{"repositories":["cobbler"]}  显示出就说明成功了

Docker 数据管理与网络通信_第8张图片
Docker 数据管理与网络通信_第9张图片
Docker 数据管理与网络通信

Docker的数据管理

在Docker中为了方便查看容器内产生的数据或者将过个容器中的数据实现共享管理Docker容器中数据主要分为两种方式:数据卷(Data Volumes) 和数据将容器(Data Volumes Containers).

数据卷

数据卷是一个提供容器使用的特殊目录,位于容器中。
可将宿主机的目录挂在到数据卷上,对数据卷修改的操作立即可见,并且更想数据不会影响。
从而实现数据在宿主机与容器之间迁移,数据卷的使用类似于Linux中的mount

Docker 数据管理与网络通信_第10张图片
Docker 数据管理与网络通信_第11张图片

数据卷容器

数据卷容器就是一个人普通的容器,专门提供数据卷给其他容器挂在使用

Docker 数据管理与网络通信
Docker 数据管理与网络通信_第12张图片

容器互联

简单说,就是会在源容器和接收容器之间建立一条隧道,接收容器可以看到源容器指定的信息

1、创建源容器

docker run -d -P --name w1 -it httpd:centos /bin/bash 使用docker run 创建容器

2、创建接收容器,使用--link指定连接容器以实现容器互联

docker run -d -P --name w2 --link w1:w1 -it httpd:centos /bin/bash

3、测试容器互联

进入容器使用ping命令查看容器是否能互相连通
Docker 数据管理与网络通信_第13张图片

Docker守护进程原理

docker 守护进程通过docker0实现网络连接的各种服务
docker0 Linux虚拟网桥

OSI七层模型中数据链路层的一种设备网桥通过make地址也就是通过物理层来划分 在不同网络中传输数据
Linux虚拟网桥的特点
可以设置IP地址 相等拥有一个隐藏的虚拟网卡
通常开始IP地址是三层模型中网络层不应该是现在二层模型上但是Linux虚拟网桥是通用网络设备抽象的一种只要是网络设备就能设置IP
当虚拟网桥拥有IP地址后Linux就可以通过路由表活在IP表的规则在网络层定义网桥就相当于拥有了隐藏的虚拟网卡
隐藏的虚拟网卡的名字就是这个虚拟网桥的名字

docker0 地址划分
IP 172.17.42.1 子网 255.255.0.0
MAC:02:42:ac:11:00:00 到02:42:ac:ff:ff
总共提供了65534 个地址
docker 根据IP范围为没一个容器提供make地址 避免了冲突
docker在守护经程开启式会创建两端的容器中网络设备另eth0一段也就是宿主机开启一个veth