docker基础命令及网络模型介绍

1、docker基础命令操作

只写下基础命令,具体参数太多了,就不一一记录了!!!

容器生命周期管理

docker run :创建一个新的容器并运行一个命令
docker start :启动一个或多个已经被停止的容器
docker stop :停止一个运行中的容器
docker restart :重启容器docker kill :杀掉一个运行中的容器
docker rm :删除一个或多个容器。
docker pause :暂停容器中所有的进程。
docker unpause :恢复容器中所有的进程。
docker create :创建一个新的容器但不启动它
docker exec :在运行的容器中执行命令


容器操作


docker ps : 列出容器
docker inspect : 获取容器/镜像的元数据
docker top :查看容器中运行的进程信息,支持 ps 命令参数
docker attach :连接到正在运行中的容器
docker events : 从服务器获取实时事件
docker logs : 获取容器的日志
docker commit :从容器创建一个新的镜像
docker cp :用于容器与主机之间的数据拷贝
docker diff : 检查容器里文件结构的更改

镜像仓库操作

docker login : 登陆到一个Docker镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub
docker logout : 登出一个Docker镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub
docker pull : 从镜像仓库中拉取或者更新指定镜像
docker push : 将本地的镜像上传到镜像仓库,要先登陆到镜像仓库
docker search : 从Docker Hub查找镜像

本地镜像管理


docker images : 列出本地镜像
docker rmi : 删除本地一个或多少镜像
docker tag : 标记本地镜像,将其归入某一仓库
docker build 命令用于使用 Dockerfile 创建镜像
docker history : 查看指定镜像的创建历史
docker save : 将指定镜像保存成 tar 归档文件
docker load : 导入使用 docker save 命令导出的镜像
docker import : 从归档文件中创建镜像

 

docker版本信息命令


docker info : 显示 Docker 系统信息,包括镜像和容器数
docker version :显示 Docker 版本信息

2、dockerfile参数:

 

FROM

指定 base 镜像。

 

 

MAINTAINER

设置镜像的作者,可以是任意字符串。

 

COPY

将文件从 build context 复制到镜像
COPY 支持两种形式:
COPY src dest
COPY ["src", "dest"]
注意:src 只能指定 build context 中的文件或目录。

 

ADD

与 COPY 类似,从 build context 复制文件到镜像。不同的是,如果 src 是归档文件(tar, zip, tgz, xz 等),文件会被自动解压到 dest。

 

ENV
设置环境变量,环境变量可被后面的指令使用。例如:

ENV MY_VERSION 1.3
RUN apt-get install -y mypackage=$MY_VERSION...

 

EXPOSE

指定容器中的进程会监听某个端口,Docker 可以将该端口暴露出来。我们会在容器网络部分详细讨论。

 

VOLUME

将文件或目录声明为 volume。

 

WORKDIR

为后面的 RUN, CMD, ENTRYPOINT, ADD 或 COPY 指令设置镜像中的当前工作目录。

 

RUN

在容器中运行指定的命令。

 

CMD

容器启动时运行指定的命令。Dockerfile 中可以有多个 CMD 指令,但只有最后一个生效。CMD 可以被 docker run 之后的参数替换。

 

ENTRYPOINT

设置容器启动时运行的命令。
Dockerfile 中可以有多个 ENTRYPOINT 指令,但只有最后一个生效。CMD 或 docker run 之后的参数会被当做参数传递给 ENTRYPOINT。

 

3、docker本地网络模型:

Docker 在启动时会创建一个虚拟网桥 docker0,默认地址为 172.17.0.1/16, 容器启动后都会被桥接到 docker0 上,并自动分配到一个 IP 地址,docker0的默认地址如果被占用,会自动变成172.18.0.1/16,被占用情况,如下图:

 docker容器分为四种网络模型:

bridge 桥接模式 、 none 模式 、container模式、host模式;

bridge桥接模式:

Bridge 桥接模式的实现步骤主要如下:
(1) Docker Daemon 利用 veth pair 技术(一种虚拟网络设备技术,简单来说就是成对出现负责通过内核子系统传送在不同网络命名空间之间数据请求的,工作在二层数据链路层),在宿主机上创建两个虚拟网络接口设备,假设为veth0 和 veth1,而 veth pair 技术的特性可以保证无论哪一个 veth 接收到网络报文,都会将报文传输给另一方。
(2) Docker Daemon 将 veth0 附加到 Docker Daemon 创建的 docker0 网桥上,保证宿主机的网络报文可以发往 veth0;
(3) Docker Daemon 将 veth1 添加到 Docker Container 所属的 namespace 下,并被改名为 eth0,保证宿主机的网络报文若发往 veth0,则立即会被 eth0 接收,实现宿主机到Docker Container 网络的联通性;同时,也保证 Docker Container 单独使用 eth0,实现容器网络环境的隔离性。
(4)bridge 桥接模式下的 Docker Container 在使用时,不具有一个公有 IP,即和宿主机的 eth0 不处于同一个网段。导致的结果是宿主机以外的世界不能直接和容器进行通信,需要通过nat映射实现。

none 模式:

使用none模式,Docker容器拥有自己的Network Namespace,但是,并不为Docker容器进行任何网络配置。也就是说,这个Docker容器没有网卡、IP、路由等信息。需要我们自己为Docker容器添加网卡、配置IP等。

这种网络模式下容器只有lo回环网络,没有其他网卡。none模式可以在容器创建时通过--network=none来指定。这种类型的网络没有办法联网,封闭的网络能很好的保证容器的安全性。

container模式

这个模式指定新创建的容器和已经存在的一个容器共享一个 Network Namespace,而不是和宿主机共享。新创建的容器不会创建自己的网卡,配置自己的 IP,而是和一个指定的容器共享 IP、端口范围等。同样,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。两个容器的进程可以通过 lo 网卡设备通信。

如下图:

host模式

如果启动容器的时候使用host模式,那么这个容器将不会获得一个独立的Network Namespace,而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。但是,容器的其他方面,如文件系统、进程列表等还是和宿主机隔离的。

使用host模式的容器可以直接使用宿主机的IP地址与外界通信,容器内部的服务端口也可以使用宿主机的端口,不需要进行NAT,host最大的优势就是网络性能比较好,但是docker host上已经使用的端口就不能再用了,网络的隔离性不好。

如下图:

4、overlay跨主机网络通讯

我们上边了解到了容器默认使用的网络模型bridge网络,但是不同主机之间的容器如何进行通讯的呢?下边便是一种比较主流的容器跨主机网络通讯overlay的介绍:

Overlay网络是指通过在现有网络上叠加一个软件定义的逻辑网络,最大程度的保留原有网络,通过定义其上的逻辑网络,实现业务逻辑,解决原有数据中心的网络问题。

基本实现原理:

要实现overlay网络,我们会有一个服务发现。比如说consul,会定义一个ip地址池,比如10.0.2.0/24之类的。上面会有容器,容器的ip地址会从上面去获取。获取完了后,会通过容器的另一个网卡来进行通信,这样就实现跨主机的通信,如下图:

数据包发送流程:

1、容器Container1会通过Container eth0 将这个数据包发送到 10.0.2.1 的网关。
2、网关将数据包发送出去后到达b20网桥。
3、br0网桥针对VXLAN设备,主要用于捕获对外的数据包通过VETP进行数据包封装。
4、封装好将VXLAN格式数据包交给eth0,通过UDP方式交给Container2的eth0。
5、Container2收到数据包后通过VETP将数据包解封装。
6、网桥通过网关将解封装的数据包转发给Container eth0,完毕通信。

图标注解:

Container eth0:eth0它是Overlay网络分配的唯一的IP地址,它是veth pair虚拟设备对,作用是实现点对点的通信,通过桥接到br0这个网桥中,可以实现不同 NameSwitch之间容器进行通信。
br0:它是Overlay默认创建的网桥。
vetp:对VXLAN数据包的封装与街封装。
Container eth1:eth1是容器主机的默认网络,主要提供容器访问外网所提供的服务,走的默认docker网络架构,只不过他创建了bridge这个网桥。
bridge:bridge是容器所创建的网桥它替代了docker0的服务。
eth0:宿主机网卡与外界网卡连接,它用来转发,容器VXLAN与NAT两种网卡类型的数据包到指定的对端节点。

 

ok..........,总的来说理解了这些网络的模型,对于docker容器技术又有了进一步的了解,对技术又有一部分提升!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值