1.镜像管理
物理机上:
软件包:
docker-engine-17.03.1.ce-1.el7.centos.x86_64.rpm
docker-engine-selinux-17.03.1.ce-1.el7.centos.noarch.rpm
软件包下载可以点击这里
ce #社区版
ee #企业版
#
[root@foundation44 Desktop]# mkdir /var/www/html/images
[root@foundation44 Desktop]# mv game2048.tar /var/www/html/images
[root@foundation44 Desktop]# cd /var/www/html/images
[root@foundation44 images]# docker load -i game2048.tar # 导入镜像
011b303988d2: Loading layer 5.05 MB/5.05 MB
36e9226e74f8: Loading layer 51.46 MB/51.46 MB
192e9fad2abc: Loading layer 3.584 kB/3.584 kB
6d7504772167: Loading layer 4.608 kB/4.608 kB
88fca8ae768a: Loading layer 629.8 kB/629.8 kB
Loaded image: game2048:latest
[root@foundation44 images]# docker run -d --name vm1 game2048 # 后台运行,-d 打入后台,--name 起名字3
04aa86a76c7f6d78e7606bf2bd1e5f0a50bc145d646d7a3c9ac96ada2db99804
[root@foundation44 images]# ifconfig docker # 查看docker的ip,这个是内部ip,只有自己可以看见
[root@foundation44 images]# docker inspect vm1 # 查看镜像详情
[root@foundation44 images]# docker inspect vm1
[root@foundation44 images]# route -n #查看网关
# game2048部署成功
2.docker的技术指令
[root@foundation44 images]# docker #按TAB键就可以出来这些指令
build export kill plugin rmi stats version
commit help load port run stop volume
container history login ps save swarm wait
cp image logout pull search system
create images logs push secret tag
diff import network rename service top
events info node restart stack unpause
exec inspect pause rm start update
docker ps # 查看正在运行的容器
docker ps -a # 查看所有容器状态
docker commit # 提交数据
docker cp # 拷贝
exec # 在容器内部执行命令
port # 查看端口
rename # 给容器重命名
stack # 查看状态
docker run -it --name vm1 ubuntu bash # 创建容器
docker attach vm1 # 查看容器状态
docker top vm1 # 连接容器
docker logs vm1 # 查看容器指令输出 -f 参数可以实时查看
docker inspect vm1 # 查看容器详情
docker stats vm1 # 查看容器资源使用率
docker diff vm1 # 查看容器修改
docker run -d --name vm1 ubuntu bash -c "while true; do echo westos; sleep 1; done"
行
docker stop vm1 # 停止容器
docker start vm1 # 启动容器
docker kill vm1 # 强制干掉容器
docker restart vm1 # 重启容器
docker pause/unpause vm1 # 暂停/恢复容器
docker rm/rmi vm1 # 删除容器
docker export vm1 > vm1.tar # 导出容器
docker import vm1.tar image # 导入容器为镜像 image
docker search # 查询镜像
docker pull # 拉取镜像
docker push # 推送镜像
docker commit # 更新镜像
docker images # 查看本地镜像
容器停掉之后,内部的所有资源都会被释放,可以重新分配
# 这两个命令都可以控制容器的开启与关闭
[root@foundation44 images]# docker container stop vm1
vm1
[root@foundation44 images]# docker start vm1
vm1
[root@foundation44 images]# docker history game2048 #查看历史操作
3.镜像仓库
点击此处就可以注册 # 注册
[root@foundation44 ~]# cd /etc/docker/
[root@foundation44 docker]# ls
key.json
[root@foundation44 docker]# vim daemon.json #这个是自己注册得到的网址,属于私有的
{
"registry-mirrors": ["https://6zfq2ttt.mirror.aliyuncs.com"]
}
[root@foundation44 docker]# systemctl daemon-reload
[root@foundation44 docker]# systemctl restart docker
[root@foundation44 docker]# docker pull nginx # 如果已经有,就不用执行这一步
Using default tag: latest
latest: Pulling from library/nginx
be8881be8156: Pull complete
32d9726baeef: Pull complete
87e5e6f71297: Pull complete
Digest: sha256:d85914d547a6c92faa39ce7058bd7529baacab7e0cd4255442b04577c4d1f424
Status: Downloaded newer image for nginx:latest
[root@foundation44 docker]# docker images nginx
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest c82521676580 3 weeks ago 109 MB
[root@foundation44 docker]# cd
[root@foundation44 ~]# docker run -d --name vm2 nginx
7c56d4998bd147387e4f8891ee595e237676f978bf77ea2357bce2728b0bfd52
[root@foundation44 ~]# docker inspect vm2 # 查看vm2的ip
[root@foundation44 ~]# vim index.html # 编写发布目录内容
www.westos.org
[root@foundation44 ~]# docker cp index.html vm2:/usr/share/nginx/html # 复制到默认发布目录下,也可以直接进行访问,这样做只是为了让出测试效果更明显
# 用 vm2 的 ipaddress 进行网页测试:
[root@foundation44 ~]# docker rm -f vm2
vm2
[root@foundation44 ~]# cd /tmp/
[root@foundation44 tmp]# mkdir docker/
[root@foundation44 tmp]# cd docker/
[root@foundation44 docker]# mkdir web/
[root@foundation44 docker]# cd web/
[root@foundation44 ~]# docker run -d --name vm2 -v /tmp/docker/web:/usr/share/nginx/html nginx #挂载,应用起来更方便
04564fd35c83334418e1e0e0900814509cddda16f9e81266f2e1fe42e82f155d
[root@foundation44 ~]# mv index.html /tmp/docker/web/
[root@foundation44 ~]# cd /tmp/docker/web/
[root@foundation44 web]# ls #通过修改此发布目录控制输出内容
index.html
[root@foundation44 web]# vim index.html
1 <h1>www.westos.org</h1>
2 <h1>www.westos.org</h1>
3 <h1>www.westos.org</h1>
4 <h1>www.westos.org</h1>
5 <h1>www.westos.org</h1>
6 <h1>www.westos.org</h1>
4.数据卷的挂载
[root@foundation44 images]# ls
game2048.tar nginx.tar rhel7.tar
[root@foundation44 images]# docker load -i rhel7.tar # 导入镜像
[root@foundation44 images]# docker run -it --name vm5 -v /tmp/data1:/data1 -v /tmp/data2:/data2:ro -v /etc/yum.repos.d/yum.repo:/etc/yum.repos.d/yum.repo: rhel7 bash
bash-4.2# ls
bin data1 dev home lib64 mnt proc run srv tmp var
boot data2 etc lib media opt root sbin sys usr
bash-4.2# cd data1/
bash-4.2# ls
bash-4.2# touch file
bash-4.2# ls
bash-4.2# ls
file
bash-4.2# cd ../data2
bash-4.2# cd data2
bash-4.2# ls
bash-4.2# touch file1 # data2是只读
touch: cannot touch 'file1': Read-only file system
bash-4.2# ls
bin data1 dev file1 lib media opt root sbin sys usr
boot data2 etc home lib64 mnt proc run srv tmp var
bash-4.2# cd /etc/yum.repos.d/
bash-4.2# ls
rhel7.repo yum.repo
bash-4.2# cat yum.repo
[rhel7.3]
name = rhel7.3
baseurl = file:///rhel7.3
gpgcheck = 0
bash-4.2# cat rhel7.repo
[root@foundation44 data1]# docker create --name vm3 -v /tmp/data1:/data1 -v /tmp/data2:/data2:ro -v /etc/yum.repos.d/yum.repo:/etc/yum.repos.d/yum.repo: rhel7 bash # 这里的目录一定要与自己的真实目录匹配
344b87a5584c3a255e5101bcc3fe9f334191afbe66464638259009765dd70321
[root@foundation44 data1]# docker run -it --name vm4 --volumes-from vm3 rhel7 bash # 数据卷容器
bash-4.2# ls
bin data1 dev home lib64 mnt proc run srv tmp var
boot data2 etc lib media opt root sbin sys usr
bash-4.2# exit
[root@foundation44 data1]# docker run -it --name vm5 -v /tmp/backup rhel7 bash
bash-4.2# cd backup/
bash-4.2# ls
etc.tar
[root@foundation44 data1]# docker network ls
NETWORK ID NAME DRIVER SCOPE
72597cce8a45 bridge bridge local
1683d667c54c host host local
97899ece694c none null local
[root@foundation44 data1]# docker inspect vm2 | grep Pid
"Pid": 12906,
"PidMode": "",
"PidsLimit": 0,
[root@foundation44 data1]# brctl show
[root@foundation44 ~]# docker run --rm -v /tmp/bacpup:/backup ubuntu tar cf /backup/etc.tar /etc #备份数据卷
tar: Removing leading `/' from member names
[root@foundation44 ~]# cd /tmp/bacpup/
[root@foundation44 bacpup]# ls
etc.tar
[root@foundation44 bacpup]# cd /etc/docker/
[root@foundation44 docker]# pwd
/etc/docker
[root@foundation44 docker]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8f40600ade95 nginx "nginx -g 'daemon ..." About an hour ago Up About an hour 80/tcp vm2
[root@foundation44 docker]# docker stop vm2
vm2
5.网络模式:
1.容器的四种网络模式:
bridge 桥接模式、host 模式、container 模式和 none 模式
启动容器时可以使用 --net 参数指定,默认是桥接模式。
2.docker 网络初始化的过程:
[root@foundation44 docker]# brctl show
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 接收,
实现宿主机到 DockerContainer网络的联通性;同时,也保证Docker Container单独
使用eth0,实现容器网 络环境的隔离性。
bridge 桥接模式下的 Docker Container 在使用时,并非为开发者包办了一切。最明
显的是, 该模式下Docker Container不具有一个公有IP,即和宿主机的eth0不处于同一个
网段。导致 的结果是宿主机以外的世界不能直接和容器进行通信。虽然 NAT 模式经过中间
处理实现了 这一点,但是 NAT 模式仍然存在问题与不便,如:容器均需要在宿主机上竞争
端口,容器 内部服务的访问者需要使用服务发现获知服务的外部端口等。另外 NAT 模式由
于是在三层 网络上的实现手段,故肯定会影响网络的传输效率。
Host 网络模式: host 模式是 bridge 桥接模式很好的补充。采用
host 模式的 Docker Container,可以直接使用 宿主机的IP地址与外界进行通信,
若宿主机的eth0是一个公有IP,那么容器也拥有这个公 有IP。同时容器内服务的端口也可以
使用宿主机的端口,无需额外进行 NAT 转换。当然, 有这样的方便,肯定会损失部分其他的
特性,最明显的是Docker Container网络环境隔离性 的弱化,即容器不再拥有隔离、
独立的网络栈。另外,使用host模式的Docker Container虽 然可以让容器内部的服务和
传统情况无差别、无改造的使用,但是由于网络隔离性的弱 化,该容器会与宿主机共享竞争
网络栈的使用;另外,容器内部将不再拥有所有的端口资 源,原因是部分端口资源已经被宿
主机本身的服务占用,还有部分端口已经用以 bridge 网 络模式容器的端口映射。
Container 网络模式:
(1) 查找 other container(即需要被共享网络环境的容器)的网络 namespace;
(2) 将新创建的 Docker Container(也是需要共享其他网络的容器)的 namespace,
使用 othercontainer 的 namespace。 DockerContainer 的 other container
网络模式,可以用来更好的服务于容器间的通信。 在这种模式下的Docker Container
可以通过localhost 来访问 namespace下的其他容器,传输 效率较高。虽然多个容器共享
网络环境,但是多个容器形成的整体依然与宿主机以及其他 容器形成网络隔离。另外,
这种模式还节约了一定数量的网络资源。但是需要注意的是, 它并没有改善容器与宿主机以外世界通信的情况。
None 网络模式:
网络环境为 none,即不为 DockerContainer 任何的网络环境。
一旦 DockerContainer 采用了 none 网络模式,那么容器内部就只能使用 loopback
网络设备,不会再有其他的网络资源。 可以说none模式为DockerContainer做了极少的网络
设定,但是俗话说得好“少即是多”,在 没有网络配置的情况下,作为 Docker 开发者,
才能在这基础做其他无限多可能的网络定制 开发。这也恰巧体现了 Docker 设计理念的开放。
在 none 网络模式下分配固定 ip: netns 是在 linux 中提供网络虚拟化的一个项目,
使用 netns 网络空间虚拟化可以在本地虚拟 化出多个网络环境,目前 netns 在 lxc 容器
中被用来为容器提供网络。 使用 netns 创建的网络空间独立于当前系统的网络空间,其
中的网络设备以及 iptables 规则 等都是独立的,就好像进入了另外一个网络一样。
#
[root@foundation44 Desktop]# docker load -i ubuntu.tar # 导入
454970bd163b: Loading layer 196.8 MB/196.8 MB
38112156678d: Loading layer 208.9 kB/208.9 kB
4e1f7c524148: Loading layer 4.608 kB/4.608 kB
56063ad57855: Loading layer 1.024 kB/1.024 kB
The image ubuntu:latest already exists, renaming the old one with ID sha256:735f80812f90aca43213934fd321a75ef20b2e30948dbbdd2c240e8abaab8a28 to empty string
#1.桥接模式
[root@foundation44 docker]# docker run -it --name vm3 ubuntu # vm3必须不存在
#2.主机模式
[root@foundation44 docker]# docker rm -f vm3
vm3
[root@foundation44 docker]# docker run -it --name vm3 --net host ubuntu
root@foundation44:/# 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:70:e6:e2 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 08:11:96:b9:69:84 brd ff:ff:ff:ff:ff:ff
inet 192.168.43.173/24 brd 192.168.43.255 scope global dynamic wlp3s0
valid_lft 2247sec preferred_lft 2247sec
inet6 fe80::aca2:ae6:e6e0:79c/64 scope link
valid_lft forever preferred_lft forever
4: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 00:21:cc:70:e6:e2 brd ff:ff:ff:ff:ff:ff
inet 172.25.44.250/24 brd 172.25.44.255 scope global br0
valid_lft forever preferred_lft forever
inet 172.25.254.44/24 brd 172.25.254.255 scope global br0
valid_lft forever preferred_lft forever
inet6 fe80::221:ccff:fe70:e6e2/64 scope link
valid_lft forever preferred_lft forever
5: virbr1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
link/ether 52:54:00:7e:8d:6d brd ff:ff:ff:ff:ff:ff
6: virbr1-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr1 state DOWN group default qlen 1000
link/ether 52:54:00:7e:8d:6d brd ff:ff:ff:ff:ff:ff
7: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
link/ether 52:54:00:db:cd:fc brd ff:ff:ff:ff:ff:ff
inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
valid_lft forever preferred_lft forever
8: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN group default qlen 1000
link/ether 52:54:00:db:cd:fc brd ff:ff:ff:ff:ff:ff
9: vnet0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UNKNOWN group default qlen 1000
link/ether fe:54:00:7a:4e:0c brd ff:ff:ff:ff:ff:ff
inet6 fe80::fc54:ff:fe7a:4e0c/64 scope link
valid_lft forever preferred_lft forever
10: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:d3:84:2b:26 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 scope global docker0
valid_lft forever preferred_lft forever
inet6 fe80::42:d3ff:fe84:2b26/64 scope link
valid_lft forever preferred_lft forever
36: veth4a57647@if35: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default
link/ether 9a:0f:23:5c:06:78 brd ff:ff:ff:ff:ff:ff
inet6 fe80::980f:23ff:fe5c:678/64 scope link
valid_lft forever preferred_lft forever
# 3.container模式
[root@foundation44 docker]# docker run -it --name vm4 --net container:vm2 ubuntu
root@8f40600ade95:/# 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
35: eth0@if36: <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 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::42:acff:fe11:2/64 scope link
valid_lft forever preferred_lft forever
[root@foundation44 docker]# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.0021cc70e6e2 no enp0s25
vnet0
docker0 8000.0242d3842b26 no veth4a57647
virbr0 8000.525400dbcdfc yes virbr0-nic
virbr1 8000.5254007e8d6d yes virbr1-nic #4.none模式(重新打开一个shell,进行测试,切记,不能退出去)
[root@foundation44 docker]# docker run -it --name vm3 --net none ubuntu
root@0c5d8ac8edaa:/# ip addr
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
root@0c5d8ac8edaa:/# ip addr add 172.17.0.100/24 dev lo #虽然是root用户,但是不能添加ip
RTNETLINK answers: Operation not permitted
root@0c5d8ac8edaa:/# id
uid=0(root) gid=0(root) groups=0(root)
# 切换shell,查看pid
[root@foundation44 netns]# docker inspect vm3 | grep Pid
"Pid": 19459,
"PidMode": "",
"PidsLimit": 0,
[root@foundation44 bacpup]# cd /proc/19459
[root@foundation44 19459]# 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@foundation44 19459]# pwd
/proc/19459
[root@foundation44 19459]# cd ns/
[root@foundation44 ns]# ls
ipc mnt net pid user uts
[root@foundation44 ns]# ll
total 0
lrwxrwxrwx 1 root root 0 Aug 19 15:27 ipc -> ipc:[4026532521]
lrwxrwxrwx 1 root root 0 Aug 19 15:27 mnt -> mnt:[4026532519]
lrwxrwxrwx 1 root root 0 Aug 19 14:06 net -> net:[4026532524]
lrwxrwxrwx 1 root root 0 Aug 19 15:27 pid -> pid:[4026532522]
lrwxrwxrwx 1 root root 0 Aug 19 15:27 user -> user:[4026531837]
lrwxrwxrwx 1 root root 0 Aug 19 15:27 uts -> uts:[4026532520]
[root@foundation44 ns]# ip netns add test
[root@foundation44 ns]# ip netns list
test
[root@foundation44 19459]# ln -s /proc/19459/ns/net /var/run/netns/19459 #建立软链接
[root@foundation44 19459]# ip netns list # 查看所有的network
19459
[root@foundation44 19459]# cd /var/run/netns/
[root@foundation44 netns]# ip link add name veth0 type veth peer name veth1 #
brctl addif docker0 veth0
[root@foundation44 netns]# ip addr
[root@foundation44 netns]# ip link set up veth0
[root@foundation44 netns]# ip link set up veth1
[root@foundation44 19459]# ip link set veth1 netns 19459 # 添加新设备
[root@foundation44 netns]# ip netns exes 19459 ip link set up veth1 name eth0 #改名字
# 启用一个设备
[root@foundation44 netns]# ip netns exec 19459 ip link set up dev eth0
[root@foundation44 netns]# ip netns exec 19459 ip addr add 172.17.0.100/24 dev eth0 # 为设备设置ip
root@fa16889b8d6c:/# ping 172.17.0.1
PING 172.17.0.1 (172.17.0.1) 56(84) bytes of data.
64 bytes from 172.17.0.1: icmp_seq=1 ttl=64 time=0.080 ms
64 bytes from 172.17.0.1: icmp_seq=2 ttl=64 time=0.096 ms
[root@foundation44 netns]# ip netns exec 19459 ip route add default via 172.17.0.1
root@fa16889b8d6c:/# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 172.17.0.1 0.0.0.0 UG 0 0 0 eth0
172.17.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
root@fa16889b8d6c:/# ping www.baidu.com
PING www.a.shifen.com (183.232.231.173) 56(84) bytes of data.
^C64 bytes from 183.232.231.173: icmp_seq=1 ttl=51 time=64.6 ms
--- www.a.shifen.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 64.650/64.650/64.650/0.000 ms
[root@foundation44 netns]# docker rm -f `docker ps -aq`
fa16889b8d6c
8f40600ade95
04aa86a76c7f
[root@foundation44 netns]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6.端口映射(Docker 的端口映射是由 iptables 来实现的(目的是为了让别人可以访问):
)
[root@foundation44 netns]# docker run -d --name vm1 -p 8080:80 nginx #-p 表示映射
4d6dcee3f86ad51e88064d4e5e1729104d48949c0c8c4e612ed1bc00da514411
[root@foundation44 netns]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4d6dcee3f86a nginx "nginx -g 'daemon ..." 5 seconds ago Up 4 seconds 0.0.0.0:8080->80/tcp vm1
[root@foundation44 netns]# iptables -t nat -nL
target prot opt source destination
RETURN all -- 0.0.0.0/0 0.0.0.0/0
DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:8080 to:172.17.0.2:80
#
#测试,映射成功
7. 容器互联
1. --link 参数可以在不映射端口的前提下为两个容器间建立安全连接
2. --link 参数可以连接一个 或多个容器到将要创建的容器。
3. --link 参数的格式为 --link name:alias,其中 name 是要链接的容器的名称,alias 是这个连接的别名
#
[root@foundation44 netns]# docker run -it --name vm2 --link vm1:nginx ubuntu
root@d85d3a4ef3bc:/# cat /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 4d6dcee3f86a vm1
172.17.0.3 d85d3a4ef3bc
root@d85d3a4ef3bc:/# 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.084 ms
64 bytes from nginx (172.17.0.2): icmp_seq=2 ttl=64 time=0.058 ms
--- nginx ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.058/0.071/0.084/0.013 ms
[root@foundation44 netns]# cd /tmp/docker/
[root@foundation44 docker]# vim Dockerfile
[root@foundation44 docker]# vim dvd.repo
[root@foundation44 docker]# docker build -t rhel7:v1 .
[root@foundation44 docker]# docker images rhel7
[root@foundation44 docker]# docker run -d --name vm3 -v /tmp/docker/web:/var/www/html rhel7:v1
8c0e45e1392b496e952d5fcd844fa265cdb6806f04ba90235815f62e5730365a
[root@foundation44 docker]# docker inspect vm3
#浏览器访问测试
8.创建镜像(Dockerfile自启动ssh服务)
[root@foundation44 docker]# mkdir ssh
[root@foundation44 docker]# cp dvd.repo ssh/
[root@foundation44 docker]# cd ssh/
[root@foundation44 ssh]# vim Dockerfile
[root@foundation44 ssh]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a633c69566db rhel7:v5 "/usr/sbin/sshd -D" 16 seconds ago Up 14 seconds 22/tcp vm3
50df02068cbd ubuntu "/bin/bash" 11 minutes ago Up 11 minutes vm1
4d6dcee3f86a nginx "nginx -g 'daemon ..." 36 minutes ago Up 36 minutes 0.0.0.0:8080->80/tcp vm1
[root@foundation44 ssh]# docker build -t rhel7:v2 cd /tmp/docker/ssh
[root@foundation44 ssh]# docker run -d --name vm3 rhel7:v1 #如果连不上
[root@foundation44 ssh]# ssh [email protected]
The authenticity of host '172.17.0.3 (172.17.0.3)' can't be established.
ECDSA key fingerprint is e4:e3:67:99:61:3e:8f:8c:fb:83:1c:e5:20:a2:4b:e0.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '172.17.0.3' (ECDSA) to the list of known hosts.
[email protected]'s password: #用自己设置的密码登陆
-bash-4.2# # 连接成功