Docker

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

一、docker的安装与部署

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

下载包,并安装

Docker_第1张图片

启动服务,并查看

Docker_第2张图片

ip addr可以看到docker0

Docker_第3张图片



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

1、导入镜像并查看

Docker_第4张图片

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

Docker_第5张图片

Docker_第6张图片

3、网页查看

Docker_第7张图片



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

Docker_第8张图片

Docker_第9张图片Docker_第10张图片Docker_第11张图片

也可以做端口映射:

Docker_第12张图片

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

Docker_第13张图片Docker_第14张图片

可以用diff查看容器的变化

Docker_第15张图片


5、数据卷管理

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

Docker_第16张图片Docker_第17张图片

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

Docker_第18张图片Docker_第19张图片


并且可以设置读写权限

Docker_第20张图片

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

Docker_第21张图片


备份数据卷 --volumes-from

Docker_第22张图片

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

Docker_第23张图片



6、创建容器镜像

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

Docker_第24张图片Docker_第25张图片

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

Docker_第26张图片

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

Docker_第27张图片

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

Docker_第28张图片


7、容器间的互连

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

Docker_第29张图片Docker_第30张图片Docker_第31张图片



三、网络管理

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

Docker_第32张图片

四种网络模型

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

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

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

ip addr查看

Docker_第33张图片

Docker_第34张图片


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

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

Docker_第35张图片Docker_第36张图片

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

Docker_第37张图片

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

Docker_第38张图片

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

Docker_第39张图片

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

Docker_第40张图片

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

Docker_第41张图片

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

Docker_第42张图片

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

查看配置ip是否成功

Docker_第43张图片



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

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

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

Docker_第44张图片

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

Docker_第45张图片

此时yum源是否搭建成功

Docker_第46张图片

编写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会帮忙解压缩(注意压缩格式);如果是文件且中不使用斜杠结束,则会将视为文件,的内容会写入;如果是文件且中使用斜杠结束,则会文件拷贝到目录下

Docker_第47张图片

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

Docker_第48张图片

运行测试

Docker_第49张图片


3、设置一键部署

更改yum源,加入supervisior

Docker_第50张图片Docker_第51张图片Docker_第52张图片

编写Dockerfile和supervisord.conf

Docker_第53张图片

完成后测试

Docker_第54张图片


五、仓库的搭建

下载registry镜像

导入镜像并查看

Docker_第55张图片

生成容器

Docker_第56张图片

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

Docker_第57张图片

去仓库目录查看

Docker_第58张图片Docker_第59张图片

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

Docker_第60张图片


2、加ssl证书

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

Docker_第61张图片

生成ssl证书

Docker_第62张图片Docker_第63张图片

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

Docker_第64张图片

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

Docker_第65张图片

上传镜像文件到私有仓库

Docker_第66张图片

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

Docker_第67张图片


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

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

Docker_第68张图片

启动registry容器

Docker_第69张图片

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

Docker_第70张图片

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


Docker_第71张图片Docker_第72张图片


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

Docker_第73张图片Docker_第74张图片

你可能感兴趣的:(Docker)