ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

使用docker安装mysql5.7

2021-10-31 20:35:12  阅读:202  来源: 互联网

标签:容器 spring mysql5.7 mysql 3306 org docker 安装


比起原本要下载mysql然后安装、配置、之后以service方式运行的方式,我们现在可以用mysql官方的image然后以容器的方式运行它,这样使得本机的系统十分干净,容器进程停掉之后本机系统上什么mysql相关的进程都不会存在,不用安装数据库。

创建卷和网络

先创建卷,用来持久化data and configuration,这里我们用named volume方式,另外还有 bind mounts.

docker volume create mysql_data
docker volume create mysql_config

接下来创建一个network,用于应用容器和mysql容器之间的通信,还记得吗?隔离的两个容器进程之间通信的唯一方式是通过网络。
docker network create mysqlnet
这个网络被称为用户定义的网桥网络,它为我们提供了一个很好的DNS查找服务,我们可以在后续的java应用容器创建连接字符串时使用它。

获得镜像并启动容器

先去docker hub上看一下可选的mysql官方镜像都有哪些版本,看到有5.7.36版本。
然后拉取这个镜像:

docker pull mysql:5.7.36

然后看一下本地镜像,就可以看到刚才拉下来的这个镜像了:

docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
mysql        5.7.36    938b57d64674   12 days ago   448MB

然后我们启动容器

PS C:\Users\douchuzi> docker run --name mysqlserver --rm `
>> -v mysql_data:/var/lib/mysql `
>> -v mysql_config:/etc/mysql/conf.d `
>> --network mysqlnet `
>> -e MYSQL_ROOT_PASSWORD=douchuzi@000 `
>> -p 3306:3306 -d mysql:5.7.36
27b14615c9428feb7da0b193b0ebc88ad2cb5cada4cd6840d2b4b81372bae0a1

这里解释一下上面的几个参数:

--name mysqlserver表示启动的这个容器名字为mysqlserver
--rm 容器停止后就删除这个容器
-v mysql_data:/var/lib/mysql表示把容器里的/var/lib/mysql挂载到mysql_data这个volume卷上。这里我们用named volume方式,另外还有 bind mounts。
--network mysqlnet表示加入mysqlnet这个网络
-e MYSQL_ROOT_PASSWORD=douchuzi@000表示在容器里创建一个名为MYSQL_ROOT_PASSWORD的环境变量,mysql的root密码。
-p 3306:3306是把容器的3306端口映射为本机的3306端口,宿主机port:容器port
-d 表示后台运行这个docker run命令
最后mysql:5.7.36我们用的镜像。

另外,这里用的是win10的powershell,换行符是` , 如果是mac或者linux换行符是\
接下来可以看一下容器是否启动成功 docker ps -a,应该可以看到类似如下信息:

CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS         PORTS                               NAMES
083272ee96b4   mysql:5.7.36   "docker-entrypoint.s…"   9 minutes ago   Up 9 minutes   0.0.0.0:3306->3306/tcp, 33060/tcp   mysqlserver
测试和使用这个mysql数据库

可以用DBeaver工具连一下本地容器里这个mysql试试,insert点数据,然后docker stop containerID停止容器再docker run重新启动,可以看到数据仍然还在。这就是因为前面我们使用了volume持久化了mysql的数据文件。
我们用IntelliJ IDEA开发一个简单的springboot应用来连一下这个数据库:
build.gradle

plugins {
    id 'org.springframework.boot' version '2.1.13.RELEASE'
    id 'io.spring.dependency-management' version '1.0.10.RELEASE'
    id 'java'
}

group = 'com.wangan'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'

repositories {
    mavenCentral()
}

dependencies {
    //jpa
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    runtimeOnly 'mysql:mysql-connector-java'
    //spring mvc
    implementation 'org.springframework.boot:spring-boot-starter-web'
    //lombok
    annotationProcessor 'org.projectlombok:lombok:1.18.2'
    compileOnly 'org.projectlombok:lombok:1.18.2'
    testAnnotationProcessor 'org.projectlombok:lombok:1.18.2'
    testCompileOnly 'org.projectlombok:lombok:1.18.2'
    //test
    testImplementation('org.springframework.boot:spring-boot-starter-test') {
        exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
    }
    implementation 'com.alibaba:fastjson:1.2.73'
}

test {
    useJUnitPlatform()
}

application.properties

# 应用名称
spring.application.name=springboot2
server.servlet.context-path=/springboot2
# 应用服务 WEB 访问端口
server.port=8080
# 数据库驱动:
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# 数据源名称
spring.datasource.name=defaultDataSource
# 数据库连接地址
spring.datasource.url=jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC
# 数据库用户名&密码:
spring.datasource.username=root
spring.datasource.password=root

spring.jpa.hibernate.ddl-auto=update
spring.jpa.hibernate.naming-strategy=org.hibernate.cfg.ImprovedNamingStrategy
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect

Repository

import com.wangan.springboot2.entity.Token;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;

public interface TokenRepository extends JpaRepository<Token, Long>, JpaSpecificationExecutor<Token> {
    Token findByMobile(String mobile);
}

Controller

@Slf4j
@RestController
@RequestMapping("rest")
public class RestfullController {

    @Autowired
    private TokenRepository tokenRepository;

    @RequestMapping(value = "getTokenByMobile", method = RequestMethod.GET)
    public Token getTokenByMobile(String mobile){
        log.info(mobile);
        Token token = tokenRepository.findByMobile(mobile);
        log.info(JSON.toJSONString(token));
        return token;
    }
}

用Postman测试一下GET http://localhost:8080/springboot2/rest/getTokenByMobile?mobile=13700000000
可以看到返回了正确的结果。

标签:容器,spring,mysql5.7,mysql,3306,org,docker,安装
来源: https://www.cnblogs.com/lyhero11/p/15490672.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有