docker-compose network 名称定义,docker-compose 加入已经存在的网络
docker-compose 启动的网络名称:
1、没有自定义网络名
-
$ cat docker-compose.yaml
-
version: '2'
-
-
services:
-
zookeeper1:
-
image: zookeeper
-
container_name: zookeeper1
-
environment:
-
- ZOO_MY_ID=1
-
- ZOO_SERVERS=server.1=zookeeper1:2888:3888
实际使用的网络是:<当前路径名_default>,如果 < 当前路径名 > 太长,会截取前缀部分。
例如当然目录名为 testdocker,那么最终生产的网络名为:testdocker_default
-
$ docker network ls
-
abf87f64de25 testdocker_default bridge local
2、定义后缀
-
$ cat docker-compose.yaml
-
version: '2'
-
networks:
-
byfn:
-
-
services:
-
zookeeper1:
-
image: zookeeper
-
container_name: zookeeper1
-
environment:
-
- ZOO_MY_ID=1
-
- ZOO_SERVERS=server.1=zookeeper1:2888:3888
-
networks:
-
- byfn
定义网络名为 byfn,那么最终生产的网络名为:<当前路径名_byfn>。
相对于之前没有定义的时候,把 default 替换成了定义的网络名,同样还是使用路径名作为前缀。
-
$ docker network ls
-
abf87f64de25 testdocker_byfn bridge local
3、定义前缀
当然使用路径名作为网络名是很不友好的,docker-compose 使用环境变量来取代路径名。
设置环境变量:COMPOSE_PROJECT_NAME
-
$ cat .env
-
COMPOSE_PROJECT_NAME=aaa
这时网络名如下:
-
$ docker network ls
-
967ef0d41dd6 aaa_byfn bridge local
所以,docker-compose 的网络名的规则是:<COMPOSE_PROJECT_NAME>_<NETWORKS>
1、如果 NETWORKS 没有定义,那么就是 default。
2、如果 COMPOSE_PROJECT_NAME,那么就是当前路径名 (取前缀)。
查看已存在的网络
docker network ls
在需要加入同一局域网的容器 .yml 或 yaml 文件中添加下面的代码:
networks:
default:
external:
name: NetworkName
在高版本的 compose 中会提示:WARN[0000] network default: network.external.name is deprecated. Please set network.name with external: true
意思是上述方式已经弃用,应使用下述方式
networks:
default:
external: true
name: mq-cluster-test
https://docs.docker.com/reference/dockerfile/#environment-replacement
${variable:-word}
表示如果设置了variable
,则结果将是该值。如果variable
未设置,则结果为word
。${variable:+word}
表示如果设置了variable
,则结果为word
,否则结果为空字符串。
官方说明:https://docs.docker.com/engine/reference/builder/
保留字 | 作用 |
---|---|
FROM | 当前镜像是基于哪个镜像的 第一个指令必须是FROM |
MAINTAINER | 镜像维护者的姓名和邮箱地址 |
RUN | 构建镜像时需要运行的指令 |
EXPOSE | 当前容器对外暴露出的端口号 |
WORKDIR | 指定在创建容器后,终端默认登录进来的工作目录,一个落脚点 |
ENV | 用来在构建镜像过程中设置环境变量 |
ADD | 将宿主机目录下的文件拷贝进镜像且 ADD 命令会自动处理 URL 和解压 tar 包 |
COPY | 类似于 ADD,拷贝文件和目录到镜像中 将从构建上下文目录中 <原路径> 的文件 / 目录复制到新的一层的镜像内的 < 目标路径 > 位置 |
VOLUME | 容器数据卷,用于数据保存和持久化工作 |
CMD | 指定一个容器启动时要运行的命令 Dockerfile 中可以有多个 CMD 指令,但只有最后一个生效,CMD 会被 docker |
ENTRYPOINT | 指定一个容器启动时要运行的命令 ENTRYPOINT 的目的和 CMD 一样,都是在指定容器启动程序及其参数 |
摘抄自网络,便于检索查找。