docker第二篇:docker compose

compose是编排的意思。为什么需要docker compose呢?

docker-compose命令要在docker-compose.yml文件所在目录中执行,否则会报错。

docker-compose.yml中内容:

network_mode:可选值有bridge、host、none、service:[service name]、container:[container name/id]

bridge模式下,

host模式下,docker不会为容器创建单独的network namespace,而是共享宿主机的network namespace,在容器中执行ifconfig和在宿主机上执行ifconfig,结果是一样的,且宿主机占用的端口和容器内应用占用的端口一致。假如容器内应用占用10000端口,则访问http://宿主机IP:10000,就可以访问到容器内的应用了。就好像把容器内应用暴露到宿主机中了。在宿主机上用netstat命令查出PID,用ps命令查看此PID,和在容器中用netstat命令查出PID,用ps命令查看此PID的结果是一样的,都可以看出来容器内应用的启动命令是什么。有3个注意点,1、此时ports是不生效的,可以不设置ports,设置了也不生效。如果是docker run命令起来的话,同时指定-p xx:yy --network=host,会提示WARNING: Published ports are discarded when using host network mode的。2、因为占用了宿主机的端口,所以只能创建一个容器,再起一个容器,如果不改变容器内应用占用的端口的话,就起不来,启动会报address already in use。3、用docker ps或者docker-compose ps查看时,PORTS列值是空的,没有数据。

none模式下,

如果不指定network_mode的话,如果用docker-compose up在前端启动,则可以看到会输出Creating network "xxx_default" with the default driver这样的日志。这个时候,在宿主机执行ifconfig命令,可以看到,

在宿主机安装docker的命令补全工具bash-completion。

原文地址:https://www.cnblogs.com/koushr/p/12938861.html