当前位置:首页 > 技术分析 > 正文内容

使用Docker创建多docker-compose互通网络通用Mysql服务

ruisui882周前 (04-15)技术分析19

本文将介绍如何使用Docker创建多docker-compose互通网络服务。我们将会讨论如何创建一个公共的Mysql数据库,然后再创建一个服务来连接我们的公用本地Mysql数据库。同时,我们还会解决如何处理那些在docker-compose上将数据库一起写的服务,以及如何在docker-compose上运行能共用数据的服务。

简介

Docker Compose是一个用于定义和运行多个容器应用程序的工具。使用Docker Compose可以轻松地运行多个容器,并可以创建一个公共网络来让这些容器之间互相通信。在这篇文章中,我们将会使用Docker Compose来创建一个公共网络,并将我们的服务加入到这个网络中,以便它们之间可以互相通信。

创建公共网络mysql

我们首先需要创建一个公共的网络mysql。我们可以使用以下命令来创建一个名为mysql的网络:

docker network create mysql

创建完成后,我们可以使用以下命令来查看创建的网络:

docker network ls

docker-compose运行公共mysql服务

现在我们已经创建了一个名为mysql的公共网络,接下来我们将使用docker-compose来运行一个Mysql服务,并将它添加到这个网络中。

在你的项目文件夹下,创建一个名为docker-compose.yml的文件,并将以下代码添加到文件中:

version: '3.8'
services:
  mysql8:
    container_name: mysql8
    image: mysql:8
    #restart: always 本地运行就不需要自启了
    command: --default-authentication-plugin=mysql_native_password
    ports:
      - "3306:3306"
    environment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: chengzz
    hostname: mysql8
    volumes:
      - "~/Docker/mysql8/data:/var/lib/mysql"
      - "~/Docker/mysql8/my.cnf:/etc/mysql/conf.d/my.cnf"
    networks:
      - mysql
networks:
  mysql:
    external: true
# 自己手动创建公共网络mysql
# docker network create mysql

该代码指定了我们要创建的服务为mysql8,它使用最新的Mysql8镜像,并设置了Mysql的root密码。我们还将服务添加到了名为mysql的公共网络中。

接下来,我们可以使用以下命令来启动服务:

docker-compose up -d

docker-compose运行我们的服务如wordpress

现在我们已经创建了一个公共的Mysql服务,并将它添加到了mysql网络中,我们可以使用docker-compose来运行我们的服务,例如WordPress。

在你的项目文件夹下,创建一个名为docker-compose.yml的文件,并将以下代码添加到文件中:

version: '3.8'
services:
  wordpress:
    container_name: chengzz
    image: wordpress:latest
    ports:
      - "80:80"
    volumes:
      - ~/Docker/wordpress/html:/var/www/html
    environment:
      WORDPRESS_DB_HOST: mysql8:3306
      WORDPRESS_DB_USER: root
      WORDPRESS_DB_PASSWORD: chengzz
      WORDPRESS_DB_NAME: chengzz
    # 连接mysql网络
    networks:
      - mysql
networks:
  mysql:
    external: true

其中,我们指定了wordpress服务所使用的镜像为wordpress,同时将其暴露在80端口,并指定其依赖于db服务,这样我们才能保证在wordpress服务启动前db服务已经启动。

然后我们在db服务中添加了WORDPRESS_DB_HOST、WORDPRESS_DB_USER、WORDPRESS_DB_PASSWORD和WORDPRESS_DB_NAME等环境变量,以及将数据映射到容器中的/var/www/html目录,用于持久化wordpress的数据。同时,我们也将服务加入到了mysql网络中

最后,在文件的末尾,我们定义了mysql网络,并指定它的外部名称为mysql,这样我们的服务才能正确地连接到该网络。

完成后,我们可以使用以下命令在后台启动wordpress服务:

docker-compose up -d

启动后,我们可以在浏览器中访问 http://localhost:80来访问wordpress站点,它已经连接到了公共mysql服务。

这样,我们就成功地创建了一个公共网络mysql,并将我们的服务,如wordpress,连接到该网络中,实现了多docker-compose互通网络服务。

总结

在本文中,我们介绍了如何使用Docker创建多docker-compose互通网络服务。首先,我们创建了一个公共网络mysql,然后在该网络上启动了一个mysql服务。最后,我们将我们的服务,如wordpress,连接到该网络上,以便可以使用公共mysql服务。

使用Docker创建多docker-compose互通网络服务可以帮助我们更好地管理我们的应用程序,同时也可以减少应用程序之间的耦合性,提高应用程序的可移植性和可伸缩性。希望本文可以对你有所帮助。

往期回顾

ChatGPT VS Code扩展开源,实现高级代码提示

Vue中使用Animate.css和Transition标签

Vue中使用Three.js加载3D模型,实现真实交互3D场景


版权声明:本文为「诚哥博客」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:
https://www.chengzz.com/1124.html

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/3495.html

分享给朋友:

“使用Docker创建多docker-compose互通网络通用Mysql服务” 的相关文章

「图解」父子组件通过 props 进行数据交互的方法

1.组件化开发,经常有这样的一个场景,就是父组件通过 Ajax 获取数据,传递给子组件,如何通过 props 进行数据交互来实现,便是本图解的重点。2.代码的结构3.具体代码 ①在父组件 data 中存放数据 ms。 ②将父组件 data 中的数据 ms 绑定到子组件中的属性 ms。 ③子组件在 p...

GitLab-创建分支

描述分支是独立的生产线,是开发过程的一部分。分支的创建涉及以下步骤。创建一个分支步骤1-登录您的GitLab帐户,然后转到“ 项目”部分下的项目。步骤2-要创建分支,请单击“ 存储库”部分下的“ 分支”选项,然后单击“ 新建分支”按钮。步骤3-在“ 新建分支”屏幕中,输入分支的名称,然后单击“ 创建...

15款测试html5响应式的在线工具

手机、平板灯手持设备的增多,网站要顺应变化,就必须要做响应式开发,响应式网站最大的特点在于可以在不同设备下呈现不同的布局,是基于html5+css3技术,目前越来越多的网站开始采用了响应式设计,而下面15款工具可以方便测试你的html5响应式效果。Responsinatorhttp://www.re...

学前端,这30个CSS选择器,你必须熟记

你学会了基本的id,class类选择器和descendant后代选择器,然后就觉得完事了吗?如果这样,你就会错过许多灵活运用CSS的机会。虽然本文提到的许多选择器都属于CSS3,并且只能在现代的浏览器中使用,但学会这些是大有好处的。什么是CSS选择器呢?每一条css样式定义由两部分组成,形式如下:[...

vue3使用vue-router路由(路由懒加载、路由传参)

vue-router 是 vue的一个插件库1. 专门用来实现一个SPA单页面应用2 .基于vue的项目基本都会用到此库SPA的理解1) 单页Web应用(single page web application,SPA)2) 整个应用只有一个完整的页面3) 点击页面中的链接不会刷新页面, 本身也不会向...

关于Vue页面跳转传参,参数不同, 但页面只获取参数一次的问题

#头条创作挑战赛#1.问题描述问题描述: element 展示表格(页面A),点击表格的每一行的查看详情按钮,可以携带此行的信息参数跳转到另一个页面(页面B),但是从A页面到B页面,只有第一次跳转的时候B页面可以获取到A页面的参数,返回再次A->B ,B页面无法获取到参数。2.解决办法:方法一...