docker基础命令,docker网络模式!!!

Posted 水木,年華

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了docker基础命令,docker网络模式!!!相关的知识,希望对你有一定的参考价值。

一.docker镜像操作

docker run hello-world 
run :
pull        dockerhub      仓库中项目//镜像
start       hello-world-image
[root@docker ~]# docker run hello-world 
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
b8dfde127a29: Pull complete 
Digest: sha256:7d91b69e04a9029b99f3585aaaccae2baa80bcf318f4a5d2165a9898cd2dc0a1
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/
1、docker client客户端连接到了服务端(服务端是以一个守护进程的形式跑在操作系统里面的)restful api典型的C/s架构
2、由docker服务端的守护进程从docker hub上下载了镜像(Ps:服务端会先检查本地系统是否有这个镜像)
3、服务端创建了一个新的容器,然后从拉去的这个镜像启动了一个容器,
容器执行了脚本/可执行程序让我们可以查看/使
(client)
4、docker服务端把这些信息流(传递)返回到客户端并展示出来,(展示在终端上)
docker client可以是多种形式,比如"docker"命令工具所在的终端

二.docker命令—镜像

2.1 查看docker版本

docker -v 
docker version 
decker info  #可以查看所有运行容器的镜像数量,运行容器的版本,可以分配的CPU,总的内存等信息.docker的工作目录 /var/lib/decker

2.2 搜索镜像

docker search nginx 
——》自己制作镜像,然后上传到docker hub 上
优化:有效减少镜像大小,dockerfile 优化方向

2.3 下载镜像

默认是从docker hub

docker pull 镜像名称
例如:docker pull nginx

2.4 查看镜像列表

docker images——查看当前docker下的下载镜像信息

2.5 获取镜像信息

封装镜像的详细信息

docker inspect  镜像ID       

2.6 添加镜像标签

[root@docker docker]# docker tag hello-world:latest hello-world:lamp 

2.7 删除镜像

docker rmi    镜像名称
docker rmi    镜像标签
docker rmi  `docker images -q`  #-q 列出镜像ID

2.8 镜像导出

docker save -o  文件名镜像名

示例:

docker save -o centos_7 centos:7

2.9 镜像导入

docker load < nginx

使用场景:有的生产环境,企业不直接使用docker私有仓库,而是存放在一个ftp服务器中,按需上传下载。

[root@docker docker]# docker ps -a 
[root@docker ~]# docker ps  -aq              #只过滤出容器ID
16d885305462
[root@docker ~]# docker rm `docker ps -aq`   #批量删除

CONTAINER ID:容器ID
IMAGE:镜像版本
CRATED:创建的时间
STATUS:运行的时间
PORTS:暴露的端口
NAMES:名称(可定义)

三.docker命令—容器操作

3.1 查询容器

docker ps -a

3.2 创建容器

docker create -it nginx:latest /bin/bash
-i 让容器的标准输入保持打开
-t 分配一个伪终端
-d 后台守护进程的方式运行

3.3 启动容器

docker start  容器id

启动容器(一次性执行)

docker run centos:7 /usr/bin/bash -c ls /

3.4 停止容器

docker stop  容器ID
#状态码0:正常退出,非0值表示非正常退出,137表示主动停止退出

3.5 容器持续后台运行

[root@docker ~]# docker run -d centos:7 /usr/bin/bash -c "while true;do echo hello;done"
93713dd63b4963c5e46748eb9c1d30741e53b885f7c1253adccd26eb4b94368b

[root@docker ~]# watch -n 2 docker ps -a

[root@docker ~]# docker rm `docker ps -aq` #不会删除正在运行的

3.6 进入容器

使用run
docker run -it nginx:latest /bin/bash         #一次性的,退出则关闭
exec(容器必须为开启状态)
docker exec -it  容器ID /bin/bash

PS:
docker run -it 会创建前台进程,但是会在输入exit后终止进程。
docker attach  会通过连接stdin,连接到容器内输入输出流,会在输入exit后终止进程.
docker exec -it 会连接到容器,可以像SSH一样进入容器内部,进行操作,可以通过exit退出容器,不影响容器运行。

3.7 容器导出

docker export    容器ID   >   文件名
示例:
docker export   容器ID   >    nginx_a

3.8 容器导入

生成镜像

docker import      导出的文件名(容器)  指定镜像名称
示例:
docker import       nginx_a         nginx:latest
cat  文件名(容器)|  docker import - nginx : latest



3.9 删除容器

docker rm 容器ID

强制删除容器

docker rm -f 容器ID

批量删除容器

docker ps -a | awk '{print "docker rm "$1}' | bash

批量删除"exit"状态的容器

for i in 'docker ps -a | grep -i exit | awk '{print $1}'`; do docker rm -f $i; done

四.docker网络模式

4.1 HOST模式

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

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

4.2 container 模式

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

4.3 None模式

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

4.4 Bridge模式

此模式会为每一个容器分配、设置IP等,并将容器连接到一个docker虚拟网桥,通过docker 0 网桥及iptables的nat,表配置与宿主机通信
当Docker进程启动时,会在主机上创建一个名为docker0的虚拟网桥,此主机上启动的Docker容器会连接到这个虚拟网桥上。虚拟网桥的工作方式和物理交换机类似,这样主机上的所有容器就通过交换机连在了一个二层网络中。
从docker0子网中分配一个IP给容器使用,并设置docker0 的IP地址为容器的默认网关。在主机上创建一对虚拟网卡veth pair 设备,Docker 将 veth pair 设备的一端放在新创建的容器中,并命名为etho(容器的网卡),另一端放在主机中,以vethxxx,这样类似的名字命名,并将这个网络设备加入到docker0 网桥中。可以通过brctl show命令查看。
bridge模式是docker 的默认网络模式,不写-net参数,就是 bridge模式。使用docker run -p时, docker实际是在iptables,做了DNAT规则,实现端口转发功能。可以使用jptables. -t nat -vnL查看。

docker四种网络模式

host模式        -net=host                  容器和宿主机共享Network namespaceo
container模式   -net=container:NAME_or_ID  多个容器共享一个Network namespace.
none模式        -net=none容器有独立的Network,namespace,但并没有对其进行任何网络设置,如分配veth pair和网桥连接,配置IP等。
bridge模式      -net=bridge               (默认为该模式)
以上不需要动手配置,真正需要配置的是自定义网络

小结:

1、docker中有几种网络模式,分别提供哪些功能
Host container none bridge
Host :与宿主机共享网络名称空间/网络协议栈
Container:多个容器之间共享一个network namespaces
None :自闭空间
Bridge:默认模式通过Veth对 连接容器与dockerO网桥,网桥分配给容器IP,同时docker0作为“局域网”内容器的网关,最后和宿主机网卡进行通讯
2、两个容器如何通讯
Docker 0
Loo 0 (container模式)

loopback :回环网卡、TCP/IP网卡是否生效
virtualt bridge: linux自身继承了一个虚拟化功能(kvm架构),是原生架构的一个虚拟化平台,安装了一个虚拟化平台之后就会系统就会自动安装虚拟网卡
(示例:安装workstation(虚拟化平台)之后,会在网络适配器中会多出VWMnet1 WMnet8 VWMnet0)
docker 0 :容器的网关,绑定物理网卡,负责做NAT地址转换、端口映射
docker 0 :本身也是一种容器

以上是关于docker基础命令,docker网络模式!!!的主要内容,如果未能解决你的问题,请参考以下文章

Docker基础知识!

Docker基础知识!

Docker基础知识!

docker系列四种基础网络模式及自定义网络

docker

《docker高级篇(大厂进阶):4.Docker网络》包括:是什么常用基本命令能干嘛网络模式docker平台架构图解