Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。
一个完整的Docker有以下几个部分组成:
yum install -y container-selinux-2.21-1.el7.noarch.rpm
docker-ce-18.03.1.ce-1.el7.centos.x86_64.rpm
libsemanage-2.5-8.el7.x86_64.rpm
libsemanage-python-2.5-8.el7.x86_64.rpm
pigz-2.3.4-1.el7.x86_64.rpm
policycoreutils-2.5-17.1.el7.x86_64.rpm
policycoreutils-python-2.5-17.1.el7.x86_64.rpm
[root@foundation20 mnt]# systemctl start docker
导入镜象
[root@foundation20 mnt]# docker load -i ubuntu.tar
454970bd163b: Loading layer 196.8MB/196.8MB
38112156678d: Loading layer 208.9kB/208.9kB
4e1f7c524148: Loading layer 4.608kB/4.608kB
56063ad57855: Loading layer 1.024kB/1.024kB
[root@foundation20 mnt]# docker load -i rhel7.tar
e1f5733f050b: Loading layer 147.1MB/147.1MB
[root@foundation20 mnt]# docker load -i nginx.tar
cdb3f9544e4c: Loading layer 58.44MB/58.44MB
a8c4aeeaa045: Loading layer 54.24MB/54.24MB
08d25fa0442e: Loading layer 3.584kB/3.584kB
Loaded image: nginx:latest
查看镜像
[root@foundation20 mnt]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest c82521676580 2 months ago 109MB
ubuntu latest 07c86167cdc4 2 years ago 188MB
rhel7 latest 0a3eb3fde7fd 4 years ago 140MB
[root@foundation20 mnt]# docker image --help
Usage: docker image COMMAND
Manage images
Options:
Commands:
build Build an image from a Dockerfile
history Show the history of an image
import Import the contents from a tarball to create a filesystem image
inspect Display detailed information on one or more images
load Load an image from a tar archive or STDIN
ls List images
prune Remove unused images
pull Pull an image or a repository from a registry
push Push an image or a repository to a registry
rm Remove one or more images
save Save one or more images to a tar archive (streamed to STDOUT by default)
tag Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
Run 'docker image COMMAND --help' for more information on a command.
创建容器
[root@foundation20 mnt]# docker run -it --name vm1 ubuntu
root@ce9b17aeb721:/# exit
[root@foundation20 mnt]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ce9b17aeb721 ubuntu "/bin/bash" About a minute ago Exited (0) 28 seconds ago vm1
开启vm1容器
[root@foundation20 mnt]# docker start vm1
vm1
[root@foundation20 mnt]# docker attach vm1
root@ce9b17aeb721:/#
root@ce9b17aeb721:/#
root@ce9b17aeb721:/# exit
进入交互界面
[root@foundation20 mnt]# docker attach vm1
read escape sequence ctrl+p+q 打入后台
[root@foundation20 mnt]# docker run -d --name vm2 nginx
2d558e44f5cba5eb9439649411e1bbe03d79c96fadfd8fdb2b3ba0ae2d85481b
[root@foundation20 mnt]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2d558e44f5cb nginx "nginx -g 'daemon of…" 7 seconds ago Up 6 seconds 80/tcp vm2
ce9b17aeb721 ubuntu "/bin/bash" 6 minutes ago Up 4 minutes vm1
默认使用网络对的形式
[root@foundation20 mnt]# ip addr
14: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
link/ether 02:42:9b:38:13:f7 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever
inet6 fe80::42:9bff:fe38:13f7/64 scope link
valid_lft forever preferred_lft forever
46: veth7df6613@if45: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP
link/ether ca:aa:ea:2a:bf:e2 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet6 fe80::c8aa:eaff:fe2a:bfe2/64 scope link
valid_lft forever preferred_lft forever
root@ce9b17aeb721:/#
root@ce9b17aeb721:/# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
45: eth0@if46: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
valid_lft forever preferred_lft forever
root@ce9b17aeb721:/# exit
查看容器信息
[root@foundation20 mnt]# docker inspect vm2
查看容器历史
[root@foundation20 mnt]# docker history nginx:latest
IMAGE CREATED CREATED BY SIZE COMMENT
c82521676580 2 months ago /bin/sh -c #(nop) CMD ["nginx" "-g" "daemon… 0B
<missing> 2 months ago /bin/sh -c #(nop) STOPSIGNAL [SIGTERM] 0B
<missing> 2 months ago /bin/sh -c #(nop) EXPOSE 80/tcp 0B
<missing> 2 months ago /bin/sh -c ln -sf /dev/stdout /var/log/nginx… 22B
<missing> 2 months ago /bin/sh -c set -x && apt-get update && apt… 53.7MB
<missing> 2 months ago /bin/sh -c #(nop) ENV NJS_VERSION=1.15.2.0.… 0B
<missing> 2 months ago /bin/sh -c #(nop) ENV NGINX_VERSION=1.15.2-… 0B
<missing> 3 months ago /bin/sh -c #(nop) LABEL maintainer=NGINX Do… 0B
<missing> 3 months ago /bin/sh -c #(nop) CMD ["bash"] 0B
<missing> 3 months ago /bin/sh -c #(nop) ADD file:919939fa022472751… 55.3MB
在容器内执行指令
[root@foundation20 mnt]# docker exec vm2 ls -ld /usr/share/nginx/html
drwxr-xr-x 2 root root 40 Jul 24 17:21 /usr/share/nginx/html
[root@foundation20 mnt]# vim index.html
将文件拷入容器内
[root@foundation20 mnt]# docker cp index.html vm2:/usr/share/nginx/html
[root@foundation20 mnt]# docker attach vm1
root@ce9b17aeb721:/#
root@ce9b17aeb721:/# uname -r
3.10.0-514.el7.x86_64
root@ce9b17aeb721:/# touch file{1..20}
root@ce9b17aeb721:/# exit
将容器vm1提交为一个镜像
[root@foundation20 mnt]# docker commit vm1 ubuntu:v1
sha256:9be0a9b6f97c722bcb8f6d10620ac30cf784bb199352b65a69661ac6543284db
[root@foundation20 mnt]# docker history ubuntu:v1
IMAGE CREATED CREATED BY SIZE COMMENT
9be0a9b6f97c 15 seconds ago /bin/bash 35B
07c86167cdc4 2 years ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B
220d2912ab1d 2 years ago /bin/sh -c sed -i 's/^#\s*\(deb.*universe\)$… 1.9kB
cc77a2e3d72c 2 years ago /bin/sh -c echo '#!/bin/sh' > /usr/sbin/poli… 195kB
c8fa7cdceff3 2 years ago /bin/sh -c #(nop) ADD file:b9504126dc5590898… 188MB
[root@foundation20 mnt]# docker history ubuntu
IMAGE CREATED CREATED BY SIZE COMMENT
07c86167cdc4 2 years ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B
220d2912ab1d 2 years ago /bin/sh -c sed -i 's/^#\s*\(deb.*universe\)$… 1.9kB
cc77a2e3d72c 2 years ago /bin/sh -c echo '#!/bin/sh' > /usr/sbin/poli… 195kB
c8fa7cdceff3 2 years ago /bin/sh -c #(nop) ADD file:b9504126dc5590898… 188MB
删除容器
[root@foundation20 mnt]# docker rm vm1
vm1
删除镜像
[root@foundation20 mnt]# docker rmi ubuntu:v1
Untagged: ubuntu:v1
Deleted: sha256:9be0a9b6f97c722bcb8f6d10620ac30cf784bb199352b65a69661ac6543284db
Deleted: sha256:9f242d4309ec44c7c426bb1c729fcb2156a09f562023b23999a57b52d7590590
如果创建容器时没有命名,会随机命名
[root@foundation20 mnt]# docker run -it ubuntu
root@e14dbb6ea8b3:/# exit
[root@foundation20 mnt]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e14dbb6ea8b3 ubuntu "/bin/bash" 13 seconds ago Exited (0) 11 seconds ago distracted_goldberg
6591d472ee9a nginx "nginx -g 'daemon of…" 37 minutes ago Exited (0) 5 minutes ago vm2
[root@foundation20 mnt]# docker start distracted_goldberg
distracted_goldberg
[root@foundation20 mnt]# docker attach distracted_goldberg
root@e14dbb6ea8b3:/#
root@e14dbb6ea8b3:/# touch file1
root@e14dbb6ea8b3:/# read escape sequence
查看容器文件系统变更
[root@foundation20 mnt]# docker diff e14dbb6ea8b3
A /file1
[root@foundation20 mnt]# docker attach distracted_goldberg
root@e14dbb6ea8b3:/#
root@e14dbb6ea8b3:/# rm -rf file1
root@e14dbb6ea8b3:/# read escape sequence
[root@foundation20 mnt]# docker diff e14dbb6ea8b3
进入容器bash的两种方式
[root@foundation20 mnt]# docker run -it --name vm1 nginx bash
root@4ae20f55cbe3:/# exit
[root@foundation20 mnt]# docker start vm1
vm1
[root@foundation20 mnt]# docker exec -it vm1 bash
root@4ae20f55cbe3:/# ^C
root@4ae20f55cbe3:/# exit
导出容器
[root@foundation20 mnt]# docker export distracted_goldberg -o test.tar
导入容器
[root@foundation20 mnt]# docker import test.tar test:v1
sha256:dac6e444ddf390fb1cb2b4bdeffe6941376c19093b5d354a4e456654cc23a85b
从网上获取镜像
[root@foundation20 mnt]# vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://w8ujyhgj.mirror.aliyuncs.com"]
}
[root@foundation20 mnt]# systemctl daemon-reload
[root@foundation20 mnt]# systemctl restart docker
查找镜像
[root@foundation20 mnt]# docker search busybox
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
busybox Busybox base image. 1381 [OK]
下载镜像
[root@foundation20 mnt]# docker pull busybox
Using default tag: latest
latest: Pulling from library/busybox
90e01955edcd: Pull complete
Digest: sha256:2a03a6059f21e150ae84b0973863609494aad70f0a80eaeb64bddd8d92465812
Status: Downloaded newer image for busybox:latest
[root@foundation20 mnt]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
test v1 dac6e444ddf3 24 minutes ago 188MB
busybox latest 59788edf1f3e 2 weeks ago 1.15MB
将容器/usr/share/nginx/html挂在到主机 /tmp/docker/web/目录下
[root@foundation20 docker]# docker run -d --name vm2 -v /tmp/docker/web/:/usr/share/nginx/html nginx
d259669ae78ba0c80cbb7374101a261350bb9f4df9e56580e9189a984a70d4c7
/tmp/docker/data2:/data2:ro 以只读的方式挂载
[root@foundation20 docker]# docker run -it --name vm3 -v /tmp/docker/data1:/data1 -v /tmp/docker/data2:/data2:ro -v /etc/yum.repos.d/rhel-dvd.repo:/etc/yum.repos.d/rhel-dvd.repo:ro ubuntu
root@2720639ce8da:/# vi /etc/yum.repos.d/rhel-dvd.repo
[root@foundation20 docker]# docker attach vm3
root@2720639ce8da:/#
root@2720639ce8da:/# cd data1/
root@2720639ce8da:/data1# touch file1
root@2720639ce8da:/data1# cd ..
root@2720639ce8da:/# cd data2/
root@2720639ce8da:/data2# touch file2
touch: cannot touch 'file2': Read-only file system
root@2720639ce8da:/data2# cd ..
root@2720639ce8da:/# read escape sequence
创建容器的volumes
[root@foundation20 docker]# docker create --name dataval -v /tmp/docker/data1:/data1 -v /tmp/docker/data2:/data2:ro -v /etc/yum.repos.d/rhel-dvd.repo:/etc/yum.repos.d/rhel-dvd.repo:ro ubuntu
使用volumes创建容器
[root@foundation20 docker]# docker run -it --name vm4 --volumes-from=dataval ubuntu
root@6f81d3f48005:/# cd data1/
root@6f81d3f48005:/data1# cd ..
root@6f81d3f48005:/# cd /data2/
容器的四种网络模式
一、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,实现容器网络环境的隔离性。 bridge 桥接模式下的 Docker Container 在使用时,并非为开发者包办了一切。 最明显的是,该模式下 Docker Container 不具有一个公有 IP, 即和宿主机的 eth0 不处于同一个网段。导致的结果是宿主机以外的世界不能直接和容器进行通信。 虽然 NAT 模式经过中间处理实现了这一点 但是 NAT 模式仍然存在问题与不便,如:容器均需要在宿主机上竞争端口,容器 内部服务的访问者需要使用服务发现获知服务的外部端口等。 另外 NAT 模式由于是在三层 网络上的实现手段,故肯定会影响网络的传输效率。
[root@foundation20 docker]# docker run -d --name vm1 nginx
f29a7c9fe6b6b10b9e54e256ef47e694d9f361716bc15de3143555caeeb231e1
二、Host 网络模式:
host 模式是 bridge 桥接模式很好的补充。 采用 host 模式的 Docker Container,可以直接使用 宿主机的 IP 地址与外界进行通信,若宿主机的 eth0 是一个公有 IP, 那么容器也拥有这个公有 IP。 同时容器内服务的端口也可以使用宿主机的端口,无需额外进行 NAT 转换。 当然,有这样的方便,肯定会损失部分其他的特性, 最明显的是 Docker Container 网络环境隔离性的弱化, 即容器不再拥有隔离、独立的网络栈。 另外,使用 host 模式的 Docker Container 虽 然可以让容器内部的服务和传统情况无差别、无改造的使用, 但是由于网络隔离性的弱化,该容器会与宿主机共享竞争网络栈的使用; 另外,容器内部将不再拥有所有的端口资源, 原因是部分端口资源已经被宿主机本身的服务占用, 还有部分端口已经用以 bridge 网络模式容器的端口映射。
[root@foundation20 docker]# docker run -it --name vm2 --net host ubuntu
root@foundation20:/# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp0s25: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UP group default qlen 1000
link/ether 00:21:cc:5f:d1:ca brd ff:ff:ff:ff:ff:ff
3: wlp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 74:e5:0b:88:f8:0c brd ff:ff:ff:ff:ff:ff
inet 192.168.43.164/24 brd 192.168.43.255 scope global dynamic wlp3s0
valid_lft 3137sec preferred_lft 3137sec
inet6 240e:bf:d206:aba5:ff6f:936a:2372:adc6/64 scope global
valid_lft forever preferred_lft forever
inet6 fe80::8c56:99c9:940f:272d/64 scope link
valid_lft forever preferred_lft forever
端口映射
[root@foundation20 docker]# docker run -d --name vm3 -p 8080:80 nginx
dd3a11de173e9f90f5beace765f58b6de6832c3af6ecf1c27cfc3b2baf9601c8
三、Container 网络模式:
(1) 查找 other container(即需要被共享网络环境的容器)的网络 namespace;
(2) 将新创建的 Docker Container(也是需要共享其他网络的容器)的 namespace, 使用other container 的 namespace。 Docker Container 的 other container 网络模式, 可以用来更好的服务于容器间的通信。 在这种模式下的 Docker Container 可以通过 localhost 来访问 namespace 下的其他容器,传输效率较高。 虽然多个容器共享网络环境,但是多个容器形成的整体依然与宿主机以及其他容器形成网络隔离。 另外,这种模式还节约了一定数量的网络资源。但是需要注意的是, 它并没有改善容器与宿主机以外世界通信的情况。
[root@foundation20 docker]# docker rm vm2
vm2
[root@foundation20 docker]# docker run -it --name vm2 --net container:vm1 ubuntu
root@f29a7c9fe6b6:/# ls
bin dev home lib64 mnt proc run srv tmp var
boot etc lib media opt root sbin sys usr
root@f29a7c9fe6b6:/# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
69: eth0@if70: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
valid_lft forever preferred_lft forever
root@f29a7c9fe6b6:/# exit
四、None 网络模式:
网络环境为 none,即不为 Docker Container 任何的网络环境。 一旦 Docker Container 采用了none 网络模式 那么容器内部就只能使用 loopback 网络设备,不会再有其他的网络资源。 可以说 none 模式为 Docker Container 做了极少的网络设定 但是俗话说得好“少即是多”在没有网络配置的情况下,作为 Docker 开发者 才能在这基础做其他无限多可能的网络定制开发。 这也恰巧体现了 Docker 设计理念的开放。 在 none 网络模式下分配固定 ip:netns 是在 linux 中提供网络虚拟化的一个项目 使用 netns 网络空间虚拟化可以在本地虚拟化出多个网络环境 目前 netns 在 lxc 容器中被用来为容器提供网络。 使用 netns 创建的网络空间独立于当前系统的网络空间 其中的网络设备以及 iptables 规则 等都是独立的,就好像进入了另外一个网络一样。
---------------------
作者:xbw_linux123
来源:CSDN
原文:https://blog.csdn.net/xbw_linux123/article/details/81873490
版权声明:本文为博主原创文章,转载请附上博文链接!
[root@foundation20 docker]# docker run -it --name vm4 --net none ubuntu
root@c3b574078d74:/# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
[root@foundation20 docker]# docker attach vm4
root@c3b574078d74:/#
root@c3b574078d74:/# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
75: eth0@if76: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 5a:19:45:43:da:d6 brd ff:ff:ff:ff:ff:ff
[root@foundation20 mnt]# ip link add name veth0 type veth peer name veth1
[root@foundation20 mnt]# brctl addif docker0 veth0
[root@foundation20 mnt]# ip link set up veth0
[root@foundation20 mnt]# ip link set up veth1
[root@foundation20 mnt]# docker inspect vm4 | grep Pid
"Pid": 21352,
"PidMode": "",
"PidsLimit": 0,
[root@foundation20 mnt]# cd /proc/21352
[root@foundation20 21352]# ls
attr coredump_filter gid_map mountinfo oom_score schedstat status
autogroup cpuset io mounts oom_score_adj sessionid syscall
auxv cwd limits mountstats pagemap setgroups task
cgroup environ loginuid net personality smaps timers
clear_refs exe map_files ns projid_map stack uid_map
cmdline fd maps numa_maps root stat wchan
comm fdinfo mem oom_adj sched statm
[root@foundation20 21352]# cd ns/
[root@foundation20 ns]# ls
ipc mnt net pid user uts
[root@foundation20 ns]# ip netns add test
[root@foundation20 ns]# ip netns list
test
[root@foundation20 ns]# cd /var/run/netns/
[root@foundation20 netns]# ls
test
[root@foundation20 netns]# ip netns del test
[root@foundation20 netns]# ls
[root@foundation20 netns]# ln -s /proc/21352/ns/net 21352
[root@foundation20 netns]# ip link set veth1 netns 21352
[root@foundation20 netns]# ip netns exec 21352 ip link set veth1 name eth0
[root@foundation20 netns]# ip netns exec 21352 ip link set up dev eth0
[root@foundation20 netns]# ip netns exec 21352 ip addr add 172.17.0.100/24
Not enough information: "dev" argument is required.
[root@foundation20 netns]# ip netns exec 21352 ip addr add 172.17.0.100/24 dev eth0
[root@foundation20 netns]# ip netns exec 21352 ip route add default via 172.17.0.1
root@c3b574078d74:/# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
75: eth0@if76: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 5a:19:45:43:da:d6 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.100/24 scope global eth0
valid_lft forever preferred_lft forever
root@c3b574078d74:/# ping baidu.com
PING baidu.com (220.181.57.216) 56(84) bytes of data.
64 bytes from 220.181.57.216: icmp_seq=1 ttl=52 time=45.1 ms
64 bytes from 220.181.57.216: icmp_seq=2 ttl=52 time=46.9 ms
64 bytes from 220.181.57.216: icmp_seq=3 ttl=52 time=41.2 ms
^C
--- baidu.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 41.276/44.457/46.912/2.357 ms
[root@foundation20 docker]# docker rm vm1 vm2
vm1
vm2
[root@foundation20 docker]# docker run -d --name vm1 nginx
1c5af164e3dca1fa48ba3a3afa66eff61509f10f12570c3c3d7368e3c9342853
[root@foundation20 docker]# docker run -it --name vm2 --net container:vm1 ubuntu
root@1c5af164e3dc:/# netstat -antlp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN -
root@1c5af164e3dc:/# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
77: eth0@if78: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
valid_lft forever preferred_lft forever
root@1c5af164e3dc:/# exit
[root@foundation20 docker]# docker rm vm2
vm2
为vm2创建vm1网络链接,可以在vm2上通过vm1的网络别名,对vm1进行相应操作,实际是在vm2上创建vm1的解析
[root@foundation20 docker]# docker run -it --name vm2 --link vm1:nginx ubuntu
root@a72205944b17:/# ping nginx
PING nginx (172.17.0.2) 56(84) bytes of data.
64 bytes from nginx (172.17.0.2): icmp_seq=1 ttl=64 time=0.087 ms
64 bytes from nginx (172.17.0.2): icmp_seq=2 ttl=64 time=0.075 ms
^C
--- nginx ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.075/0.081/0.087/0.006 ms
root@a72205944b17:/# vi /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.2 nginx 1c5af164e3dc vm1
172.17.0.3 a72205944b17
root@a72205944b17:/# env
HOSTNAME=a72205944b17
TERM=xterm
NGINX_ENV_NJS_VERSION=1.15.2.0.2.2-1~stretch
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lz=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.axa=00;36:*.oga=00;36:*.spx=00;36:*.xspf=00;36:
NGINX_ENV_NGINX_VERSION=1.15.2-1~stretch
NGINX_NAME=/vm2/nginx
NGINX_PORT_80_TCP_PROTO=tcp
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/
SHLVL=1
HOME=/root
NGINX_PORT_80_TCP=tcp://172.17.0.2:80
NGINX_PORT_80_TCP_PORT=80
LESSOPEN=| /usr/bin/lesspipe %s
NGINX_PORT_80_TCP_ADDR=172.17.0.2
LESSCLOSE=/usr/bin/lesspipe %s %s
NGINX_PORT=tcp://172.17.0.2:80
_=/usr/bin/env