Docker

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口

一、docker的安装与部署

系统环境:要求centos7以上,内核必须不小于3.10

下载包,并安装

启动服务,并查看

ip addr可以看到docker0



二、镜像的导入和容器的使用

1、导入镜像并查看


2、使用镜像创建容器,并查看信息

3、网页查看




4、同样的方式导入nginx查看


也可以做端口映射:

还可以编辑默认发布目录,用cp命令

可以用diff查看容器的变化


5、数据卷管理

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

此时修改index.html里的内容,直接会在容器里生效


并且可以设置读写权限


但在主机里是没有读写权限的


备份数据卷 --volumes-from


对于foreground容器,由于其只是在开发调试过程中短期运行,其用户数据并无保留的必要,因而可以在容器启动时设置--rm选项,这样在容器退出时就能够自动清理容器内部的文件系统,如下图在ubuntu环境下打包一个文件




6、创建容器镜像

先建立一个ubuntu容器,在里面创建文件


完成后commit创建容器镜像v1,并删除vm1

再次创建容器名字随意,导入v1,查看文件还在

删除容器的命令是rm,删除镜像是rmi


7、容器间的互连

--link 参数可以在不映射端口的前提下为两个容器间建立安全连接, --link 参数可以连接一个或多个容器到将要创建的容器。
--link 参数的格式为 --link name:alias,其中 name 是要链接的容器的名称,alias 是这个连接的别名。




三、网络管理

Docker 在启动时会创建一个虚拟网桥 docker0,默认地址为 172.17.42.1/16, 容器启动后都会被桥接到 docker0 上,并自动分配到一个 IP 地址。


四种网络模型

1、bridge模式,不需要-net指定,为默认设置

改模式docker网络隔离基于网络命名空间,在物理机上创建docker容器时会为每一个docker容器分配网络命名空间,并且把容器IP桥接到物理机的虚拟网桥上。

2、host模式:此模式创建的容器没有自己独立的网络命名空间,是和物理机共享一个Network Namespace,并且共享物理机的所有端口与IP,并且这个模式认为是不安全的。

ip addr查看




3、container模式:此模式和host模式很类似,只是此模式创建容器共享的是其他容器的IP和端口而不是物理机,此模式容器自身是不会配置网络和端口,创建此模式容器进去后,你会发现里边的IP是你所指定的那个容器IP并且端口也是共享的,而且其它还是互相隔离的,如进程等。

先建立一个容器vm1,并查看ip信息


使用容器模式指定,并查看ip信息

4、none模式:此模式下创建容器是不会为容器配置任何网络参数的,如:容器网卡、IP、通信路由等,全部需要自己去配置

查看网桥,没有需要我们自建建立,在真机端和容器端建立连接

在/var/run/下建立netns目录,并查看容器pid,建立链接

Docker Daemon 利用 veth pair 技术,在宿主机上创建两个虚拟网络接口设备,假设为veth0和veth1。而 veth pair 技术的特性可以保证无论哪一个 veth 接收到网络报文,都会将报文传输给另一方。


Docker Daemon 将 veth0 附加到 Docker Daemon 创建的 docker0 网桥上。保证宿主机的网络报文可以发往 veth0

Docker Daemon 将 veth1 添加到 Docker Container 所属的 namespace 下,并被改名为 eth0。如此一来,保证宿主机的网络报文若发往 veth0,则立即会被 eth0 接收,实现宿主机到Docker Container 网络的联通性;同时,也保证 Docker Container 单独使用 eth0,实现容器网络环境的隔离性。

查看配置ip是否成功



四、使用Dockerfile构建镜像以及搭建服务

Dockerfike快速创建自定义的Docker镜像

配置纯净环境,导入rhel7的镜像


在/tmp/docker目录下。编写好yum源

此时yum源是否搭建成功

编写Dockerfile,并执行安装httpd服务测试

--FROM(指定基础image) 在dockfile其他指令的前面指定基础image,后面的指令都依赖于该指令指定的image

--MAINTAINER (指定镜像创建者的信息)

--RUN(安装软件用) RUN可以运行任何被基础image支持的命令,如果基础image指定的是ubuntu,那么RUN中只能使用ubuntu的命令

--CMD(设置容器启动是执行的操作) 可以是自定义脚本,也可是系统命令,该指令只能出现一次,如果有多条,则只执行最后一条

--ENTRYPOINT(设置容器启动时执行的操作) 每个 Dockerfile 中只能有一个 ENTRYPOINT,当指定多个 ENTRYPOINT 时,只有最后一个生效

--USER(设置container容器的用户) 指定运行容器时的用户名或 UID,后续的 RUN 也会使用指定用户。当服务不需要管理员权限时,可以通过该命令指定运行用户。并且可以在之前创建所需要的用户

--EXPOSE(指定容器需要影射到宿主机的端口) 该命令会将容器中的端口映射成宿主机的某个端口,当你需要访问容器的时候,可以直接访问宿主机的ip:映射过去的端口

--ENV(用于设置环境变量)

--ADD(从src复制文件到container的dest路径)构建指令,所有拷贝到container中的文件和文件夹权限为0755,uid和gid为0;如果是一个目录,那么会将该目录下的所有文件添加到container中,不包括目录;如果文件是可识别的压缩格式,则docker会帮忙解压缩(注意压缩格式);如果是文件且中不使用斜杠结束,则会将视为文件,的内容会写入;如果是文件且中使用斜杠结束,则会文件拷贝到目录下


2、再次编写Dockerfile部署ssh服务

运行测试


3、设置一键部署

更改yum源,加入supervisior

编写Dockerfile和supervisord.conf


完成后测试


五、仓库的搭建

下载registry镜像

导入镜像并查看

生成容器

修改景象的tag,完成后把打了tag的镜像上传到本地镜像

去仓库目录查看

删除本地的镜像文件,从仓库拉取测试仓库的搭建



2、加ssl证书

创建证书文件夹,加入本地解析

生成ssl证书

将证书copy到上面创建的证书文件夹下

建立私有仓库并指定证书文件

上传镜像文件到私有仓库

将证书信息发送到其他主机,拉取测试


3、给私有仓库加入用户名和密码

建立auth目录生成用户名和密码

启动registry容器

上传镜像到仓库,失败,需要登陆,输入用户名和密码登陆后珊瑚和上传镜像成功

在里一台机器拉取测试,不登陆无法拉取,登陆后拉取成功



这里查询私有仓库的所有镜像,报错的话,需要将认证文件复制到/etc/pki/ca-trust/source/anchors/目录下执行update-ca-trust命令即可


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值