docker简介
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app)。几乎没有性能开销,可以很容易地在机器和数据中心中运行。最重要的是,他们不依赖于任何语言、框架或包括系统。
Docker安装
1.环境准备
在centos7机器上关闭防火墙和SELinux。
关闭firewalld
systemctl stop firewalld
systemctl disable firewalld
关闭selinux
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
安装Docker
安装必要的依赖包。
yum install -y yum-utils device-mapper-persistent-data lvm2
添加软件源信息。
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
更新并安装 Docker-CE。
yum makecache fast
yum -y install docker-ce
开启docker服务。
systemctl daemon-reload
systemctl restart docker
systemctl enable docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
Docker镜像管理/仓库管理
注册仓库DockerHub
https://hub.docker.com/ 注册账号,登录邮箱激活
登录dockerhub
docker login docker.io
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: xmfree #输入注册的用户名
Password: #输入密码
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded//表示成功的登入
搜索镜像
搜索alpine镜像
[root@docker ~]# docker search alpine
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
alpine A minimal Docker image based on Alpine Linux… 7107 [OK]
mhart/alpine-node Minimal Node.js built on Alpine Linux 479
anapsix/alpine-java Oracle Java 8 (and 7) with GLIBC 2.28 over A… 467 [OK]
frolvlad/alpine-glibc Alpine Docker image with glibc (~12MB) 251 [OK]
alpine/git A simple git container running in alpine li… 163 [OK]
mvertes/alpine-mongo light MongoDB container 117 [OK]
yobasystems/alpine-mariadb MariaDB running on Alpine Linux [docker] [am… 80 [OK]
alpine/socat Run socat command in alpine container 64 [OK]
搜索nginx镜像
[root@docker ~]# docker search nginx
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
nginx Official build of Nginx. 14447 [OK]
jwilder/nginx-proxy Automated Nginx reverse proxy for docker con… 1965 [OK]
richarvey/nginx-php-fpm Container running Nginx + PHP-FPM capable of… 807 [OK]
jc21/nginx-proxy-manager Docker container for managing Nginx proxy ho… 147
linuxserver/nginx An Nginx container, brought to you by LinuxS… 141
tiangolo/nginx-rtmp Docker image with Nginx using the nginx-rtmp… 113 [OK]
bitnami/nginx Bitnami nginx Docker Image 94 [OK]
jlesage/nginx-proxy-manager Docker container for Nginx Proxy Manager 94 [OK]
alfg/nginx-rtmp NGINX, nginx-rtmp-module and FFmpeg from sou… 89 [OK]
nginxdemos/hello NGINX webserver that serves a simple page co… 66 [OK]
nginx/nginx-ingress NGINX Ingress Controller for Kubernetes 48
privatebin/nginx-fpm-alpine PrivateBin running on an Nginx, php-fpm & Al… 46 [OK]
nginxinc/nginx-unprivileged Unprivileged NGINX Dockerfiles 30
下载镜像
[root@docker ~]# docker pull alpine
Using default tag: latest
latest: Pulling from library/alpine
801bfaa63ef2: Pull complete
Digest: sha256:3c7497bf0c7af93428242d6176e8f7905f2201d8fc5861f45be7a346b5f23436
Status: Downloaded newer image for alpine:latest
docker.io/library/alpine:latest
下载nginx镜像
[root@docker ~]# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
a076a628af6f: Pull complete
0732ab25fa22: Pull complete
d7f36f6fe38f: Pull complete
f72584a26f32: Pull complete
7125e4df9063: Pull complete
Digest: sha256:10b8cc432d56da8b61b070f4c7d2543a9ed17c2b23010b43af434fd40e2ca4aa
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
下载指定tag
[root@docker ~]# docker pull alpine:3.12.3
3.12.3: Pulling from library/alpine
Digest: sha256:3c7497bf0c7af93428242d6176e8f7905f2201d8fc5861f45be7a346b5f23436
Status: Downloaded newer image for alpine:3.12.3
docker.io/library/alpine:3.12.3
查看本地镜像
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
alpine 3.12.3 389fef711851 2 weeks ago 5.58MB
alpine latest 389fef711851 2 weeks ago 5.58MB
nginx latest ae2feff98a0c 3 weeks ago 133MB
给镜像打标签
[root@docker ~]# docker tag 389fef711851 docker.io/xmfree/alpine:v3.12.3
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
alpine 3.12.3 389fef711851 2 weeks ago 5.58MB
alpine latest 389fef711851 2 weeks ago 5.58MB
xmfree/alpine v3.12.3 389fef711851 2 weeks ago 5.58MB
nginx latest ae2feff98a0c 3 weeks ago 133MB
推送镜像
[root@docker ~]# docker push docker.io/xmfree/alpine:v3.12.3
The push refers to repository [docker.io/xmfree/alpine]
777b2c648970: Mounted from library/alpine
v3.12.3: digest: sha256:074d3636ebda6dd446d0d00304c4454f468237fdacf08fb0eeac90bdbfa1bac7 size: 528
删除镜像
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
alpine 3.12.3 389fef711851 2 weeks ago 5.58MB
alpine latest 389fef711851 2 weeks ago 5.58MB
xmfree/alpine v3.12.3 389fef711851 2 weeks ago 5.58MB
nginx latest ae2feff98a0c 3 weeks ago 133MB
[root@docker ~]# docker rmi 389fef711851
Error response from daemon: conflict: unable to delete 389fef711851 (must be forced) - image is referenced in multiple repositories
[root@docker ~]# docker rmi -f 389fef711851
Untagged: alpine:3.12.3
Untagged: alpine:latest
Untagged: alpine@sha256:3c7497bf0c7af93428242d6176e8f7905f2201d8fc5861f45be7a346b5f23436
Untagged: xmfree/alpine:v3.12.3
Untagged: xmfree/alpine@sha256:074d3636ebda6dd446d0d00304c4454f468237fdacf08fb0eeac90bdbfa1bac7
Deleted: sha256:389fef7118515c70fd6c0e0d50bb75669942ea722ccb976507d7b087e54d5a23
Deleted: sha256:777b2c648970480f50f5b4d0af8f9a8ea798eea43dbcf40ce4a8c7118736bdcf
通过容器创建镜像
通过镜像启动容器
查看镜像
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest ae2feff98a0c 3 weeks ago 133MB
根据镜像启动容器
[root@docker ~]# docker run -ti --name nginx -d nginx
eb49e0d3321a06ddc871251aaf1026dbcde56dc871d4508c9fe72dc0b079822d
[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
eb49e0d3321a nginx "/docker-entrypoint.…" 4 seconds ago Up 3 seconds 80/tcp nginx
根据启动的容器创建新的镜像
[root@docker ~]# docker commit -a "cool" -m "this is test" eb49e0d3321a nginx:1.0
sha256:caf7beb9af858d3c8884655ce468822fe7eeb643a85cc41fcb8f835d8974fcb7
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx 1.0 caf7beb9af85 3 seconds ago 133MB
nginx latest ae2feff98a0c 3 weeks ago 133MB
docker commit : 从容器创建一个新的镜像
-a:提交的镜像作者;
-c:使用Dockerfile指令来创建镜像;
-m:提交时的说明文字;
-p:在commit时,将容器暂停。
Docker容器管理
运行容器
[root@docker ~]# docker run -dti --name nginx1.0 -p 80:80 nginx
9143ce0a31e7ae1b9f980aabab639529a148ea630a15df571e7076f6c5df9519
[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9143ce0a31e7 nginx "/docker-entrypoint.…" 2 seconds ago Up 2 seconds 0.0.0.0:80->80/tcp nginx1.0
eb49e0d3321a nginx "/docker-entrypoint.…" About an hour ago Up About an hour 80/tcp nginx
docker run : 从容器创建一个新的镜像
-i:交互式操作;
-t:终端;
-d:容器在后台运行;
-p:端口映射;
--name:为容器指定一个名称;
指明了-d运行镜像,会返回容器id;如果不指明-d运行镜像,会打印出catalina.out的日志,在[crtl+c]后,容器即停止运行。
终止容器
[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9143ce0a31e7 nginx "/docker-entrypoint.…" 7 minutes ago Up 7 minutes 0.0.0.0:80->80/tcp nginx1.0
eb49e0d3321a nginx "/docker-entrypoint.…" About an hour ago Up About an hour 80/tcp nginx
[root@docker ~]# docker stop 9143ce0a31e7 eb49e0d3321a
9143ce0a31e7
eb49e0d3321a
[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9143ce0a31e7 nginx "/docker-entrypoint.…" 9 minutes ago Exited (0) 4 seconds ago nginx1.0
eb49e0d3321a nginx "/docker-entrypoint.…" About an hour ago Exited (0) 4 seconds ago nginx
启动容器
[root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9143ce0a31e7 nginx "/docker-entrypoint.…" 10 minutes ago Exited (0) About a minute ago nginx1.0
eb49e0d3321a nginx "/docker-entrypoint.…" About an hour ago Exited (0) About a minute ago nginx
[root@docker ~]# docker start 9143ce0a31e7
9143ce0a31e7
[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9143ce0a31e7 nginx "/docker-entrypoint.…" 10 minutes ago Up 4 seconds 0.0.0.0:80->80/tcp nginx1.0
docker container start [CONTAINER ID] 启动容器
docker container stop [CONTAINER ID] 终止容器
docker start $(docker ps -aq) --备注:启动所有 docker 容器
进入/退出容器
docker exec -it [CONTAINER ID] bash 进入容器
[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9143ce0a31e7 nginx "/docker-entrypoint.…" 17 hours ago Up 17 hours 0.0.0.0:80->80/tcp nginx1.0
[root@docker ~]# docker exec -it 9143ce0a31e7 /bin/sh
# ls
bin dev docker-entrypoint.sh home lib64 mnt proc run srv tmp var
boot docker-entrypoint.d etc lib media opt root sbin sys usr
# exit #退出容器
[root@docker ~]#
容器导出和导入
容器导出
#这样将导出容器快照到本地文件
docker export [CONTAINER ID] > [tar file]
[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9143ce0a31e7 nginx "/docker-entrypoint.…" 18 hours ago Up 17 hours 0.0.0.0:80->80/tcp nginx1.0
[root@docker ~]# docker export 9143ce0a31e7 > nginx1.0.tar
[root@docker ~]# ls
anaconda-ks.cfg nginx1.0.tar
容器导入
#从容器快照文件中再导入为镜像
cat [tar file] | docker import - [name:tag]
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx 1.0 caf7beb9af85 19 hours ago 133MB
alpine latest 389fef711851 3 weeks ago 5.58MB
nginx latest ae2feff98a0c 3 weeks ago 133MB
[root@docker ~]# cat nginx1.0.tar | docker import - nginx:1.0.1
sha256:6a652e89d56592369757470d6874e3567d4cda3b112f8cacba3e2b186486babd
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx 1.0.1 6a652e89d565 5 seconds ago 131MB
nginx 1.0 caf7beb9af85 19 hours ago 133MB
alpine latest 389fef711851 3 weeks ago 5.58MB
nginx latest ae2feff98a0c 3 weeks ago 133MB
删除容器
#删除终止状态的容器
docker rm [CONTAINER ID]
#删除所有处于终止状态的容器
docker container prune
#删除运行中的容器
docker rm -f [CONTAINER ID]
[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9143ce0a31e7 nginx "/docker-entrypoint.…" 18 hours ago Up 18 hours 0.0.0.0:80->80/tcp nginx1.0
[root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9143ce0a31e7 nginx "/docker-entrypoint.…" 18 hours ago Up 18 hours 0.0.0.0:80->80/tcp nginx1.0
eb49e0d3321a nginx "/docker-entrypoint.…" 19 hours ago Exited (0) 18 hours ago nginx
[root@docker ~]# docker rm eb49e0d3321a
eb49e0d3321a
[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9143ce0a31e7 nginx "/docker-entrypoint.…" 18 hours ago Up 18 hours 0.0.0.0:80->80/tcp nginx1.0
[root@docker ~]# docker rm -f 9143ce0a31e7
9143ce0a31e7
[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
Docker数据管理
数据卷实践
[root@docker ~]# mkdir /data/ #创建目录
[root@docker ~]# echo "test" > /data/test.txt #创建一个test文件
[root@docker ~]# docker run -dti --name test1 -v /data/:/data/ nginx #启动一个容器,挂载数据卷
WARNING: IPv4 forwarding is disabled. Networking will not work.
3f2f8a5fd9f6665cb2f0f839fe0fb40a57c922ba499d6a1eaaef426d19f2807a
[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3f2f8a5fd9f6 nginx "/docker-entrypoint.…" 21 seconds ago Up 18 seconds 80/tcp test1
[root@docker ~]# docker exec -it 3f2f8a5fd9f6 /bin/bash
root@3f2f8a5fd9f6:/data# cat /data/test.txt
test
注意:
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 /data1 --name v-data1 nginx
6da6aff079abae6ffbfb2c45388370927bd80da11ae9c6d6d1532e39bc7b174c
[root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6da6aff079ab nginx "/docker-entrypoint.…" 3 seconds ago Created v-data1
[root@docker ~]#
创建两个容器,同时挂载数据卷容器
docker run --volumes-from [数据卷容器id/name] -dti --name [容器名字] [镜像名称] [命令(可选)]
创建v01容器:
[root@docker ~]# docker run --volumes-from v-data1 -dti --name v01 nginx
1390a43c879a9e715cffdb76a96eafd188e7e3ef1bff0ef0d2a5e9ec6d089375
创建v02容器
[root@docker ~]# docker run --volumes-from v-data1 -dti --name v02 nginx
7685c28d94753441721be5741064685092d6cda7d46beb44ef46080ae678545e
[root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7685c28d9475 nginx "/docker-entrypoint.…" 4 hours ago Up 4 hours 80/tcp v02
1390a43c879a nginx "/docker-entrypoint.…" 4 hours ago Up 4 hours 80/tcp v01
6da6aff079ab nginx "/docker-entrypoint.…" 4 hours ago Created v-data1
确认卷容器共享
进入v01,操作数据卷容器:
[root@docker ~]# docker exec -it 1390a43c879a /bin/bash
root@1390a43c879a:/# ls /data1
root@1390a43c879a:/# echo 'v01'>/data1/v01.txt
root@1390a43c879a:/# exit
exit
进入v02,确认数据卷:
[root@docker ~]# docker exec -it 7685c28d9475 /bin/bash
root@7685c28d9475:/# echo 'v02'>/data1/v02.txt
root@7685c28d9475:/# ls /data1/
v01.txt v02.txt
root@7685c28d9475:/# exit
exit
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
4c892f00285e: Pull complete
Digest: sha256:e1488cb900233d035575f0a7787448cb1fa93bed0ccc0d4efc1963d7d72a8f17
Status: Downloaded newer image for busybox:latest
/ #
host模式
如果启动容器的时候使用host模式,那么这个容器将不会获得一个独立的Network Namespace,而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。但是,容器的其他方面,如文件系统、进程列表等还是和宿主机隔离的。
使用host模式的容器可以直接使用宿主机的IP地址与外界通信,容器内部的服务端口也可以使用宿主机的端口,不需要进行NAT,host最大的优势就是网络性能比较好,但是docker host上已经使用的端口就不能再用了,网络的隔离性不好。
创建一个host网络的容器
[root@docker ~]# docker run -it --network host busybox
/ # ifconfig
docker0 Link encap:Ethernet HWaddr 02:42:77:58:6B:70
inet addr:172.17.0.1 Bcast:172.17.255.255 Mask:255.255.0.0
inet6 addr: fe80::42:77ff:fe58:6b70/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)
ens33 Link encap:Ethernet HWaddr 00:0C:29:4E:AF:EE
inet addr:192.168.137.3 Bcast:192.168.137.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe4e:afee/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:839973 errors:0 dropped:0 overruns:0 frame:0
TX packets:261509 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1073840334 (1.0 GiB) TX bytes:29048386 (27.7 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:5947 errors:0 dropped:0 overruns:0 frame:0
TX packets:5947 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1
RX bytes:2251874 (2.1 MiB) TX bytes:2251874 (2.1 MiB)
通过以上实验得知,该容器的网络与宿主机一样,直接使用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:1
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
/ #
比如某个容器的唯一用途是生产随机密码,就可以放到none网络中避免密码被窃取。
自定义网络模式
创建my_net网络,系统默认IP地址段自动向后递增
[root@docker ~]# docker network create --driver bridge my_net
4b2f6fc053a2e255d8f27c1a9d81cb44406a2c5ed1aeed8f7c95f806c5cac5e4
[root@docker ~]# ifconfig
br-4b2f6fc053a2: flags=4099 mtu 1500
inet 172.18.0.1 netmask 255.255.0.0 broadcast 172.18.255.255
ether 02:42:02:8e:37:d1 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=4099 mtu 1500
inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255
inet6 fe80::42:77ff:fe58:6b70 prefixlen 64 scopeid 0x20
ether 02:42:77:58:6b:70 txqueuelen 0 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 5 bytes 438 (438.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ens33: flags=4163 mtu 1500
inet 192.168.137.3 netmask 255.255.255.0 broadcast 192.168.137.255
inet6 fe80::20c:29ff:fe4e:afee prefixlen 64 scopeid 0x20
ether 00:0c:29:4e:af:ee txqueuelen 1000 (Ethernet)
RX packets 840094 bytes 1073852046 (1.0 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 261572 bytes 29060974 (27.7 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 1 (Local Loopback)
RX packets 5947 bytes 2251874 (2.1 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 5947 bytes 2251874 (2.1 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
使用自定义网络创建容器
[root@docker ~]# docker run --network my_net -it busybox
/ # ifconfig
eth0 Link encap:Ethernet HWaddr 02:42:AC:12:00:02
inet addr:172.18.0.2 Bcast:172.18.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:1
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)