使用Docker Compose为ASP.NET Core程序添加MySQL数据库

本文翻译自:

Adding MySQL to ASP.NET Core App With Docker Compose

        之前的例子中我们将程序进行容器化,本文我们会把MySQL数据库作为另一个Container,用于程序的访问。因为现在有很多的容器需要管理,所以介绍一种 Docker Compose工具,该工具可以用于定义并运行多个Container。

本文将会着重介绍以下几点:

  • 什么是Docker Compose
  • 在程序中添加Docker Compose
  • 使用Compose创建镜像
  • 使用Docker Compose添加MySQL数据库
  • Docker-Compose Up/Down示例

什么是 Docker Compose

Docker Compose是一个用于定义并运行多个Container的工具。

Docker Compose使用Yaml文件定义服务,然后使用一条指令运行这个服务。当定义好服务后,可以使用 docker-compose up命令运行服务,使用docker-compose down停止服务。

引入Docker Compose的意义在于解决手动管理多个镜像的问题,并且有以下优点:

  • 在一个宿主机上创建多个隔离的环境
  • 在环境内部创建网络
  • 保留Containers使用的Volume数据
  • 通过缓存配置信息,更新修改的Container
  • 可以在Yaml文件中使用变量,进而对不同的环境自定义不同的配置。
  • 使用CI工具(比方说TeamCity)

添加Docker Compose文件

Compose操作依赖于Yaml文件,该文件一般名为docker-compose.yml,并且放在工程文件的根目录。

1 version: '3.4'
2 
3 services:
4   dockerdeploy:
5     image: imstrive/dockerdeploy
6     ports:
7       - "8080:80"

这是最简单的Compose文件,命令的执行操作类似于之前用到的 docker run操作。

之前使用的命令为 docker run --rm -it -p=8080:80 imstrive/dockerdeploy,现在使用 docker -compose up命令。

扫描二维码关注公众号,回复: 4887800 查看本文章

如上所示,docker-compose.yml文件包含了很多的指令,这些指令都是针对我们当前的应用,之后我们会添加更多的服务。

如果想让服务在后台运行,可以使用 -d 指令:docker-compose up -d,后台服务的停止使用命令 docker-compose down

这里有一点需要注意,如果我们使用 Ctrl + C指令,Compose操作创建的Container和network并不会停止,如果想释放资源则需要运行 docker-compose down。

使用Compose创建镜像

上面的Compose指令使用了已经存在的镜像,但是当我们修改了程序或者DockerFile的时候,Compose依然运行的是变化发生前创建的镜像。

此时我们需要使用命令 docker build -t imstrive/dockerdeploy . 命令,然后运行docker-compose up才能使这些变更生效。

可以通过修改docker-compose.yml文件实现以上步骤自动化的需求:

 1 version: '3.4'
 2 
 3 services:
 4   dockerdeploy:
 5     image: imstrive/dockerdeploy
 6     build:
 7       context: .
 8       dockerfile: DockerDeploy/Dockerfile
 9     ports:
10       - "8080:80"

新增的命令会根据当前目录设置上下文信息,并通过上下文信息使用Dockerfile创建镜像。通过在docker-compose命令中添加 --build 标志可以强制重新构建镜像:

docker-compose up --build

添加MySQL数据库

 1 version: '3.4'
 2 
 3 services:
 4   db:
 5     image: mysql:5.6
 6     environment:
 7        MYSQL_RANDOM_ROOT_PASSWORD: longtao
 8        MYSQL_DATABASE: LocalTestDB
 9        MYSQL_USER: test
10        MYSQL_PASSWORD: longtao
11     volumes:
12        - dbdata:/var/lib/mysql
13        - ./_MySQL_Init_Script:/docker-entrypoint-initdb.d
14     restart: always
15 
16   dockerdeploy:
17     depends_on:
18       - db
19     image: imstrive/dockerdeploy
20     build:
21       context: .
22     ports:
23       - "8080:80"
24 
25 volumes:
26   dbdata:

如上所示,在docker-compose.yml文件中添加了数据库服务。服务的名字也是容器的名字,可以在数据库连接中使用。

("connectionString": "server=db;port=3306;userid=root;password=longtao;database=LocalTestDB;Charset='gbk';SslMode=None")

在镜像运行时对MySQL容器进行配置,并且配置环境变量。

  • MYSQL_RANDOM_ROOT_PASSWORD: longtao      设置root用户的随机密码,密码会在控制台显示
  • MYSQL_DATABASE: LocalTestDB                               创建LocalTestDB数据库
  • MYSQL_USER: test                                                      创建用户:test
  • MYSQL_PASSWORD: longtao                                     test用户的密码为:longtao

之后创建了两个数据卷:一个用于数据库数据,另一个使用 init.sql初始化数据库。MySQL的容器使用第一个卷,将数据库数据保存在 /var/lib/mysql下。

需要注意的是,数据库环境变量的配置只在容器第一次初始化的时候发生。配置后如果改变容器需要通过MySQL CLI(进入容器使用命令 docker exec -it <mysql-container-name> bash)。

restart: always可以在Container关掉时立即重启。

depends_on: -db,使得数据库的服务最早加载。

 

Docker-Compose Up/Down 

注意

编写Docker-Compose需要注意每一样的缩进以及 ":" 后需要有一个空格

猜你喜欢

转载自www.cnblogs.com/imstrive/p/10260404.html