Docker之搭建2048遊戲,四種網路模式的學習,容器和管理,資料卷的管理,用Dockerfile建立映象
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
[[email protected] Desktop]# mkdir /var/www/html/images
[[email protected] Desktop]# mv game2048.tar /var/www/html/images
[[email protected] Desktop]# cd /var/www/html/images
[ [email protected] 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
[ [email protected] images]# docker run -d --name vm1 game2048 # 後臺執行,-d 打入後臺,--name 起名字3
04aa86a76c7f6d78e7606bf2bd1e5f0a50bc145d646d7a3c9ac96ada2db99804
[[email protected] images]# ifconfig docker # 檢視docker的ip,這個是內部ip,只有自己可以看見
[[email protected] images]# docker inspect vm1 # 檢視映象詳情
[[email protected] images]# docker inspect vm1
[[email protected] images]# route -n #檢視閘道器
# game2048部署成功
2.docker的技術指令
[[email protected] 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 # 檢視本地映象
容器停掉之後,內部的所有資源都會被釋放,可以重新分配
# 這兩個命令都可以控制容器的開啟與關閉
[[email protected] images]# docker container stop vm1
vm1
[[email protected] images]# docker start vm1
vm1
[[email protected] images]# docker history game2048 #檢視歷史操作
3.映象倉庫
[[email protected] ~]# cd /etc/docker/
[[email protected] docker]# ls
key.json
[[email protected] docker]# vim daemon.json #這個是自己註冊得到的網址,屬於私有的
{
"registry-mirrors": ["https://6zfq2ttt.mirror.aliyuncs.com"]
}
[[email protected] docker]# systemctl daemon-reload
[[email protected] docker]# systemctl restart docker
[[email protected] 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
[[email protected] docker]# docker images nginx
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest c82521676580 3 weeks ago 109 MB
[[email protected] docker]# cd
[[email protected] ~]# docker run -d --name vm2 nginx
7c56d4998bd147387e4f8891ee595e237676f978bf77ea2357bce2728b0bfd52
[[email protected] ~]# docker inspect vm2 # 檢視vm2的ip
[[email protected] ~]# vim index.html # 編寫釋出目錄內容
www.westos.org
[[email protected] ~]# docker cp index.html vm2:/usr/share/nginx/html # 複製到預設釋出目錄下,也可以直接進行訪問,這樣做只是為了讓出測試效果更明顯
# 用 vm2 的 ipaddress 進行網頁測試:
[[email protected] ~]# docker rm -f vm2
vm2
[[email protected] ~]# cd /tmp/
[[email protected] tmp]# mkdir docker/
[[email protected] tmp]# cd docker/
[[email protected] docker]# mkdir web/
[[email protected] docker]# cd web/
[[email protected] ~]# docker run -d --name vm2 -v /tmp/docker/web:/usr/share/nginx/html nginx #掛載,應用起來更方便
04564fd35c83334418e1e0e0900814509cddda16f9e81266f2e1fe42e82f155d
[[email protected] ~]# mv index.html /tmp/docker/web/
[[email protected] ~]# cd /tmp/docker/web/
[[email protected] web]# ls #通過修改此釋出目錄控制輸出內容
index.html
[[email protected] 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.資料卷的掛載
[[email protected] images]# ls
game2048.tar nginx.tar rhel7.tar
[[email protected] images]# docker load -i rhel7.tar # 匯入映象
[[email protected] 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
[[email protected] 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
[[email protected] 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
[[email protected] data1]# docker run -it --name vm5 -v /tmp/backup rhel7 bash
bash-4.2# cd backup/
bash-4.2# ls
etc.tar
[[email protected] data1]# docker network ls
NETWORK ID NAME DRIVER SCOPE
72597cce8a45 bridge bridge local
1683d667c54c host host local
97899ece694c none null local
[[email protected] data1]# docker inspect vm2 | grep Pid
"Pid": 12906,
"PidMode": "",
"PidsLimit": 0,
[[email protected] data1]# brctl show
[[email protected] ~]# docker run --rm -v /tmp/bacpup:/backup ubuntu tar cf /backup/etc.tar /etc #備份資料卷
tar: Removing leading `/' from member names
[[email protected] ~]# cd /tmp/bacpup/
[[email protected] bacpup]# ls
etc.tar
[[email protected] bacpup]# cd /etc/docker/
[[email protected] docker]# pwd
/etc/docker
[[email protected] 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
[[email protected] docker]# docker stop vm2
vm2
5.網路模式:
1.容器的四種網路模式:
bridge 橋接模式、host 模式、container 模式和 none 模式
啟動容器時可以使用 --net 引數指定,預設是橋接模式。
2.docker 網路初始化的過程:
[[email protected] 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 規則 等都是獨立的,就好像進入了另外一個網路一樣。
#
[[email protected] 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.橋接模式
[[email protected] docker]# docker run -it --name vm3 ubuntu # vm3必須不存在
#2.主機模式
[[email protected] docker]# docker rm -f vm3
vm3
[[email protected] docker]# docker run -it --name vm3 --net host ubuntu
[email protected]:/# 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: [email protected]: <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模式
[[email protected] docker]# docker run -it --name vm4 --net container:vm2 ubuntu
[email protected]:/# 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: [email protected]: <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
[[email protected] 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,進行測試,切記,不能退出去)
[[email protected] docker]# docker run -it --name vm3 --net none ubuntu
[email protected]:/# 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
[email protected]:/# ip addr add 172.17.0.100/24 dev lo #雖然是root使用者,但是不能新增ip
RTNETLINK answers: Operation not permitted
[email protected]:/# id
uid=0(root) gid=0(root) groups=0(root)
# 切換shell,檢視pid
[[email protected] netns]# docker inspect vm3 | grep Pid
"Pid": 19459,
"PidMode": "",
"PidsLimit": 0,
[[email protected] bacpup]# cd /proc/19459
[[email protected] 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
[[email protected] 19459]# pwd
/proc/19459
[[email protected] 19459]# cd ns/
[[email protected] ns]# ls
ipc mnt net pid user uts
[[email protected] 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]
[[email protected] ns]# ip netns add test
[[email protected] ns]# ip netns list
test
[[email protected] 19459]# ln -s /proc/19459/ns/net /var/run/netns/19459 #建立軟連結
[[email protected] 19459]# ip netns list # 檢視所有的network
19459
[[email protected] 19459]# cd /var/run/netns/
[[email protected] netns]# ip link add name veth0 type veth peer name veth1 #
brctl addif docker0 veth0
[[email protected] netns]# ip addr
[[email protected] netns]# ip link set up veth0
[[email protected] netns]# ip link set up veth1
[[email protected] 19459]# ip link set veth1 netns 19459 # 新增新裝置
[[email protected] netns]# ip netns exes 19459 ip link set up veth1 name eth0 #改名字
# 啟用一個裝置
[[email protected] netns]# ip netns exec 19459 ip link set up dev eth0
[[email protected] netns]# ip netns exec 19459 ip addr add 172.17.0.100/24 dev eth0 # 為裝置設定ip
[email protected]:/# 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
[[email protected] netns]# ip netns exec 19459 ip route add default via 172.17.0.1
[email protected]:/# 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
[email protected]:/# 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
[[email protected] netns]# docker rm -f `docker ps -aq`
fa16889b8d6c
8f40600ade95
04aa86a76c7f
[[email protected] netns]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6.埠對映(Docker 的埠對映是由 iptables 來實現的(目的是為了讓別人可以訪問):
)
[[email protected] netns]# docker run -d --name vm1 -p 8080:80 nginx #-p 表示對映
4d6dcee3f86ad51e88064d4e5e1729104d48949c0c8c4e612ed1bc00da514411
[[email protected] 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
[[email protected] 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 是這個連線的別名
#
[[email protected] netns]# docker run -it --name vm2 --link vm1:nginx ubuntu
[email protected]:/# 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
[email protected]:/# 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
[[email protected] netns]# cd /tmp/docker/
[[email protected] docker]# vim Dockerfile
[[email protected] docker]# vim dvd.repo
[[email protected] docker]# docker build -t rhel7:v1 .
[[email protected] docker]# docker images rhel7
[[email protected] docker]# docker run -d --name vm3 -v /tmp/docker/web:/var/www/html rhel7:v1
8c0e45e1392b496e952d5fcd844fa265cdb6806f04ba90235815f62e5730365a
[[email protected] docker]# docker inspect vm3
#瀏覽器訪問測試
8.建立映象(Dockerfile自啟動ssh服務)
[[email protected] docker]# mkdir ssh
[[email protected] docker]# cp dvd.repo ssh/
[[email protected] docker]# cd ssh/
[[email protected] ssh]# vim Dockerfile
[[email protected] 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
[[email protected] ssh]# docker build -t rhel7:v2 cd /tmp/docker/ssh
[[email protected] ssh]# docker run -d --name vm3 rhel7:v1 #如果連不上
[[email protected] 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# # 連線成功
相關推薦
Docker之搭建2048遊戲,四種網路模式的學習,容器和管理,資料卷的管理,用Dockerfile建立映象
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 [
Docker學習筆記之容器的四種網路模式
首先從映象庫pull一個rhel7的映象下來,這些東西你得玩,光看沒意思。 本人pull了前兩個映象進行測試,如果連線失敗可以多試幾次,連上之後速度不算很差 docker pull richxsl/rhel7 docker pull bluedata/r
docker四種網路模式區別
1.host模式 host表示容器共享宿主機的ip和埠號。容器中不會虛擬自己的網絡卡和ip,當你檢視容器ip的時候,其實是宿主機的ip。 如:建立nginx容器 docker run -tid --net=host --name nginx nginx:1.13.12 你訪問主機的htt
Docker網路管理(容器的四種網路模式)
下面,我們來學習Docker的網路管理。 Docker 在啟動時會建立一個虛擬網橋 docker0,預設地址為 172.17.0.1/16,容器啟動後都會被橋接到 docker0 上,並自動分配到一個 IP 地址 . docker0預設地址 網橋 容器橋接
Docker(十四)-Docker四種網路模式
Docker 安裝時會自動在 host 上建立三個網路,我們可用 docker network ls 命令檢視: none模式,使用--net=none指定,該模式關閉了容器的網路功能。 host模式,使用--net=host指定,容器將不會虛擬出自己的網絡卡,配置自己的I
Docker的四種網路模式
docker run建立Docker容器時,可以用–net選項指定容器的網路模式,Docker有以下4種網路模式: bridge模式:使用–net =bridge指定,預設設定; host模式:使用–net =host指定; non
kvm虛擬機器的四種網路模式
引言 橋接模式 NAT模式 路由模式 隔離模式 預設配置 1. 引言 Libvirt虛擬網路使用虛擬網路交換機的概念。虛擬網路交換機是在主機物理機器伺服器上執行的軟體結構,虛擬機器(客戶機)通過它連線到該物理主機伺服器。客戶機的網路流量通過這
VirtualBox四種網路模式及典型配置
1.VirtualBox四種網路選型原則 第一:每個網路只負載一種業務型別的資料流量,功能單一化。例如連線外網用一個網路、虛擬機器之間互通用一個網路、虛擬機器與主機之間互通又是一個網路。這樣的話可使每種網路上的資料流量比較純淨,同時也可以避免因為網路故障而影響到
初學安卓開發隨筆之 Menu、toast 用法、活動的四種啟動模式 以及 一個方便的Base活動類使用方法
pro 一點 cte edi standard oid nal xtend 解釋 Toast toast 是安卓系統的一種非常棒的提醒方式 首先定義一個彈出Toast的觸發點,比如可以是按鈕之類 其中 Toast.LENGTH_SHORT是指顯示時長 還有一個內置變量為To
thinkphp3.2筆記(2)調試模式,配置項C,創建模塊, 四種URL模式
data 控制器 idt 默認 模式 com index.php 訪問 alt 一、調試模式 TP的調試模式其實就控制了TP關於配置信息以及函數的緩存功能 如果開啟了調試模式,每次訪問項目,Tp都會去加載最新的配置以及函數信息。 如果關閉了調試模式,當tp第一次訪問時會降配
安卓基礎之Activity的四種啟動模式
Activity的四種啟動模式 Activity的啟動模式在清單檔案中配置: <activity ... activity:lauchMode:"..."; //有四種模式選擇,如不設定,預設為standard模式 1、standard :標準的啟動模式 系統的預設模式,一次跳轉即會
Docker之搭建Go Web服務~~
需求 最近在學習Go語言開發。既然學習了它,必然要接觸Web開發。Go Web開發非常方便,在不使用任何框架的情況下即可快速搭建一個Web Server。既然有現成的框架,那就直接使用吧。 目前市面上比較流行的Go MVC框架有Revel、BeeGo等。最近正好學習了這兩個框架,Reve
logging日誌模組,四種方式
1.最簡單的用法 import logging logging.error("hah") logging.info("hah") logging.debug("hah") logging.warning("hah") logging.critical("hah") info,debug並不會顯示
微信聊天記錄怎麼恢復,四種恢復方法等你學
微信聊天記錄怎麼恢復?在如今的網路時代,微信已經滲透到我們現實生活當中,在微信中也有很多聊天記錄也不僅僅是情感象徵了,在我們不開心時還能開啟聊天記錄去看看以前的聊天美好時刻,也會有很多比較重要的資訊留存在聊天記錄裡面,那麼如果這些聊天記錄刪除了該怎麼該怎麼辦呢?
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 l
docker之搭建wordpress實戰
docker的初識,docker compose+mysql+wordpress舉例應用 docker優勢 相對於傳統的devops開發,從以下幾個問題我們對比,發現dcoker的獨特 有沒有在安裝一個linux系統下安裝一個程式很頭疼,比如mysql版本不
Java之DOM,SAX,JDOM,DOM4J,四種解析xml方法比較
4種解析方式的比較 1.DOM解析 優點:a.形成了樹結構,直觀好理解,程式碼更易編寫 b.解析過程中樹結構保留在記憶體中,方便修改缺點: a.當xml檔案較大時,對記憶體耗費比較大,容易影響解析效能並且造成記憶體溢位 2.SAX解析優點:
RabbitMQ 使用之 四種交換機模式
一、整合RabbitMQ . 新增依賴 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-b
Android基礎之Activity四種啟動模式和task相關
1 啟動模式介紹 啟動模式簡單地說就是Activity啟動時的策略,在AndroidManifest.xml中的標籤的android:launchMode屬性設定; 啟動模式有4種,分別為standard、singleTop、singleTask、singleI
交換兩個變數的值,不借助第三個變數的四種方法(學習)
缺點:是隻能用於數字型別,字串之類的就不可以了。a+b有可能溢位(超出int的範圍),溢位是相對的, +了溢位了,-回來不就好了,所以溢位不溢位沒關係,就是不安全。2) 指標地址操作 因為對地址的操作實際上進行的是整數運算,比如:兩個地址相減得到一個整數,表示兩個變數在記憶體中的儲存位置隔了