一、我们怎么更方便的进去已经start的容器呢?
nsenter:可以通过这个命令进去docker的images里
首先获取一个容器的id:
docker inspect --format " ``.`State`.`Pid`" centos_with_nettools 获取一个id
10592
<a href="http://s3.51cto.com/wyfs02/M02/88/87/wKioL1f7MrWTIklOAAAM17doeFY415.png-wh_500x0-wm_3-wmp_4-s_3472879000.png" target="_blank"></a>
nsenter --target 10592 --mount --yts --ipc --net
<a href="http://s3.51cto.com/wyfs02/M01/88/87/wKioL1f7M06yfJqqAAAKWYZpiRU430.png-wh_500x0-wm_3-wmp_4-s_606943617.png" target="_blank"></a>
这样就进去了,当然这样很麻烦,所以可以写一个脚本:
cat in.sh
CNAME=$1
CPID=$(docker inspect --format " ``.`State`.`Pid`" $CNAME)
nsenter --target $CPID --mount --uts --ipc --net
设置权限:
chmod +x in.sh
使用:./in.sh centos_with_nettools
二、查看docker网络
brctl show
查看docker的网桥
<a href="http://s5.51cto.com/wyfs02/M00/88/8B/wKiom1f7NGmy_OClAAASSnrdxsU553.png-wh_500x0-wm_3-wmp_4-s_258254966.png" target="_blank"></a>
iptables -t nat -L -n
<a href="http://s4.51cto.com/wyfs02/M00/88/87/wKioL1f7NLvSbFDpAAA4UQEy1V4461.png-wh_500x0-wm_3-wmp_4-s_2288764409.png" target="_blank"></a>
三、容器创建好了,怎么对外提供服务呢?
容器都是独立的,资源隔离的,一个容器最常见的是只跑一个服务,但凡服务都都是有端口的,那么我们就要把容器内的端口映射到本机的端口上,然后对外提供服务
第一种:随机映射
docker run -P -d --name nginx1 nginx
第二种:指定映射
docker run -d -p 91:80 --name nginx2 nginx
四、数据卷
什么是数据卷?
当然是存放数据的,那么我们用来做什么?打个比方,一个网站后端不可能只有一台服务器,那么多台服务器怎么保证一些需要的数据一致呢?这里就要用到数据卷了,一个容器只用来保存数据,其他后台服务器都到这个容器里取数据,这样就可以保证数据一致性了。
先创建一个容器:
docker run -it --name volume-test1 -h nginx -v /data nginx
docker ps -l查看一下:
<a href="http://s3.51cto.com/wyfs02/M00/88/87/wKioL1f7NzqAAYf7AAAZ8yP6mk8252.png-wh_500x0-wm_3-wmp_4-s_3579008631.png" target="_blank"></a>
docker inspect -f "``.`Volumes`" volume-test1查看卷:
<a href="http://s3.51cto.com/wyfs02/M01/88/8B/wKiom1f7N1-Cx26MAAAWxwklSKg028.png-wh_500x0-wm_3-wmp_4-s_499824730.png" target="_blank"></a>
<a href="http://s2.51cto.com/wyfs02/M01/88/87/wKioL1f7N2ihhLKgAAAv-aghLFk784.png-wh_500x0-wm_3-wmp_4-s_3658928441.png" target="_blank"></a>
挂载:
docker run -it --name volume-test2 -h nginx1 -v /opt:/opt centos
注意:/opt后面不能有/号
docker run -it --name volume-test2 -h nginx1 -v /opt:/opt:ro centos
ro:表示在容器里不能写
这时创建新容器时就可以指定了
新建容器,数据卷从volume-test1上取
docker run -it --name volume-test34 --volumes-from volume-test1 centos
本文转自 sykmiao 51CTO博客,原文链接:http://blog.51cto.com/syklinux/1860219,如需转载请自行联系原作者