前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Docker从入门到精通(十一)

Docker从入门到精通(十一)

作者头像
小土豆Yuki
发布2023-09-02 15:50:04
1950
发布2023-09-02 15:50:04
举报
文章被收录于专栏:洁癖是一只狗洁癖是一只狗

docker-compose 实战使用,集成编排Redis、MySQL、微服务,服务容器化

  • 微服务项目搭建
  • 微服务镜像构建
  • docker-compose 编排
  • 数据库脚本执行
  • 验证

微服务项目搭建

搭建一个小型项目,使用spring-boot,redis,mysql,mybatis,mybatis自动生成工具技术栈pom.xml文件依赖,spring-boot使用2.0.5.RELEASE版本,jdk1.8

代码语言:javascript
复制
https://github.com/nature-key/docker-service.git(项目地址)
代码语言:javascript
复制
<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>commons-lang</groupId>
            <artifactId>commons-lang</artifactId>
            <version>2.6</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.54</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.2.0</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-core</artifactId>
            <version>1.3.2</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>io.projectreactor</groupId>
            <artifactId>reactor-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

mybaits自动生成代码mavan配置

代码语言:javascript
复制
<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <mainClass>com.example.demo.DemoApplication</mainClass>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-release-plugin</artifactId>
                <version>2.5.3</version>
            </plugin>
            <plugin>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <skip>true</skip>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.3.2</version>
                <configuration>
                    <configurationFile>src/main/resources/gen.xml</configurationFile>
                    <verbose>true</verbose>
                    <overwrite>true</overwrite>
                </configuration>
            </plugin>

        </plugins>
    </build>
代码语言:javascript
复制
代码语言:javascript
复制
gen.xml配置
代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
        PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
    <!-- 数据库驱动:选择你的本地硬盘上面的数据库驱动包-->
    <classPathEntry  location="/Users/wangxuan/.m2/repository/com/mysql/mysql-connector-j/8.0.32/mysql-connector-j-8.0.32.jar"/>
    <context id="DB2Tables"  targetRuntime="MyBatis3Simple">
        <commentGenerator>
            <property name="suppressDate" value="true"/>
            <!-- 是否去除自动生成的注释 true:是 :false:否 -->
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>
        <!--数据库链接URL,用户名、密码 -->
        <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver" connectionURL="jdbc:mysql://172.17.0.2/mysql" userId="root" password="123456">
        </jdbcConnection>
        <javaTypeResolver>
            <property name="forceBigDecimals" value="false"/>
        </javaTypeResolver>
        <!-- 生成模型的包名和位置-->
        <javaModelGenerator targetPackage="com.example.demo.entity"
                            targetProject="src/main/java">
            <property name="enableSubPackages" value="true"/>
            <property name="trimStrings" value="true"/>
        </javaModelGenerator>
        <!-- 生成映射文件的包名和位置-->
        <sqlMapGenerator targetPackage="mapper"
                         targetProject="src/main/resources">
            <property name="enableSubPackages" value="true"/>
        </sqlMapGenerator>
        <!-- 生成DAO的包名和位置-->
        <javaClientGenerator type="XMLMAPPER"
                             targetPackage="com.example.demo.dao" targetProject="src/main/java">
            <property name="enableSubPackages" value="true"/>
        </javaClientGenerator>
        <!-- 要生成的表 tableName是数据库中的表名或视图名 domainObjectName是实体类名-->
        <table tableName="student"
               domainObjectName="StudentPO">

        </table>
    </context>
</generatorConfiguration>
代码语言:javascript
复制
代码语言:javascript
复制
建表语句,根据表自动生成mybait代码
代码语言:javascript
复制
create table student(
  id int(13),
  name varchar(255),
  pwd varchar(3)
);
代码语言:javascript
复制
代码语言:javascript
复制
服务配置application.yml
代码语言:javascript
复制
server:
  port: 80
spring:
  redis:
   #redis容器名称
    host: redis
    port: 6379
  datasource: 
   #ip使用mysql容器名称
    url: jdbc:mysql://mysql:3306/mysql?userSSL=false
    username: root
    password: 123456
    driver-class-name: com.mysql.jdbc.Driver
mybatis:
  mapper-locations:
    -  classpath:mapper/*.xml
代码语言:javascript
复制
代码语言:javascript
复制
接口实现
代码语言:javascript
复制
@RestController
public class DockerController {
    @Autowired
    StudentService studentService;

    @RequestMapping("/docker/{id}")
    public StudentPO getStudent(@PathVariable("id") Integer id) {
        return studentService.getStudent(id);
    }

    @PostMapping("/docker/add")
    public void addStudent(@RequestBody StudentPO studentPO) {
        studentService.addStudent(studentPO);
    }
}
代码语言:javascript
复制

微服务镜像构建

把微服务进行打包

编写Dockerfile文件

代码语言:javascript
复制
# 基础镜像使用java8,需要先构建
FROM java:8
# 作者
MAINTAINER wuyi
# 容器卷,指定临时文件的目录为/tmp
VOLUME /tmp
# 指定工作目录
WORKDIR /tmp
# 重命名可选操作,方便docker ps查看
add demo-0.0.1-SNAPSHOT.jar  docker_service.jar
# 运行jar包
ENTRYPOINT ["java", "-jar", "docker_service.jar"]
# 暴露80端口作为服务端口
EXPOSE 80

jar包和dockerfile放到一个目录下,构建镜像

代码语言:javascript
复制
$ ls(同一个目录下)
Dockerfile        demo-0.0.1-SNAPSHOT.jar
$ docker build -t docker_service:1.0 . (docker进行构建,-t指定标签)
$ docker images docker_service (查看构建结果)
REPOSITORY       TAG       IMAGE ID       CREATED        SIZE
docker_service   1.0       4bd38dc72cbb   10 hours ago   672MB
代码语言:javascript
复制
docker-compose 编排
代码语言:javascript
复制
代码语言:javascript
复制
docker-composer.yml
代码语言:javascript
复制
version: "3"
services:
  macro_server:
    image: docker_service:1.0
    container_name: docker_service
    ports:
      - "8081:80"
    volumes:
      - /Users/wuyi/Downloads/docker/data:/data
    # 依赖于redis和mysql,在启动本服务之前会先启动依赖的服务
    depends_on:
      - redis
      - mysql
  # Redis服务
  redis:
    container_name: redis
    image: redis:latest
    ports:
      - "6379:6379"
    volumes:
      - /Users/wuyi/Downloads/docker/redis/redis.conf:/etc/redis/redis.conf
      - /Users/wuyi/Downloads/docker/redis/data:/data
    command: redis-server /etc/redis/redis.conf
  # MySQL服务,上面的构建服务直接拷贝下来即可
  mysql:
    container_name: mysql
    image: mysql:5.6
    ports:
      - "3307:3306"
    environment:
      MYSQL_ROOT_PASSWORD: '123456'
      MYSQL_ALLOW_EMPTY_PASSWORD: 'no'
      MYSQL_DATABASE: 'mysql'
      MYSQL_USER: 'admin'
      MYSQL_PASSWORD: 'admin'
    volumes:
      - /Users/wuyi/Downloads/docker/mysql/data:/var/lib/mysql
      - /Users/wuyi/Downloads/docker/mysql/conf:/etc/mysql
    command: --default-authentication-plugin=mysql_native_password
代码语言:javascript
复制
代码语言:javascript
复制
代码语言:javascript
复制
代码语言:javascript
复制
直接启动服务
代码语言:javascript
复制
$ ls
data            docker-compose.yml  mysql           redis           service         tmp
$ docker compose up (启动)
$ docker ps (查看服务是否启动)
CONTAINER ID   IMAGE                             COMMAND                  CREATED        STATUS          PORTS                    NAMES
86d8fdd2e022   docker_service:1.0                "java -jar docker_se…"   10 hours ago   Up 20 seconds   0.0.0.0:8081->80/tcp     docker_service
dd5dbec730e9   mysql:5.6                         "docker-entrypoint.s…"   10 hours ago   Up 21 seconds   0.0.0.0:3307->3306/tcp   mysql
72aabd353c52   redis:latest                      "docker-entrypoint.s…"   10 hours ago   Up 21 seconds   0.0.0.0:6379->6379/tcp   redis
代码语言:javascript
复制

数据库脚本执行

由于我们的数据库是新建的容器,脚本还没有生成,此时我们可以连接容器执行脚本,使用默认的数据库mysql,执行下面脚本

代码语言:javascript
复制
create table student(
  id int(13),
  name varchar(255),
  pwd varchar(3)
);
代码语言:javascript
复制
代码语言:javascript
复制
验证服务是否在正常

代码语言:javascript
复制
查看redis是否有正产缓存数据
代码语言:javascript
复制
$ docker exec -it 72aabd353c52 bash
root@72aabd353c52:/data# redis-cli
127.0.0.1:6379> get 1
"{\"id\":1,\"name\":\"test\",\"pwd\":\"123\"}"
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-04-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 洁癖是一只狗 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档