出版圈郭志敏 2018-03-22
2013 年由 DotCloud 公司开源出来的容器管理工具
DotCloud 公司是一家 PAAS 服务提供商,从 docker 的出身也可以看出它的主要功能和方向
开始时是基于 LXC 容器技术
详细信息可以参照:http://www.cnblogs.com/wang_yb/p/3923040.html
docker 容器是完全隔离的运行环境,但实际使用中,难免需要和外部或者 docker 容器进行交互。
比较常用的交互主要有 环境变量,磁盘,网络
docker run -it --rm -e MY_NAME=wangyubin busybox env
外部的环境变量可以在容器启动的时候注入到容器中
容器会共享镜像中的内容,容器自己的状态才会保存在磁盘上。
docker volume ls # 查看所有容器占用的磁盘名称 docker volume inspect VOL_NAME # 查看具体的磁盘信息
在一个容器中创建文件(test.txt)
$ docker run -it --rm busybox / # touch test.txt / # ls bin etc proc sys tmp var dev home root test.txt usr
重新启动的容器中是不包含这个文件的
$ docker run -it --rm busybox / # ls bin dev etc home proc root sys tmp usr var
如果希望容器之间共享文件,或者将文件放在容器之外来管理,可采用如下方式 容器启动时挂载外部文件夹
docker run -it --rm -v /home/wangyubin/tmp/volume:/share-dir busybox cd share-dir touch test.txt
另一个容器也挂载这个文件夹
docker run -it --rm -v /home/wangyubin/tmp/volume:/share-dir busybox / # ls share-dir test.txt
容器中的服务默认只有当前容器可以访问,容器的宿主和其他容器都是无法访问的。
通过 nc 命令模拟一个服务
$ docker run -it -p 1234:1234 --rm busybox / # nc -l -p 1234
在宿主机上可以通过 docker ps 命令看到暴露的端口
docker ps nc localhost 1234 # 连接上本地的 1234 端口,就可以和 docker 容器互发消息
创建容器运行的网络,然后将 2 个容器启动到同一个网络上
$ docker network create test a85b5589234b701b1237a364f7796b47e2d1ba4506740767c581a3d62d9e8f48 $ docker network ls NETWORK ID NAME DRIVER SCOPE a85b5589234b test bridge local ... ...
启动第一个 docker,name 为 test01,并在容器中用 nc 命令模拟一个服务
$ docker run -it --rm --name test01 --network test busybox / # nc -l -p 1234
启动第二个 docker,name 为 test02,和 test01 在同一个网络上
$ docker run -it --rm --name test02 --network test busybox / # nc test01 1234 hello
由于在同一个网络上,可以通过 test01 这个名称直接连接另一个容器
启动第三个 docker,name 为 test03,使用默认的网络
$ docker run -it --rm --name test03 busybox / # nc test01 1234 nc: bad address 'test01'
由于 test03 和 test01 不在一个网络上,所以无法互通