1.1 介绍

ports、expose、links、depends_on几个docker-compose的功能的作用和使用技巧教给大家。

这几个功能的作用相互之间有交集,网上很多教程写的都不对,非常容易误导人~~

大家可以跟着福哥把这几个功能是干什么的?怎么使用?等等问题彻彻底底的弄清楚!

2. ports和expose的区别

简单说就是ports用来把服务端口映射给宿主机,可以访问宿主机IP地址的人都可以访问ports映射出来的端口。

而expose用来把服务端口开放给其他服务,客户端服务可以通过links功能访问服务端服务的端口。

3. Dockerfile的EXPOSE和docker-compose的expose的区别

其实这俩个是一回事儿!

如果Dockerfile里面通过EXPOSE暴露了端口出来,那么在通过docker-compose创建的服务也会暴露这个端口出来。

如果Dockerfile里面没有暴露端口出来,可以在后面通过docker-compose的expose把服务的端口暴露出来。

4. ports

4.1 映射到端口

使用下面的参数可以将服务的80端口映射宿主机的8080端口(也可以是其他端口)。

services:

  nginx:
    image: tflinux_nginx1.20
    ports:
      - 8080:80

4.2 映射到地址

使用下面的参数可以将服务的80端口映射到宿主机的10.16.1.1的8080端口(也可以是其他端口)。

services:

  nginx:
    image: tflinux_nginx1.20
    ports:
      - 10.16.1.1:8080:80

4.3 随机映射

使用下面的参数可以将服务的80端口映射到宿主机的一个随机的端口上。

services:

  nginx:
    image: tflinux_nginx1.20
    ports:
      - 80

5. expose

expose主要就是把服务的端口映射出来给其他服务使用的。

注意:如果服务的镜像本身已经通过EXPOSE暴露端口了,这里就可以省略通过expose再暴露一遍了。

services:

  nginx:
    image: tflinux_nginx1.20
    expose:
      - 80

6. links

links的目的是把一个服务的名称在当前服务里面创建一个别名,例如:持久化服务的名称和当前服务的配置文件里面写的不一样,就可以通过这个links改成一样的。

6.1 application.properties

sql.mysql.jdbc-url=jdbc:mysql://server_mysql:3306/tfums?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&tinyInt1isBit=false&serverTimezone=UTC&autoReconnect=true&useSSL=false
sql.mysql.username=root
sql.mysql.password=abcdef
sql.mysql.driverClassName=com.mysql.cj.jdbc.Driver

6.2 docker-compose.yml

services:

  tomcat:
    image: tflinux_tomcat9.0
    links:
      - mysql:server_mysql

7. depends_on

通过depends_on告诉docker-compose当前服务启动之前先要把depends_on指定的服务启动起来才行。例如:kafka依赖zookeeper,nginx依赖php-fpm等等。

services:

  kafka:
    image: tflinux_kafka
    depends_on:
      - zookeeper

  php-nginx:
    image: tflinux_php-nginx
    depends_on:
      - php-fpm

8. 实践

8.1 maintain

福网在TFLinux上面搭建了一个maintain服务,这个服务用来通过终端方式连接MySQL、MongoDB、Redis、Elasticsearch等等持久化服务,可以进行维护性的调试。

8.2 docker-compose.yml

福哥通过links把MySQL、Redis、MongoDB、Elasticsearch四个服务建立了一套别名。

然后福哥又通过depends_on指定maintain服务依赖这四个服务。

services:

  maintain:
    build:
      dockerfile: Dockerfile
      context: ./image/nginx1.20
    container_name: maintain
    image: nginx1.20
    links:
      - mysql:server_mysql
      - redis:server_redis
      - mongo:server_mongo
      - elasticsearch:server_es
    depends_on:
      - mysql
      - redis
      - mongo
      - elasticsearch

8.3 测试

更新docker-compose后,通过maintain容器名称切入到容器里面,测试四个服务的端口。

都可以正常连接,没有问题!

9. 总结

docker-compose的ports、expose、links、depends_on几个功能的作用给大家讲解了一下,然后又通过实例maintain服务给童鞋们演示了如何利用这几个功能实现服务端口的授权的目的。

GitHub 加速计划 / compose / compose
33.26 K
5.15 K
下载
compose - Docker Compose是一个用于定义和运行多容器Docker应用程序的工具,通过Compose文件格式简化应用部署过程。
最近提交(Master分支:1 个月前 )
73d3a25e Signed-off-by: Suleiman Dibirov <idsulik@gmail.com> 27 天前
3524bcfa Signed-off-by: Suleiman Dibirov <idsulik@gmail.com> 27 天前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐