Docker基本使用
Docker基本使用
1.什么是docker
Docker 最初是 dotCloud 公司创始? 在法国期间发起的?个公司内部项?,它是基于 dotCloud 公司多年云服务技术的?次?新,并于 ,主要项?代码在 上进?维护。Docker 项?后来还加? 了 Linux 基?会,并成?推动 。 Docker ?开源后受到?泛的关注和讨论,?今其 已经超过 5 万 7 千个星标和?万多个 fork。甚 ?由于 Docker 项?的?爆,在 2013 年底,。Docker 最初是在 Ubuntu 12.04 上开发实现的; Red Hat 则从 RHEL 6.5 开始对 Docker 进??持;Google 也在其 PaaS 产品中?泛应? Docker。
2.为什么要用Docker
作为?种新兴的虚拟化?式,Docker 跟传统的虚拟化?式相?具有众多的优势
更?效的利?系统资源
由于容器不需要进?硬件虚拟以及运?完整操作系统等额外开销,Docker 对系统资源的利?率更 ?。?论是应?执?速度、内存损耗或者?件存储速度,都要?传统虚拟机技术更?效。因此,相 ?虚拟机技术,?个相同配置的主机,往往可以运?更多数量的应?。
更快速的启动时间
传统的虚拟机技术启动应?服务往往需要数分钟,? Docker 容器应?,由于直接运?于宿主内 核,?需启动完整的操作系统,因此可以做到秒级、甚?毫秒级的启动时间。??的节约了开发、 测试、部署的时间。
?致的运?环境
开发过程中?个常?的问题是环境?致性问题。由于开发环境、测试环境、?产环境不?致,导致 有些 bug 并未在开发过程中被发现。? Docker 的镜像提供了除内核外完整的运?时环境,确保 了应?运?环境?致性,从?不会再出现 「这段代码在我机器上没问题啊」 这类问题。
持续交付和部署
对开发和运维()?员来说,最希望的就是?次创建或配置,可以在任意地?正常运?。 为什么要? Docker 4 使? Docker 可以通过定制应?镜像来实现持续集成、持续交付、部署。开发?员可以通过 来进 ?镜像构建,并结合 系统进?集成测试,?运维?员则可以直接在?产环境中快速部署该镜像, 甚?结合 系统进??动部署。 ?且使? 使镜像构建透明化,不仅仅开发团队可以理解应?运?环境,也?便运维团队理解应? 运?所需条件,帮助更好的?产环境中部署该镜像。
更轻松的迁移
由于 Docker 确保了执?环境的?致性,使得应?的迁移更加容易。Docker 可以在很多平台上运 ?,?论是物理机、虚拟机、公有云、私有云,甚?是笔记本,其运?结果是?致的。因此?户可 以很轻易的将在?个平台上运?的应?,迁移到另?个平台上,?不?担?运?环境的变化导致应 ??法正常运?的情况。
更轻松的维护和扩展
Docker 使?的分层存储以及镜像的技术,使得应?重复部分的复?更为容易,也使得应?的维护 更新更加简单,基于基础镜像进?步扩展镜像也变得?常简单。此外,Docker 团队同各个开源项 ?团队?起维护了??批?质量的 ,既可以直接在?产环境使?,?可以作为基础进?步定制, ??的降低了应?服务的镜像制作成本。
docker安装
关闭firewalld [root@docker ~]# systemctl stop firewalld [root@docker ~]# systemctl disable firewalld 关闭selinux [root@docker ~]# setenforce 0 [root@docker ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
安装docker
[root@docker ~]# yum install -y yum-utils device-mapper-persistent-data lvm2 添加软件源信息。 [root@docker ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 更新并安装 Docker-CE。 [root@docker ~]# yum makecache fast [root@docker ~]# yum list docker-ce --showduplicates | sort -r [root@docker ~]# yum -y install docker-ce 安装docker最新版 开启docker服务。 [root@docker ~]# systemctl daemon-reload [root@docker ~]# systemctl restart docker [root@docker ~]# systemctl enable docker Created symlink from /etc/systemd/system/multiuser.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
docker?键安装
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
Docker命令实战
1、镜像 下载最新版镜像
[root@docker ~]# docker pull nginx Using default tag: latest latest: Pulling from library/nginx 7d63c13d9b9b: Pull complete 5cb019b641b5: Pull complete d477de77abf8: Pull complete c60e7d4c1c30: Pull complete 365a49996569: Pull complete 039c6e901970: Pull complete Digest: sha256:168a6a2be5c65d4aafa7a78ca98ff8b110fe44c6ca41e7ccb4314ed481e32288 Status: Downloaded newer image for nginx:latest docker.io/library/nginx:latest
查看本地镜像
[root@docker ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE nginx 1.0.1 2800fc93554b 2 days ago 140MB registry.cn-hangzhou.aliyuncs.com/vm1/test 1.0.1 2800fc93554b 2 days ago 140MB myapp v1.0 607dc55bb1c0 2 days ago
给镜像打标签
[root@docker ~]# docker tag 2800fc93554b docke.io/xmfree/alpine:v3.12.2 [root@docker ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE docke.io/xmfree/alpine v3.12.2 2800fc93554b 2 days ago 140MB nginx 1.0.1 2800fc93554b 2 days ago 140MB registry.cn-hangzhou.aliyuncs.com/vm1/test 1.0.1 2800fc93554b 2 days ago 140MB myapp v1.0 607dc55bb1c0 2 days ago 142MB
容器类命令
拉取和运行
docker pull centos #拉取镜像,有镜像才能运行容器 docker run [可选参数] images #参数说明 --name="Name" 容器名称,nginx,tomcat1。 -d 后台运行 -it 使用交互方式运行/进入容器查看内容 -p 指定容器端口, 80:80 -P 随机指定端口 docker run -it centos /bin/bash #以前台交互的模式启动并进入容器 docker run -d centos #以后台守护式启动 Ctrl + P + Q #退出容器并在后台运行
列出运行的容器
docker ps #列出当前正在运行的容器 -a #列出全部容器 -n [数字] #列出最近的n个容器 -q #只显示容器的编号
退出容器
exit #退出容器 ctrl+P+Q #退出并继续运行容器
删除容器
docker rmi 容器id #删除指定容器,但无法删除正在运行的容器 docker rmi -rf 容器id #强制删除 docker rmi -f $(docker ps -aq) #递归删除所有启动/启动过的容器 docker ps -a|xargs docker rmi #递归删除所有容器
启动和停止容器
docker start|restart|stop|kill 容器id #启动|重启|停止|杀掉 容器
查看日志
docker logs 容器ID #查看容器日志 docker logs -tf --tail 10 容器ID #查看容器前10行的日志 --tail number #显示日志条数
查看容器的进程信息
docker top 容器ID
进入当前正在运行的容器
docker exec -it 容器ID /bin/bash #以交互形式进入容器,类似新开一个界面 #exec 使用exit进入退出不会停止 docker attach -it 5d8e48e4b792 #进入正在运行的容器命令行 #attach 退出了会停止容器
镜像的保存与导入
docker save -o test.tar myapp:v0.1 #保存镜像 docker save fe8c52043b39 > test.tar #保存镜像 #此时就会创建一个tar包,其中就是镜像文件 docker load < test.tar #导入镜像 docker load -i test.tar #导入镜像 #将tar包导入,就可以运行使用了。
容器文件拷贝到主机上
#在主机上输入该命令 docker cp 容器ID:文件路径 目的主机路径
容器备份与解压
备份运行时的容器镜像
docker export 517d619c4d55 > test.tar #将你的整个容器做成tar备份 cat test.tar | docker import - test/redis:0.1 #将tar备份文件转换为可用镜像

下载指定版本镜像
[root@docker ~]# docker pull nginx:1.20.2 1.20.2: Pulling from library/nginx 1fe172e4850f: Already exists c02d3377f583: Pull complete 786a9523d165: Pull complete 10fc07fe64d1: Pull complete 2f1ad5471016: Pull complete 040415d7474c: Pull complete Digest: sha256:7dfea820d4c89037c6475c36567fcd439d54fe3810f459cbf580061c659b0dd6 Status: Downloaded newer image for nginx:1.20.2 docker.io/library/nginx:1.20.2

容器
启动nginx容器
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
【docker run 设置项 镜像名 】 镜像启动运?的命令(镜像??默认有的,?般不会写)
- -i:交互式操作
- -t:终端;
- d:容器在后台运?;
- -p:端?映射;
- --restart=always: 开机?启
- --name:为容器指定?个名称;
指明了-d运?镜像,会返回容器id;如果不指明-d运?镜像,会打印出catalina.out的?志,在 [crtl+c]后,容器即停?运?。
[root@docker ~]# docker run --name=myningx -d --restart=always -p 88:80 nginx Unable to find image 'nginx:latest' locally latest: Pulling from library/nginx 7d63c13d9b9b: Pull complete 5cb019b641b5: Pull complete d477de77abf8: Pull complete c60e7d4c1c30: Pull complete 365a49996569: Pull complete 039c6e901970: Pull complete Digest: sha256:168a6a2be5c65d4aafa7a78ca98ff8b110fe44c6ca41e7ccb4314ed481e32288 Status: Downloaded newer image for nginx:latest 15db0ba492cf2b86714e3e29723d413b97e64cc2ee361d4109f4216b2e0cba60 [root@docker ~]# curl -I 127.0.0.1:88 HTTP/1.1 200 OK Server: nginx/1.21.6 Date: Fri, 06 May 2022 10:24:37 GMT Content-Type: text/html Content-Length: 4 Last-Modified: Wed, 04 May 2022 08:36:54 GMT Connection: keep-alive ETag: "62723b26-4" Accept-Ranges: bytes

查看当前运行的容器
[root@docker ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ba7518c38bd5 nginx "/docker-entrypoint.…" 2 days ago Up 2 hours 0.0.0.0:88->80/tcp, :::88->80/tcp myningx
根据启动的容器创建新的镜像
[root@docker ~]# docker commit -a "cool" -m "this is test" ba7518c38bd5 nginx:1.1 sha256:b9d5e0d36529cc9e778e6273e53bd470c73338002828ed8e4b426687ba647a71

docker commit : 从容器创建?个新的镜像
- a:提交的镜像作者;
- -c:使?Dockerfile指令来创建镜像;
- m:提交时的说明?字;
- p:在commit时,将容器暂停。
进入容器操作容器
[root@docker ~]# docker exec -it ba7518c38bd5 /bin/bash root@ba7518c38bd5:/# echo "123" > /usr/share/nginx/html/index.html [root@docker ~]# curl 127.0.0.1:88 123

将运行中的容器构建为镜像
[root@docker ~]# docker commit -a "cby" -m "my app" ba7518c38bd5 meapp:v1.0 sha256:c92b8d5a695971d7b3b73bc90fa8d3bcd297c17a4f78798aa1238b5fbda181c3 [root@docker ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE meapp v1.0 c92b8d5a6959 7 seconds ago 142MB nginx 1.1 b9d5e0d36529 8 minutes ago 142MB test/redis 0.1 1c011895a942 25 minutes ago 140MB docke.io/xmfree/alpine v3.12.2 2800fc93554b 2 days ago 140MB nginx 1.0.1 2800fc93554b 2 days ago 140MB

镜像保存与导入
[root@docker ~]# docker save -o cby.tar meapp:v1.0 [root@docker ~]# docker save c92b8d5a6959 > cby.tar [root@docker ~]# ll cby.tar -rw-------. 1 root root 145967616 5月 6 18:39 cby.tar [root@docker ~]# docker load -i cby.tar Loaded image ID: sha256:c92b8d5a695971d7b3b73bc90fa8d3bcd297c17a4f78798aa1238b5fbda181c3 [root@docker ~]# docker load < cby.tar Loaded image ID: sha256:c92b8d5a695971d7b3b73bc90fa8d3bcd297c17a4f78798aa1238b5fbda181c3

容器导出和导入
容器导出
#这样将导出容器快照到本地?件
docker export [CONTAINER ID] > [tar file]
[root@docker ~]# docker export ba7518c38bd5 > nginx.1.0.tar [root@docker ~]# ls anaconda-ks.cfg cby.tar nginx.1.0.tar test.tar

容器导入
#从容器快照?件中再导?为镜像
cat [tar file] | docker import - [name:tag]、
[root@docker ~]# docker import nginx.1.0.tar nginx:1.0.2 sha256:18e19572d1b4f384950dfa3cc78abbc18993c5332a40853ef30861cef31027b5 [root@docker ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE nginx 1.0.2 18e19572d1b4 9 seconds ago 140MB meapp v1.0 c92b8d5a6959 2 hours ago 142MB nginx 1.1 b9d5e0d36529 2 hours ago 142MB

镜像和容器 导出和导入的区别
1.镜像导? 是复制的过程
2.容器导? 是将当前容器 变成?个新的镜像
save 和 export区别:
1)save 保存镜像所有的信息-包含历史
2)export 只导出当前的信息
容器数据管理
?产环境使?Docker的过程中,往往需要对数据进?持久化保存,或者需要更多容器之间进?数 据共享,此时运?到数据卷(Data Volumes)和数据卷容器(Data Volume Contain)
数据卷
数据卷就是将宿主机的某个?录,映射到容器中,作为数据存储的?录,我们就可以在宿主机对数 据进?存储。
数据卷(Data Volumes):容器内数据映射到本地主机环境。
1.数据卷可以在容器之间共享和重?,本地与容器间传递数据更搞笑;
2.对数据卷的修改会??有效,容器内部与本地?录均可;
3.对数据卷的更新,不会影响镜像,对数据与应?进?了解耦操作;
4.数据卷默认会?直存在,即使容器被删除。
命令格式: docker run -dti --name [容器名字] -v [宿主机?录]:[容器?录] [镜像名称] [命令(可 选)]
[root@docker ~]# mkdir /date [root@docker ~]# echo "test" > /date/test.txt #创建一个test文件 [root@docker ~]# docker run -dti --name test -v /date/:/date/ nginx #启动?个容器,挂载数据卷 e9f4095f8b2577d6d293cbf3e677d1b8b00132e410142173b00767642cc27007 [root@docker ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e9f4095f8b25 nginx "/docker-entrypoint.…" 7 seconds ago Up 6 seconds 80/tcp test ba7518c38bd5 nginx "/docker-entrypoint.…" 2 days ago Up 4 hours 0.0.0.0:88->80/tcp, :::88->80/tcp myningx [root@docker ~]# docker exec -it e9f4095f8b25 /bin/bash root@e9f4095f8b25:/# cat /date/test.txt test root@e9f4095f8b25:/#
注意:
1、Docker挂载数据卷的默认读写权限(rw),?户可以通过ro设置为只读,格式:[宿主机?件]: [容器?件]:ro
2、如果直接挂载?个?件到容器,使??件?具进?编辑,可能会造成?件的改变,从 Docker1.1.0起,这会导致报错误信息。所以推荐的?式是直接挂载?件所在的?录。
数据卷容器
数据卷容器需要再多个容器之间共享?些持续更新的数据,最简单的?式是使?数据卷容器。数据 卷容器也是?个容器,但是它的?的是专??来提供数据卷供其他容器挂载。 数据卷容器(Data Volume Containers):使?特定容器维护数据卷。 简单点:数据卷容器就是为其他容器提供数据交互存储的容器。
命令格式:
- Docker run --help
- -v,--volumes-from list
数据卷容器操作流程:
如果使?数据卷容器,在多个容器间共享数据,并永久保存这些数据,需要有?个规范的流程才能做 的到:
1、创卷数据卷容器
2、其他容器挂载数据卷容器
注意:数据卷容器?身并不需要启动,但是启动的时候仍然可以进?数据卷容器的?作。
创建?个数据卷容器
命令格式:
docker create -v [容器数据卷?录] --name [容器名字] [镜像名称
执?效果:
[root@docker ~]# docker create -v /date1 --name v-date1 nginx 37b54805ba9597c9a6c2cf64661462f2b1c5af364087c5c1dbd634b277d9dc88 [root@docker ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 37b54805ba95 nginx "/docker-entrypoint.…" 8 seconds ago Created v-date1 e9f4095f8b25 nginx "/docker-entrypoint.…" 7 minutes ago Up 7 minutes 80/tcp test

创建两个容器,同时挂载数据卷容器
docker run --volumes-from [数据卷容器id/name] -dti --name [容器名字] [镜像名 称] [命令(可选)]
创建v03容器:
[root@docker ~]# docker run --volumes-from v-date1 -dti --name v03 nginx 6edec4ae2d5eeac0cf71e1e5034c1f6fc4541446ea26df6d224e45c3df66b7f3
创建v04容器:
[root@docker ~]# docker run --volumes-from v-date1 -dti --name v04 nginx 3e8becf8bd83c37ca3d3137c9dbe3230dcdd196d37973acbc48fe7887ac29349
列出全部容器:
[root@docker ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3e8becf8bd83 nginx "/docker-entrypoint.…" 4 seconds ago Up 4 seconds 80/tcp v04 6edec4ae2d5e nginx "/docker-entrypoint.…" 48 seconds ago Up 47 seconds 80/tcp v03 37b54805ba95 nginx "/docker-entrypoint.…" 5 minutes ago Created v-date1 e9f4095f8b25 nginx "/docker-entrypoint.…" 12 minutes ago Up 12 minutes 80/tcp test

确认卷容器共享
进入v03,操作数据卷容器:
[root@docker ~]# docker exec -it 6edec4ae2d5e /bin/bash root@6edec4ae2d5e:/# ls /date1/ root@6edec4ae2d5e:/# echo 'v03' >/date1/v03.txt root@6edec4ae2d5e:/# exit exit
进入v04,确认数据卷:
[root@docker ~]# docker exec -it 3e8becf8bd83 /bin/bash root@3e8becf8bd83:/# echo 'v04' >/date1/v04.txt root@3e8becf8bd83:/# ls /date1/ v03.txt v04.txt
Docker 镜像仓库
本地镜像发布到阿里云
创建自己的docker镜像容器,并且添加到阿里云。将阿里云当成了镜像仓库。
容器镜像服务 (aliyun.com)
创建个人实例

创建命名空间
命名空间可以自己随便输入,但是不能和别人重名,并且一个账号最多创建三个。

创建镜像仓库
创建镜像仓库,前面创建的命名空间就起作用了。

名称和摘要自定义。

添加镜像
创建成功后,按照阿里云上面的教程复制粘贴即可。就比如将镜像推动到Registry。按照要求输入即可。

注意:此处让输入的密码是设置的docker镜像密码,而不是阿里云密码。

将镜像推送到Registry
[root@docker ~]# docker tag c92b8d5a6959 registry.cn-hangzhou.aliyuncs.com/vm1/test:v1.0 [root@docker ~]# docker push registry.cn-hangzhou.aliyuncs.com/vm1/test:v1.0 The push refers to repository [registry.cn-hangzhou.aliyuncs.com/vm1/test] 60e4517c593c: Pushed b6812e8d56d6: Pushed 7046505147d7: Pushed c876aa251c80: Pushed f5ab86d69014: Pushed 4b7fffa0f0a4: Pushed 9c1b6dd6c1e6: Pushed v1.0: digest: sha256:4d324d698806a04832b706987cc3b923ca625c3d2ced062624ddc23f24dbb8cd size: 1778 [root@docker ~]#

docker网络
bridge模式
当Docker进程启动时,会在主机上创建?个名为docker0的虚拟?桥,此主机上启动的 Docker容器会连接到这个虚拟?桥上。虚拟?桥的?作?式和物理交换机类似,这样主机上的所 有容器就通过交换机连在了?个?层?络中。
从docker0??中分配?个IP给容器使?,并设置docker0的IP地址为容器的默认?关。在主 机上创建?对虚拟?卡veth pair设备,Docker将veth pair设备的?端放在新创建的容器中,并命 名为eth0(容器的?卡),另?端放在主机中,以vethxxx这样类似的名字命名,并将这个?络设 备加?到docker0?桥中。可以通过brctl show命令查看。
bridge模式是docker的默认?络模式,不写--net参数,就是bridge模式。使?docker run -p 时,docker实际是在iptables做了DNAT规则,实现端?转发功能。可以使?iptables -t nat -vnL 查看。
创建?个bridge?络的容器
[root@docker ~]# docker run -it busybox Unable to find image 'busybox:latest' locally latest: Pulling from library/busybox 5cc84ad355aa: Pull complete Digest: sha256:5acba83a746c7608ed544dc1533b87c737a0b0fb730301639a0179f9344b1678 Status: Downloaded newer image for busybox:latest / #
如果出现问题报错
WARNING: IPv4 forwarding is disabled. Networking will not work.
- 问题原因
是没有开启转发,docker网桥配置完后,需要开启转发,不然容器启动后,就会没有网络,配置/etc/sysctl.conf,添加net.ipv4.ip_forward=1 - 问题解决:
修改文件
# vim /etc/sysctl.conf net.ipv4.ip_forward=1 #添加此行配置
也可修改此文件:/usr/lib/sysctl.d/00-system.conf
重启network和docker服务
# systemctl restart network && systemctl restart docker
查看是否修改成功
# sysctl net.ipv4.ip_forward
如果返回为“net.ipv4.ip_forward = 1”则表示修改成功
再次执行查看,使用docker不再报错
host模式
如果启动容器的时候使?host模式,那么这个容器将不会获得?个独?的Network Namespace,?是和宿主机共??个Network Namespace。容器将不会虚拟出??的?卡,配置 ??的IP等,?是使?宿主机的IP和端?。但是,容器的其他??,如?件系统、进程列表等还是 和宿主机隔离的。
使?host模式的容器可以直接使?宿主机的IP地址与外界通信,容器内部的服务端?也可以使 ?宿主机的端?,不需要进?NAT,host最?的优势就是?络性能?较好,但是docker host上已经使?的端?就不能再?了,?络的隔离性不好。 创建?个host?络的容器
[root@docker ~]# docker run -it --network host busybox
/ # ifconfig
br-1362f3863208 Link encap:Ethernet HWaddr 02:42:C9:2B:0D:49
inet addr:172.19.0.1 Bcast:172.19.255.255 Mask:255.255.0.0
inet6 addr: fe80::42:c9ff:fe2b:d49/64 Scope:Link
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:5 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:438 (438.0 B)
br-d5b01d78427c Link encap:Ethernet HWaddr 02:42:A5:43:A6:02
inet addr:172.18.0.1 Bcast:172.18.255.255 Mask:255.255.0.0
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
docker0 Link encap:Ethernet HWaddr 02:42:82:72:DA:52
inet addr:172.17.0.1 Bcast:172.17.255.255 Mask:255.255.0.0
inet6 addr: fe80::42:82ff:fe72:da52/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:46 errors:0 dropped:0 overruns:0 frame:0
TX packets:67 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:4140 (4.0 KiB) TX bytes:4989 (4.8 KiB)
eth0 Link encap:Ethernet HWaddr 00:0C:29:74:DC:0D
inet addr:192.168.200.11 Bcast:192.168.200.255 Mask:255.255.255.0
inet6 addr: fe80::4e6f:f9e8:b32:518c/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:340658 errors:0 dropped:0 overruns:0 frame:0
TX packets:128366 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:353243567 (336.8 MiB) TX bytes:225649848 (215.1 MiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:90 errors:0 dropped:0 overruns:0 frame:0
TX packets:90 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:7459 (7.2 KiB) TX bytes:7459 (7.2 KiB)
veth500604c Link encap:Ethernet HWaddr 4E:AC:27:0E:9D:F0
inet6 addr: fe80::4cac:27ff:fe0e:9df0/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:648 (648.0 B)
veth694d133 Link encap:Ethernet HWaddr 4E:D8:94:2C:B2:5C
inet6 addr: fe80::4cd8:94ff:fe2c:b25c/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:648 (648.0 B)
veth96651b8 Link encap:Ethernet HWaddr A6:E8:D8:6A:9A:51
inet6 addr: fe80::a4e8:d8ff:fe6a:9a51/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:19 errors:0 dropped:0 overruns:0 frame:0
TX packets:33 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1868 (1.8 KiB) TX bytes:2431 (2.3 KiB)
vethb09c007 Link encap:Ethernet HWaddr 9A:F4:67:10:EE:68
inet6 addr: fe80::98f4:67ff:fe10:ee68/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:648 (648.0 B)
/ #

通过以上实验得知,该容器的?络与宿主机?样,直接使?Docker host的?络,最?的好处 就是性能,如果容器对?络传输效率有较?要求,则可以选择host?络。当然不变之处就是牺牲 ?些灵活性,?如要考虑端?冲突?问题,Docker host上已经使?的端?就不能再?了。
none模式
使?none模式,Docker容器拥有??的Network Namespace,但是,并不为Docker容器进 ?任何?络配置。也就是说,这个Docker容器没有?卡、IP、路由等信息。需要我们??为 Docker容器添加?卡、配置IP等。
这种?络模式下容器只有lo回环?络,没有其他?卡。none模式可以在容器创建时通过-- network=none来指定。这种类型的?络没有办法联?,封闭的?络能很好的保证容器的安全性。 创建?个none?络的容器
[root@docker ~]# docker run -it --network none busybox
/ # ifconfig
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
?如某个容器的唯??途是?产随机密码,就可以放到none?络中避免密码被窃取。

自定义网络模式
创建me_net?络,系统默认IP地址段?动向后递增
[root@docker ~]# docker network create --driver bridge me_net 04bcfda0226c8ce6c91d66ca8966986b92ffda64f1e147eb926af559beca1715 [root@docker ~]# ifconfig br-04bcfda0226c: flags=4099mtu 1500 inet 172.20.0.1 netmask 255.255.0.0 broadcast 172.20.255.255 ether 02:42:6a:19:29:8d txqueuelen 0 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 8 bytes 648 (648.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 br-1362f3863208: flags=4099 mtu 1500 inet 172.19.0.1 netmask 255.255.0.0 broadcast 172.19.255.255 inet6 fe80::42:c9ff:fe2b:d49 prefixlen 64 scopeid 0x20 ether 02:42:c9:2b:0d:49 txqueuelen 0 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 8 bytes 648 (648.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 br-d5b01d78427c: flags=4099 mtu 1500 inet 172.18.0.1 netmask 255.255.0.0 broadcast 172.18.255.255 ether 02:42:a5:43:a6:02 txqueuelen 0 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 docker0: flags=4163 mtu 1500 inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255 inet6 fe80::42:82ff:fe72:da52 prefixlen 64 scopeid 0x20 ether 02:42:82:72:da:52 txqueuelen 0 (Ethernet) RX packets 46 bytes 4140 (4.0 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 67 bytes 4989 (4.8 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 eth0: flags=4163 mtu 1500 inet 192.168.200.11 netmask 255.255.255.0 broadcast 192.168.200.255 inet6 fe80::4e6f:f9e8:b32:518c prefixlen 64 scopeid 0x20 ether 00:0c:29:74:dc:0d txqueuelen 1000 (Ethernet) RX packets 340771 bytes 353251717 (336.8 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 128428 bytes 225661146 (215.2 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73 mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10 loop txqueuelen 1000 (Local Loopback) RX packets 90 bytes 7459 (7.2 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 90 bytes 7459 (7.2 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 veth500604c: flags=4163 mtu 1500 inet6 fe80::4cac:27ff:fe0e:9df0 prefixlen 64 scopeid 0x20 ether 4e:ac:27:0e:9d:f0 txqueuelen 0 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 8 bytes 648 (648.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 veth694d133: flags=4163 mtu 1500 inet6 fe80::4cd8:94ff:fe2c:b25c prefixlen 64 scopeid 0x20 ether 4e:d8:94:2c:b2:5c txqueuelen 0 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 8 bytes 648 (648.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 veth96651b8: flags=4163 mtu 1500 inet6 fe80::a4e8:d8ff:fe6a:9a51 prefixlen 64 scopeid 0x20 ether a6:e8:d8:6a:9a:51 txqueuelen 0 (Ethernet) RX packets 19 bytes 1868 (1.8 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 33 bytes 2431 (2.3 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 vethb09c007: flags=4163 mtu 1500 inet6 fe80::98f4:67ff:fe10:ee68 prefixlen 64 scopeid 0x20 ether 9a:f4:67:10:ee:68 txqueuelen 0 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 8 bytes 648 (648.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

使用自定义网络创建容器
[root@docker ~]# docker run --network me_net -it busybox
/ # ifconfig
eth0 Link encap:Ethernet HWaddr 02:42:AC:14:00:02
inet addr:172.20.0.2 Bcast:172.20.255.255 Mask:255.255.0.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:11 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:946 (946.0 B) TX bytes:0 (0.0 B)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
/ #
