rhel7.3-Docker(镜像仓库、镜像、容器)

一.Docker

        Docker 是一个开源的应用容器引擎,主要利用 linux 内核 namespace 实现沙盒隔离,用cgroup 实现资源限制。让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。Docker 容器通过 Docker 镜像来创建。容器与镜像的关系类似于面向对象编程中的对象与类。由于其基于LXC的轻量级虚拟化的特点,docker相比KVM之类最明显的特点就是启动快,资源占用小。docker能够只加载每个container变化的部分,这样资源占用小,能够在单机环境下与KVM之类的虚拟化方案相比能够更加快速和占用更少资源。隔离性相比KVM之类的虚拟化方案还是有些欠缺,所有container公用一部分的运行库。Docker是基于Linux 64bit的,无法在32bit的linux/Windows/unix环境下使用。和宿主机共用一部分资源,内核要求在3.10以上。

        docker容器是docker镜像的实例化,docker容器开启方便,即创即用,随着要求进行删除添加。国内有很多容器云服务服务商:华为云,阿里云,时速云,腾讯云。近几年云服务是大热门,几乎各大厂商都有参与。镜像用来创建容器,是容器的只读模板,默认可以从 docker hub 上下载。docker 的镜像是增量修改,每次创建新的镜像都会在父镜像上构建一个增量的层,基于 AUFS 技术。

二.容器管理

1.docker的安装(用的rhel7.3的yum源)



2.内核要求3.10以上


3.容器的基本操作

(1)导入镜像,创建容器

docker load -i  镜像的tar包


(2)docker images   ##查看本地镜像


(3)基于nginx镜像创建web容器(映射到8080端口)

(4)创建web容器的发布文件,把发布文件复制到web容器

(4)docker inspect  web    ##查看容器详情

(5)测试

(6)docker top web  ##查看容器进程


(7)docker logs web   ##查看容器指令输出

(8)docker stats  web   ##查看容器资源使用率


(9)docker diff web   ##查看容器修改

(10)docker stop web   ##停止容器

docker start web 启动容器
docker kill web 强制干掉容器

docker restart web 重启容器

docker pause/unpause web    暂停/恢复容器

docker rm web    删除容器

docker export web > web.tar   ##导出容器

(11)创建容器,并且挂载发布目录(这样可以不断追加内容,不像cp命令那样仅有一个发布文件)




(12)docker run 在创建容器时使用 -v 参数可以挂载一个或多个数据卷到当前运行的容器中,-v
的作用是将宿主机上的目录作为容器的数据卷挂载到容器中,使宿主机和容器之间可以共

享一个目录。

docker commit 时卷的数据不会被保存


(13)在容器内提交容器到镜像,数据保存

(14)数据卷容器(容器可以直接使用--volumes-from参数去共享数据卷的数据)


(15)容器间互联:--link 参数可以在不映射端口的前提下为两个容器间建立安全连接, --link 参数可以连接一个
或多个容器到将要创建的容器。

4.容器的四种网络模式:

bridge 桥接模式、host 模式、container 模式和 none 模式。启动容器时可以使用 --net 参数指定,默认是桥接模式。bridge桥接模式: Docker Container 在使用时,并非为开发者包办了一切。最明显的是,该模式下 Docker Container 不具有一个公有 IP,即和宿主机的 eth0 不处于同一个网段。导致的结果是宿主机以外的世界不能直接和容器进行通信。


host 模式:bridge 桥接模式很好的补充。采用 host 模式的 Docker Container,可以直接使用宿主机的 IP 地址与外界进行通信,若宿主机的 eth0 是一个公有 IP,那么容器也拥有这个公有 IP。同时容器内服务的端口也可以使用宿主机的端口,无需额外进行 NAT 转换。

Container 网络模式:
(1) 查找 other container(即需要被共享网络环境的容器)的网络 namespace;

(2)将新创建的DockerContainer(也是需要共享其他网络的容器)的 namespace,使用other container 的 namespace。

None 网络模式:

网络环境为 none,即不为 Docker Container 任何的网络环境。一旦 Docker Container 采用了none 网络模式,那么容器内部就只能使用 loopback 网络设备,不会再有其他的网络资源。

none网络模式的配置:

netns 是在 linux 中提供网络虚拟化的一个项目,使用 netns 网络空间虚拟化可以在本地虚拟
化出多个网络环境,目前 netns 在 lxc 容器中被用来为容器提供网络。

(1)获取容器的PID

(2)容器的网络空间

ip link add name veth0 type veth peer name veth1      ##建立网络链路
brctl addif docker0 veth0  ##把一端添加到docker0网桥
mkdir /var/run/netns


(3)给容器添加网卡,ip以及网关


(4)容器内查看ip

(5)外部去ping,进行测试


三.镜像管理(私人镜像仓库的搭建)

1.本地仓库的搭建:

(1)导入镜像仓库的tar包

(2)创建镜像仓库容器(默认5000端口,映射到本机的5000端口,默认的镜像仓库目录/var/lib/registry)


(3)docker开启之后iptables策略就不能随意清空,端口映射主要就是依据iptables来进行端口转发

(4)Docker 镜像的命名规则 localhost:5000/nginx:latest 中,localhost:5000 表示 Registry 的地

址和端口,latest是标签。

docker tag     ##修改docker镜像的名称

docker push   ##推送镜像


(5)测试:删除本地的nginx镜像文件,从本地仓库拉取

docker pull      ##拉取镜像

2.镜像仓库的加密

server1:客户端; foundation78:镜像服务端

(1)生成ssl证书以及key

(2)把证书和密钥发送到certs目录统一保存,并且把证书复制到域名认证目录下


(3)创建镜像仓库容器,并且把证书和密钥所在目录进行挂载


(4)给将要推送的镜像重命名并进行推送(仓库的域名/镜像)

(5)把CA证书发给客户端(记得把redhat.com.crt文件名重新命名为ca.crt),客户端就可以拉取镜像,并在客户端做本地解析(仓库所在的域名的IP)


(6)客户端测试拉取镜像(为了方便使用把镜像名称改回来)



3.镜像仓库的加密登陆认证

server1:客户端; foundation78:镜像服务端

(1)生成用户名以及密码


(2)创建镜像容器,并挂载用户认证目录以及加密证书密钥所在目录


(3)服务端要登陆才可以推送镜像

(4)同样的,客户端登陆才能拉取镜像

(5)把镜像服务器域名证书复制到ca证书的信任目录下,访问域名就可以查询是否上传成功,以字典形式返回


4.镜像仓库的远程访问

(1)在/etc/docker/创建仓库所在IP以及端口,重启服务生效

(2)创建仓库的容器

(3)修改镜像名称,上传镜像到172.25.78.250:5000


(4)推送镜像


(5)能与之通信的主机都可以拉取此镜像文件


四.Dockerfile 编写(生成自定义镜像)

1.编写apache镜像文件

(1)vim Dockerfile   ##dockerfile

(2)yum源

vim dvd.repo


(3)创建apache镜像(dockerfile和yum源文件最好在同目录)

docker build -t rhel7:apache Dockerfile

从dockerfile文件一步一步往下执行,相当于往基础镜像上面添加一层一层的命令

(4)镜像创建成功

(5)docker history rhel7:apache    ##查看镜像的每一层镜像文件

(6)测试:用自己创建的镜像创建web容器


2.编写ssh镜像文件

(1)ssh的dockerfile文件


(2)yum源文件使用apache的即可

(3)创建ssh镜像

(4)镜像创建成功

(5)用ssh镜像创建容器进行测试(端口映射到222)

ssh -p  222   ##指定端口222成功登陆主机

3.同时推送包含多个服务的镜像

(1)supervisor的dockerfile文件

(2)yum源(supervisor软件从网上下载)


(3)supervisord的配置文件

(4)创建镜像supervisor


(5)成功创建镜像supervisor


(6)利用镜像supervisor去创建容器进行测试(可以同时映射多个端口)

五.docker-compose(同时管理多个dockerfile文件)

        Docker Compose 将所管理的容器分为三层,工程(project),服务(service)以及容器。Docker Compose 是一个用来创建和运行多容器应用的工具。使用 Compose 首先需要编写Compose 文件来描述多个容器服务以及之间的关联,然后通过命令根据配置启动所有的容器。Dockerfile 可以定义一个容器,而一个 Compose 的模板文件(YAML 格式)可以定义一个包含多个相互关联容器的应用。

一键推送haproxy+web的负载均衡架构:


(1)vim   docker-compose.yml

image   ##指定镜像

volumes   ##挂载共享文件

expose    ##暴露的端口信息,但不映射到宿主机,只被连接的服务访问。仅可以指定内部端口为参数

links     ##链接 到其 它服务 中的容 器

ports     ##端口映射

(2)haproxy服务的配置文件haproxy.cfg

(3)docker-compose up     ##创建并启动容器(默认的模板文件是 docker-compose.yml,其中定义的每个服务都必须通过 image 指令指定镜像或 build 指令(需要 Dockerfile)来自动构建。)

docker-compose start   启动容器

如果不希望自动启动关联的容器,可以使用 –no-deps 选项

(4)测试负载均衡

(5)关闭apache,具有健康检查的功能

(6)docker-compose top         ##查看容器状态

(7)haproxy的web监控页面


五.docker swarm集群

        管理 Docker 集群,它将一群 Docker 宿主机变成一个单一的,虚拟的主机。Swarm deamon 只是一个调度器(Scheduler)加路由器(router),Swarm 自己不运行容器,它只是接受 docker 客户端发送过来的请求,调度适合的节点来运行容器,这意味着,即使Swarm 由于某些原因挂掉了,集群中的节点也会照常运行,当 Swarm 重新恢复运行之后,

它会收集重建集群信息。

1.初始化swarm管理节点

2.把worker加入管理节点

3.查看节点状态(提前做好本地解析)

4.同时创建3个web容器(swarm会根据worker的负载能力去下发任务)

5.查看容器的状态

docker  service   ls      ##查看容器的同步状态

6.容器在线扩张以及压缩

docker service  scale  web=9    ##web容器扩展到9个

7.创建swarm的监控容器

web页面去监控管理的集群每个容器的状态

8.在线镜像版本更新

docker service  update  --image  rhel7:apache  --update-delay 5s  --update-parallelism 2 web  ##更新的镜像文件是rhel7:apache ,每5s更新一轮,每轮更新2个容器

更新的过程:老版本关闭下线,新版本上线运行


就写到这里,总之docker的内容很庞大,值得去学习探索,是云服务的重要基础。

展开阅读全文

没有更多推荐了,返回首页