如何文字推广一个婚恋网站,自己做网站怎么编代码,中国核工业第五建设有限公司待遇怎么样,wordpress后台打开慢Docker 体系#xff08;高级篇#xff09;
五、Docker-compose容器编排
1. 是什么
Compose 是 Docker 公司推出的一个工具软件#xff0c;可以管理多个 Docker 容器组成一个应用。你需要定义一个 YAML 格式的配置文件docker-compose.yml#xff0c;写好多个容器之间的调…Docker 体系高级篇
五、Docker-compose容器编排
1. 是什么
Compose 是 Docker 公司推出的一个工具软件可以管理多个 Docker 容器组成一个应用。你需要定义一个 YAML 格式的配置文件docker-compose.yml写好多个容器之间的调用关系。然后只要一个命令就能同时启动/关闭这些容器Docker-Compose是Docker官方的开源项目 负责实现对Docker容器集群的快速编排。
2. 能干嘛
docker建议我们每一个容器中只运行一个服务因为docker容器本身占用资源极少,所以最好是将每个服务单独的分割开来但是这样我们又面临了一个问题如果我需要同时部署好多个服务,难道要每个服务单独写Dockerfile然后在构建镜像,构建容器,这样累都累死了,所以docker官方给我们提供了docker-compose多服务部署的工具。例如要实现一个Web微服务项目除了Web服务容器本身往往还需要再加上后端的数据库mysql服务容器redis服务器注册中心eureka甚至还包括负载均衡容器等等。。。。。。Compose允许用户通过一个单独的docker-compose.yml模板文件YAML 格式来定义一组相关联的应用容器为一个项目project。可以很容易地用一个配置文件定义一个多容器的应用然后使用一条指令安装这个应用的所有依赖完成构建。Docker-Compose 解决了容器与容器之间如何管理编排的问题。
3. 去哪下
3.1官网
https://docs.docker.com/compose/compose-file/compose-file-v3/
3.2 官网下载
https://docs.docker.com/compose/install/
3.3 安装步骤
curl -L https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
chmod x /usr/local/bin/docker-compose
docker-compose --version3.4 卸载步骤 4. Compose核心概念
4.1 一文件
docker-compose.yml
4.2 两要素
服务service 一个个应用容器实例比如订单微服务、库存微服务、mysql容器、nginx容器或者redis容器 工程project 由一组关联的应用容器组成的一个完整业务单元在 docker-compose.yml 文件中定义。
5. Compose使用的三个步骤
编写Dockerfile定义各个微服务应用并构建出对应的镜像文件使用 docker-compose.yml 定义一个完整业务单元安排好整体应用中的各个容器服务。最后执行docker-compose up命令 来启动并运行整个应用程序完成一键部署上线
6. Compose常用命令
docker-compose -h # 查看帮助
docker-compose up # 启动所有docker-compose服务
docker-compose up -d # 启动所有docker-compose服务并后台运行
docker-compose down # 停止并删除容器、网络、卷、镜像。
docker-compose exec yml里面的服务id # 进入容器实例内部 docker-compose exec docker-compose.yml文件中写的服务id /bin/bash
docker-compose ps # 展示当前docker-compose编排过的运行的所有容器
docker-compose top # 展示当前docker-compose编排过的容器进程docker-compose logs yml里面的服务id # 查看容器输出日志
docker-compose config # 检查配置
docker-compose config -q # 检查配置有问题才有输出
docker-compose restart # 重启服务
docker-compose start # 启动服务
docker-compose stop # 停止服务7. Compose编排微服务
7.1 改造升级微服务工程docker_boot
7.1.1 以前的基础版 7.1.2 SQL建表建库
CREATE TABLE t_user (id int(10) unsigned NOT NULL AUTO_INCREMENT,username varchar(50) NOT NULL DEFAULT COMMENT 用户名,password varchar(50) NOT NULL DEFAULT COMMENT 密码,sex tinyint(4) NOT NULL DEFAULT 0 COMMENT 性别 0女 1男 ,deleted tinyint(4) unsigned NOT NULL DEFAULT 0 COMMENT 删除标志默认0不删除1删除,update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 更新时间,create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 创建时间,PRIMARY KEY (id)
) ENGINEInnoDB AUTO_INCREMENT1 DEFAULT CHARSETutf8 COMMENT用户表7.1.3 改POM
?xml version1.0 encodingUTF-8?
project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersionparentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion2.5.6/version!--version2.3.10.RELEASE/version--relativePath/ !-- lookup parent from repository --/parentgroupIdcom.alex.docker/groupIdartifactIddocker_boot/artifactIdversion0.0.1-SNAPSHOT/versionpropertiesproject.build.sourceEncodingUTF-8/project.build.sourceEncodingmaven.compiler.source1.8/maven.compiler.sourcemaven.compiler.target1.8/maven.compiler.targetjunit.version4.12/junit.versionlog4j.version1.2.17/log4j.versionlombok.version1.16.18/lombok.versionmysql.version5.1.47/mysql.versiondruid.version1.1.16/druid.versionmapper.version4.1.5/mapper.versionmybatis.spring.boot.version1.3.0/mybatis.spring.boot.version/propertiesdependencies!--guava Google 开源的 Guava 中自带的布隆过滤器--dependencygroupIdcom.google.guava/groupIdartifactIdguava/artifactIdversion23.0/version/dependency!-- redisson --dependencygroupIdorg.redisson/groupIdartifactIdredisson/artifactIdversion3.13.4/version/dependency!--SpringBoot通用依赖模块--dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-actuator/artifactId/dependency!--swagger2--dependencygroupIdio.springfox/groupIdartifactIdspringfox-swagger2/artifactIdversion2.9.2/version/dependencydependencygroupIdio.springfox/groupIdartifactIdspringfox-swagger-ui/artifactIdversion2.9.2/version/dependency!--SpringBoot与Redis整合依赖--dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-redis/artifactId/dependency!--springCache--dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-cache/artifactId/dependency!--springCache连接池依赖包--dependencygroupIdorg.apache.commons/groupIdartifactIdcommons-pool2/artifactId/dependency!-- jedis --dependencygroupIdredis.clients/groupIdartifactIdjedis/artifactIdversion3.1.0/version/dependency!--Mysql数据库驱动--dependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion5.1.47/version/dependency!--SpringBoot集成druid连接池--dependencygroupIdcom.alibaba/groupIdartifactIddruid-spring-boot-starter/artifactIdversion1.1.10/version/dependencydependencygroupIdcom.alibaba/groupIdartifactIddruid/artifactIdversion${druid.version}/version/dependency!--mybatis和springboot整合--dependencygroupIdorg.mybatis.spring.boot/groupIdartifactIdmybatis-spring-boot-starter/artifactIdversion${mybatis.spring.boot.version}/version/dependency!-- 添加springboot对amqp的支持 --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-amqp/artifactId/dependencydependencygroupIdcommons-codec/groupIdartifactIdcommons-codec/artifactIdversion1.10/version/dependency!--通用基础配置junit/devtools/test/log4j/lombok/hutool--!--hutool--dependencygroupIdcn.hutool/groupIdartifactIdhutool-all/artifactIdversion5.2.3/version/dependencydependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion${junit.version}/version/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-devtools/artifactIdscoperuntime/scopeoptionaltrue/optional/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependencydependencygroupIdlog4j/groupIdartifactIdlog4j/artifactIdversion${log4j.version}/version/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdversion${lombok.version}/versionoptionaltrue/optional/dependency!--persistence--dependencygroupIdjavax.persistence/groupIdartifactIdpersistence-api/artifactIdversion1.0.2/version/dependency!--通用Mapper--dependencygroupIdtk.mybatis/groupIdartifactIdmapper/artifactIdversion${mapper.version}/version/dependency/dependenciesbuildpluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactId/pluginplugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-resources-plugin/artifactIdversion3.1.0/version/plugin/plugins/build/project7.1.4 写yml
server.port6001
# alibaba.druid相关配置
spring.datasource.typecom.alibaba.druid.pool.DruidDataSource
spring.datasource.driver-class-namecom.mysql.jdbc.Driver
spring.datasource.urljdbc:mysql://192.168.111.169:3306/db2021?useUnicodetruecharacterEncodingutf-8useSSLfalse
spring.datasource.usernameroot
spring.datasource.password123456
spring.datasource.druid.test-while-idlefalse
# redis相关配置
spring.redis.database0
spring.redis.host192.168.111.169
spring.redis.port6379
spring.redis.password
spring.redis.lettuce.pool.max-active8
spring.redis.lettuce.pool.max-wait-1ms
spring.redis.lettuce.pool.max-idle8
spring.redis.lettuce.pool.min-idle0
# mybatis相关配置
mybatis.mapper-locationsclasspath:mapper/*.xml
mybatis.type-aliases-packagecom.atguigu.docker.entities
# swagger
spring.swagger2.enabledtrue7.1.5 主启动
package com.alex.docker;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import tk.mybatis.spring.annotation.MapperScan;SpringBootApplication
MapperScan(com.alex.docker.mapper) //import tk.mybatis.spring.annotation.MapperScan;
public class DockerBootApplication
{public static void main(String[] args){SpringApplication.run(DockerBootApplication.class, args);}}7.1.6 业务类
config配置类
// RedisConfig
package com.alex.docker.config;import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;import java.io.Serializable;Configuration
Slf4j
public class RedisConfig
{/*** param lettuceConnectionFactory* return** redis序列化的工具配置类下面这个请一定开启配置* 127.0.0.1:6379 keys ** 1) ord:102 序列化过* 2) \xac\xed\x00\x05t\x00\aord:102 野生没有序列化过*/Beanpublic RedisTemplateString,Serializable redisTemplate(LettuceConnectionFactory lettuceConnectionFactory){RedisTemplateString,Serializable redisTemplate new RedisTemplate();redisTemplate.setConnectionFactory(lettuceConnectionFactory);//设置key序列化方式stringredisTemplate.setKeySerializer(new StringRedisSerializer());//设置value的序列化方式jsonredisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());redisTemplate.setHashKeySerializer(new StringRedisSerializer());redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());redisTemplate.afterPropertiesSet();return redisTemplate;}}// SwaggerConfig
package com.alex.docker.config;import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;import java.text.SimpleDateFormat;
import java.util.Date;Configuration
EnableSwagger2
public class SwaggerConfig
{Value(${spring.swagger2.enabled})private Boolean enabled;Beanpublic Docket createRestApi() {return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).enable(enabled).select().apis(RequestHandlerSelectors.basePackage(com.atguigu.docker)) //你自己的package.paths(PathSelectors.any()).build();}public ApiInfo apiInfo() {return new ApiInfoBuilder().title(Java技术\tnew SimpleDateFormat(yyyy-MM-dd).format(new Date())).description(docker-compose).version(1.0).termsOfServiceUrl(https://www.alex.com/).build();}
}新建entity
// User
package com.alex.docker.entities;import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import java.util.Date;Table(name t_user)
public class User
{IdGeneratedValue(generator JDBC)private Integer id;/*** 用户名*/private String username;/*** 密码*/private String password;/*** 性别 0女 1男 */private Byte sex;/*** 删除标志默认0不删除1删除*/private Byte deleted;/*** 更新时间*/Column(name update_time)private Date updateTime;/*** 创建时间*/Column(name create_time)private Date createTime;/*** return id*/public Integer getId() {return id;}/*** param id*/public void setId(Integer id) {this.id id;}/*** 获取用户名** return username - 用户名*/public String getUsername() {return username;}/*** 设置用户名** param username 用户名*/public void setUsername(String username) {this.username username;}/*** 获取密码** return password - 密码*/public String getPassword() {return password;}/*** 设置密码** param password 密码*/public void setPassword(String password) {this.password password;}/*** 获取性别 0女 1男 ** return sex - 性别 0女 1男 */public Byte getSex() {return sex;}/*** 设置性别 0女 1男 ** param sex 性别 0女 1男 */public void setSex(Byte sex) {this.sex sex;}/*** 获取删除标志默认0不删除1删除** return deleted - 删除标志默认0不删除1删除*/public Byte getDeleted() {return deleted;}/*** 设置删除标志默认0不删除1删除** param deleted 删除标志默认0不删除1删除*/public void setDeleted(Byte deleted) {this.deleted deleted;}/*** 获取更新时间** return update_time - 更新时间*/public Date getUpdateTime() {return updateTime;}/*** 设置更新时间** param updateTime 更新时间*/public void setUpdateTime(Date updateTime) {this.updateTime updateTime;}/*** 获取创建时间** return create_time - 创建时间*/public Date getCreateTime() {return createTime;}/*** 设置创建时间** param createTime 创建时间*/public void setCreateTime(Date createTime) {this.createTime createTime;}
}// UserDTO
package com.alex.docker.entities;import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;import java.io.Serializable;
import java.util.Date;NoArgsConstructor
AllArgsConstructor
Data
ApiModel(value 用户信息)
public class UserDTO implements Serializable
{ApiModelProperty(value 用户ID)private Integer id;ApiModelProperty(value 用户名)private String username;ApiModelProperty(value 密码)private String password;ApiModelProperty(value 性别 0女 1男 )private Byte sex;ApiModelProperty(value 删除标志默认0不删除1删除)private Byte deleted;ApiModelProperty(value 更新时间)private Date updateTime;ApiModelProperty(value 创建时间)private Date createTime;/*** return id*/public Integer getId() {return id;}/*** param id*/public void setId(Integer id) {this.id id;}/*** 获取用户名** return username - 用户名*/public String getUsername() {return username;}/*** 设置用户名** param username 用户名*/public void setUsername(String username) {this.username username;}/*** 获取密码** return password - 密码*/public String getPassword() {return password;}/*** 设置密码** param password 密码*/public void setPassword(String password) {this.password password;}/*** 获取性别 0女 1男 ** return sex - 性别 0女 1男 */public Byte getSex() {return sex;}/*** 设置性别 0女 1男 ** param sex 性别 0女 1男 */public void setSex(Byte sex) {this.sex sex;}/*** 获取删除标志默认0不删除1删除** return deleted - 删除标志默认0不删除1删除*/public Byte getDeleted() {return deleted;}/*** 设置删除标志默认0不删除1删除** param deleted 删除标志默认0不删除1删除*/public void setDeleted(Byte deleted) {this.deleted deleted;}/*** 获取更新时间** return update_time - 更新时间*/public Date getUpdateTime() {return updateTime;}/*** 设置更新时间** param updateTime 更新时间*/public void setUpdateTime(Date updateTime) {this.updateTime updateTime;}/*** 获取创建时间** return create_time - 创建时间*/public Date getCreateTime() {return createTime;}/*** 设置创建时间** param createTime 创建时间*/public void setCreateTime(Date createTime) {this.createTime createTime;}Overridepublic String toString() {return User{ id id , username username \ , password password \ , sex sex };}
}新建mapper
// 新建接口UserMapperpackage com.alex.docker.mapper;import com.atguigu.docker.entities.User;
import tk.mybatis.mapper.common.Mapper;public interface UserMapper extends MapperUser {
}
src\main\resources路径下新建mapper文件夹并新增UserMapper.xml
?xml version1.0 encodingUTF-8?
!DOCTYPE mapper PUBLIC -//mybatis.org//DTD Mapper 3.0//EN http://mybatis.org/dtd/mybatis-3-mapper.dtd
mapper namespacecom.alex.docker.mapper.UserMapperresultMap idBaseResultMap typecom.alex.docker.entities.User!--WARNING - mbg.generated--id columnid jdbcTypeINTEGER propertyid /result columnusername jdbcTypeVARCHAR propertyusername /result columnpassword jdbcTypeVARCHAR propertypassword /result columnsex jdbcTypeTINYINT propertysex /result columndeleted jdbcTypeTINYINT propertydeleted /result columnupdate_time jdbcTypeTIMESTAMP propertyupdateTime /result columncreate_time jdbcTypeTIMESTAMP propertycreateTime //resultMap
/mapper新建service
package com.alex.docker.service;import com.alex.docker.entities.User;
import com.alex.docker.mapper.UserMapper;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.PathVariable;import javax.annotation.Resource;
import java.util.concurrent.TimeUnit;Service
Slf4j
public class UserService {public static final String CACHE_KEY_USER user:;Resourceprivate UserMapper userMapper;Resourceprivate RedisTemplate redisTemplate;/*** addUser* param user*/public void addUser(User user){//1 先插入mysql并成功int i userMapper.insertSelective(user);if(i 0){//2 需要再次查询一下mysql将数据捞回来并okuser userMapper.selectByPrimaryKey(user.getId());//3 将捞出来的user存进redis完成新增功能的数据一致性。String key CACHE_KEY_USERuser.getId();redisTemplate.opsForValue().set(key,user);}}/*** findUserById* param id* return*/public User findUserById(Integer id){User user null;String key CACHE_KEY_USERid;//1 先从redis里面查询如果有直接返回结果如果没有再去查询mysqluser (User) redisTemplate.opsForValue().get(key);if(user null){//2 redis里面无继续查询mysqluser userMapper.selectByPrimaryKey(id);if(user null){//3.1 redismysql 都无数据//你具体细化防止多次穿透我们规定记录下导致穿透的这个key回写redisreturn user;}else{//3.2 mysql有需要将数据写回redis保证下一次的缓存命中率redisTemplate.opsForValue().set(key,user);}}return user;}
}新建controller
package com.alex.docker.controller;import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ReferenceUtil;
import com.alex.docker.entities.User;
import com.alex.docker.entities.UserDTO;
import com.alex.docker.service.UserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.models.auth.In;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;import javax.annotation.Resource;
import java.util.Random;/*** auther zzyy* create 2021-05-01 15:02*/
Api(description 用户User接口)
RestController
Slf4j
public class UserController
{Resourceprivate UserService userService;ApiOperation(数据库新增3条记录)RequestMapping(value /user/add,method RequestMethod.POST)public void addUser(){for (int i 1; i 3; i) {User user new User();user.setUsername(zzyyi);user.setPassword(IdUtil.simpleUUID().substring(0,6));user.setSex((byte) new Random().nextInt(2));userService.addUser(user);}}ApiOperation(删除1条记录)RequestMapping(value /user/delete/{id},method RequestMethod.POST)public void deleteUser(PathVariable Integer id){userService.deleteUser(id);}ApiOperation(修改1条记录)RequestMapping(value /user/update,method RequestMethod.POST)public void updateUser(RequestBody UserDTO userDTO){User user new User();BeanUtils.copyProperties(userDTO,user);userService.updateUser(user);}ApiOperation(查询1条记录)RequestMapping(value /user/find/{id},method RequestMethod.GET)public User findUserById(PathVariable Integer id){return userService.findUserById2(id);}
}7.1.7 mvn package命令将微服务形成新的jar包 并上传到Linux服务器/mydocker目录下
7.1.8 编写Dockerfile
# 基础镜像使用java
FROM java:8
# 作者
MAINTAINER alex
# VOLUME 指定临时文件目录为/tmp在主机/var/lib/docker目录下创建了一个临时文件并链接到容器的/tmp
VOLUME /tmp
# 将jar包添加到容器中并更名为zzyy_docker.jar
ADD docker_boot-0.0.1-SNAPSHOT.jar zzyy_docker.jar
# 运行jar包
RUN bash -c touch /zzyy_docker.jar
ENTRYPOINT [java,-jar,/zzyy_docker.jar]
#暴露6001端口作为微服务
EXPOSE 60017.1.9 构建镜像
docker build -t zzyy_docker:1.6 .7.2 不用Compose
7.2.1 单独的mysql容器实例
新建mysql容器实例
docker run -p 3306:3306 --name mysql57 --privilegedtrue -v /zzyyuse/mysql/conf:/etc/mysql/conf.d -v /zzyyuse/mysql/logs:/logs -v /zzyyuse/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD123456 -d mysql:5.7进入mysql容器实例并新建库db666新建表t_user
docker exec -it mysql57 /bin/bash
mysql -uroot -p
create database db666;
use db666;
CREATE TABLE t_user (id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,username VARCHAR(50) NOT NULL DEFAULT COMMENT 用户名,password VARCHAR(50) NOT NULL DEFAULT COMMENT 密码,sex TINYINT(4) NOT NULL DEFAULT 0 COMMENT 性别 0女 1男 ,deleted TINYINT(4) UNSIGNED NOT NULL DEFAULT 0 COMMENT 删除标志默认0不删除1删除,update_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 更新时间,create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 创建时间,PRIMARY KEY (id)
) ENGINEINNODB AUTO_INCREMENT1 DEFAULT CHARSETutf8mb4 COMMENT用户表;
7.2.2 单独的redis容器实例
docker run -p 6379:6379 --name redis608 --privilegedtrue -v /app/redis/redis.conf:/etc/redis/redis.conf -v /app/redis/data:/data -d redis:6.0.8 redis-server /etc/redis/redis.conf7.2.3 微服务工程
docker run -d -p 6001:6001 zzyy_docker:1.67.2.4 上面三个容器实例依次顺序启动成功 7.3 swagger测试
http://localhost:你的微服务端口/swagger-ui.html#/
7.4 上面成功了有哪些问题?
先后顺序要求固定先mysqlredis才能微服务访问成功多个run命令…容器间的启停或宕机有可能导致IP地址对应的容器实例变化映射出错 要么生产IP写死(可以但是不推荐)要么通过服务调用
7.5 使用Compose
7.5.1 编写docker-compose.yml文件
version: 3services:microService:image: zzyy_docker:1.6container_name: ms01ports:- 6001:6001volumes:- /app/microService:/datanetworks: - alex_net depends_on: - redis- mysqlredis:image: redis:6.0.8ports:- 6379:6379volumes:- /app/redis/redis.conf:/etc/redis/redis.conf- /app/redis/data:/datanetworks: - alex_netcommand: redis-server /etc/redis/redis.confmysql:image: mysql:5.7environment:MYSQL_ROOT_PASSWORD: 123456MYSQL_ALLOW_EMPTY_PASSWORD: noMYSQL_DATABASE: db666MYSQL_USER: zzyyMYSQL_PASSWORD: zzyy123ports:- 3306:3306volumes:- /app/mysql/db:/var/lib/mysql- /app/mysql/conf/my.cnf:/etc/my.cnf- /app/mysql/init:/docker-entrypoint-initdb.dnetworks:- alex_netcommand: --default-authentication-pluginmysql_native_password #解决外部无法访问networks: alex_net: 7.5.2 第二次修改微服务工程docker_boot
7.5.2.1 写YML
通过服务名访问IP无关
server.port6001# alibaba.druid相关配置
spring.datasource.typecom.alibaba.druid.pool.DruidDataSource
spring.datasource.driver-class-namecom.mysql.jdbc.Driver
#spring.datasource.urljdbc:mysql://192.168.111.169:3306/db2021?useUnicodetruecharacterEncodingutf-8useSSLfalse
spring.datasource.urljdbc:mysql://mysql:3306/db2021?useUnicodetruecharacterEncodingutf-8useSSLfalse
spring.datasource.usernameroot
spring.datasource.password123456
spring.datasource.druid.test-while-idlefalse# redis相关配置
spring.redis.database0
#spring.redis.host192.168.111.169
spring.redis.hostredis
spring.redis.port6379
spring.redis.password
spring.redis.lettuce.pool.max-active8
spring.redis.lettuce.pool.max-wait-1ms
spring.redis.lettuce.pool.max-idle8
spring.redis.lettuce.pool.min-idle0# mybatis相关配置
mybatis.mapper-locationsclasspath:mapper/*.xml
mybatis.type-aliases-packagecom.atguigu.docker.entities# swagger
spring.swagger2.enabledtrue7.5.2.2 mvn package命令将微服务形成新的jar包 并上传到Linux服务器/mydocker目录下
7.5.2.3 编写Dockerfile
# 基础镜像使用java
FROM java:8
# 作者
MAINTAINER zzyy
# VOLUME 指定临时文件目录为/tmp在主机/var/lib/docker目录下创建了一个临时文件并链接到容器的/tmp
VOLUME /tmp
# 将jar包添加到容器中并更名为zzyy_docker.jar
ADD docker_boot-0.0.1-SNAPSHOT.jar zzyy_docker.jar
# 运行jar包
RUN bash -c touch /zzyy_docker.jar
ENTRYPOINT [java,-jar,/zzyy_docker.jar]
#暴露6001端口作为微服务
EXPOSE 60017.5.2.4 构建镜像
docker build -t zzyy_docker:1.6 .7.5.3 执行 docker-compose up 或者 执行 docker-compose up -d 7.5.4 进入mysql容器实例并新建库db666新建表t_user
docker exec -it 容器实例id /bin/bash
mysql -uroot -p
create database db666;
use db666;
CREATE TABLE t_user (id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,username VARCHAR(50) NOT NULL DEFAULT COMMENT 用户名,password VARCHAR(50) NOT NULL DEFAULT COMMENT 密码,sex TINYINT(4) NOT NULL DEFAULT 0 COMMENT 性别 0女 1男 ,deleted TINYINT(4) UNSIGNED NOT NULL DEFAULT 0 COMMENT 删除标志默认0不删除1删除,update_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 更新时间,create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 创建时间,PRIMARY KEY (id)
) ENGINEINNODB AUTO_INCREMENT1 DEFAULT CHARSETutf8mb4 COMMENT用户表;7.5.5 测试通过
7.5.6 关停