目录
DockerFile
构建步骤
基础知识
指令
实战:构建自己的centos
第一步:编写dockerfile文件
第二步:构建镜像文件
docker网络
原理
功能
网络模式
host模式
container模式
none模式
bridge模式
DockerFile
dockerfile 是用来构建docker镜像的文件,是一个命令参数脚本
构建步骤
1、编写一个 dockerfile 文件
2、docker build 构建成为一个镜像
3、docker run 运行镜像
4、docker push 发布镜像(DockerHub 、阿里云仓库)
基础知识
1.每个保留关键字都是尽量大写字母
2.执行从上到下按顺序执行
3.#表示注释
4.每一个指令都会创建提交一个新的镜像层,并提交
指令
实战:构建自己的centos
通过编写Dockerfile文件来制作Centos镜像,并在官方镜像的基础上添加vim和net-tools工具。首先在/home/dockfile 目录下新建文件mydockerfile-centos。然后使用上述指令编写该文件
第一步:编写dockerfile文件
FROM centos:7 #基础镜像
MAINTAINER CQ<1462568882@qq.com> #维护者信息
ENV MYPATH /usr/local #环境变量目录 k-v
WORKDIR $MYPATH #工作目录 用$取k
RUN yum -y install vim #执行构建命令 安装vim
RUN yum -y install net-tools #执行构建命令 安装net-tools
EXPOSE 80 #暴露端口 80
CMD echo $MYPATH #输出构建信息 mypath
CMD echo "---end---" #输出信息
CMD /bin/bash #进入/bin/bash命令行
第二步:构建镜像文件
构建镜像命令:docker build -f dockerfile文件路径 -t 镜像名[:版本号] .(这里有个小点.)
docer build -f mydockerfile-centos -t mycentos:0.1 .
-t参数用来指定 image 文件的名字,后面还可以用冒号指定标签。
如果不指定,默认的标签就是latest。
最后的那个点表示 Dockerfile 文件所在的路径,上例是当前路径,所以是一个点。
docker网络
Docker网络是Docker平台中用于管理容器之间网络通信的组件。它提供了一种简单而灵活的方式来创建、管理和配置Docker容器的网络
原理
在宿主机虚拟一个Docker容器网桥(docker0),Docker启动一个容器时会根据Docker网桥的网段分配给容器一个IP地址,称为Container-IP,同时Docker网桥是每个容器的默认网关。因为在同一宿主机内的容器都接入同一个网桥,这样容器之间就能够通过容器的Container-IP直接通信。
Docker网桥是宿主机虚拟出来的,并不是真实存在的网络设备,外部网络是无法寻址到的,这也意味着外部网络无法通过直接Container-IP访问到容器。如果容器希望外部访问能够访问到,可以通过映射容器端口到宿主主机(端口映射),即docker run创建容器时候通过 -p 或 -P 参数来启用,访问容器的时候就通过[宿主机IP]:[容器端口]访问容器
功能
1.自动分配IP地址:Docker能够为每个容器分配一个独立的IP地址,使得容器之间可以通过IP地址进行通信。
2.默认网桥:Docker在宿主机上创建一个名为docker0的网桥,它会自动将容器连接到该网桥上,从而使得容器之间可以通过网桥进行通信。
3.网络配置:Docker允许用户自定义容器的网络配置,包括指定网络类型、指定网络端口等。
4.网络插件:Docker支持插件机制,可以通过插件扩展网络功能。
网络模式
安装Docker时,它会自动创建三个网络。bridge、 none 、host。
可以使用以下docker network ls命令列出这些网络:
该bridge网络代表docker0,所有Docker安装中存在的网络。除非你使用该docker run --network=选项指定,否则Docker守护程序默认将容器连接到此网络。
我们在使用docker run创建Docker容器时,可以用 --net 选项指定容器的网络模式,Docker可以有以下4种网络模式:
host模式:使用 --net=host 指定。
none模式:使用 --net=none 指定。
bridge模式:使用 --net=bridge 指定,默认设置。
container模式:使用 --net=container:NAME_or_ID 指定
host模式
启动容器的时候使用host模式,那么这个容器将不会获得一个独立的Network Namespace(虚拟网络),而是和宿主机共用一个Network Namespace(虚拟网络)。容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。但是,容器的其他方面,如文件系统、进程列表等还是和宿主机隔离的。
使用host模式的容器可以直接使用宿主机的IP地址与外界通信,容器内部的服务端口也可以使用宿主机的端口,不需要进行NAT,host最大的优势就是网络性能比较好,但是docker host上已经使用的端口就不能再用了,网络的隔离性不好。
container模式
Docker的网络container模式是指将容器与另一个已经存在的容器共享同一个网络命名空间。这种模式下,两个容器可以直接通过网络通信,无需进行额外的网络配置。
使用container模式时,Docker会创建一个新的网络命名空间,并将其与目标容器共享。新容器内的网络接口会与目标容器的网络接口进行关联,从而实现网络通信。
使用container模式可以方便地将多个容器连接在一起,形成一个共享的网络环境。同时,由于容器之间共享网络命名空间,所以它们的网络性能和效率也得到了提高。
需要注意的是,如果目标容器在关闭或崩溃时,新容器也会失去网络连接。此外,container模式不支持多主机之间的容器网络通信。
none模式
使用none模式,Docker容器拥有自己的Network Namespace,但是,并不为Docker容器进行任何网络配置。也就是说,这个Docker容器没有网卡、IP、路由等信息。需要我们自己为Docker容器添加网卡、配置IP等。
这种网络模式下容器只有lo回环网络,没有其他网卡。none模式可以在容器创建时通过--network=none来指定。这种类型的网络没有办法联网,封闭的网络能很好的保证容器的安全性。
bridge模式
Docker的网络bridge模式是一种默认的网络配置方式,它会在Docker守护进程启动时自动创建一个名为docker0的网桥,并将所有新创建的容器连接到该网桥上。
在bridge模式下,每个容器都会分配一个独立的网络命名空间,并拥有一个独立的IP地址。容器之间通过网桥进行通信,通信数据会被自动转发。
使用bridge模式时,Docker会为每个新创建的容器分配一个独立的Network Namespace,并将容器与docker0网桥相连。容器内的网络接口会自动与网桥进行关联,从而实现网络通信。
此外,bridge模式还支持端口映射功能,允许将容器内的网络端口映射到宿主机上的端口,从而实现外部对容器内的应用程序进行访问。