mysql镜像制作
[root@docker ~]# docker run --rm --name first-mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6
4bcd97f8848534b3a6ff461c49ab3b9b49347b05e5bfc68e87d0ecfdbb491d71
[root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4bcd97f88485 mysql:5.6 "docker-entrypoint.s…" 8 seconds ago Up 7 seconds 3306/tcp first-mysql
[root@docker ~]# docker commit -p first-mysql slowlove/mysql:v0.1
sha256:83ad6e0a58d0f46c57719a2a72eefd19e03540a9421e01d95cea700ac9a04132
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
slowlove/mysql v0.1 83ad6e0a58d0 5 seconds ago 302MB
mysql 5.6 6419e0ef7c31 41 hours ago 302MB
[root@docker ~]# docker kill first-mysql
first-mysql
[root@docker ~]# docker run --rm --name first-mysql -v /data/mysql/:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d slowlove/mysql:v0.1
d4633f5bd8ddb7e7ebd55ffd87f3885203119e380fb864c9a80068216d377d22
[root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d4633f5bd8dd slowlove/mysql:v0.1 "docker-entrypoint.s…" 10 seconds ago Up 9 seconds 0.0.0.0:3306->3306/tcp first-mysql
大黄连接成功
创建数据库slowlove
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
DROP TABLE IF EXISTS `person`;
CREATE TABLE `person` (
`id` varchar(36) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`age` int(11) NULL DEFAULT NULL,
`salary` double(10, 2) NULL DEFAULT NULL,
`bir` date NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
INSERT INTO `person` VALUES ('8f13eb342aa340a290aeba63f428bd02', 'Ligs', 36, 5.00, '2020-11-15');
INSERT INTO `person` VALUES ('ca825addf2bf4ab2aeae9c802a05e356', 'hlc', 13, 112222.00, '2020-11-12');
SET FOREIGN_KEY_CHECKS = 1;
在本地查看数据库是否存在
[root@docker ~]# cd /data/mysql/
[root@docker mysql]# ls
auto.cnf ibdata1 ib_logfile0 ib_logfile1 mysql performance_schema slowlove
本地项目
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<packaging>jar</packaging>
<name>demo</name>
<groupId>org.example</groupId>
<artifactId>springboot-demo</artifactId>
<version>1.0</version>
<!--继承springboot的父项目-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.2.RELEASE</version>
</parent>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<!--使用热部署出现中文乱码解决方案-->
<configuration>
<fork>true</fork>
<!--增加jvm参数-->
<jvmArguments>-Dfile.encoding=UTF-8</jvmArguments>
<!--指定入口类-->
<mainClass>com.ix.SpringbootDemoApplication</mainClass>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<!--引入springboot的web支持-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--整合mybatis-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.3</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.12</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.0.5</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
</project>
server:
port: 8089
servlet:
context-path: /demo
spring:
datasource: # mysql数据库配置
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://192.168.66.13:3306/slowlove?characterEncoding=utf-8&serverTimezone=GMT%2B8
username: root
password: 123456
mvc: # mvc适配器配置
view:
prefix: /
suffix: .jsp
# mybatis mapper文件配置
mybatis:
mapper-locations: classpath:com/ix/mapper/*Mapper.xml #指定mapper配置文件位置
type-aliases-package: com.ix.bean #指定起别名来的类
@SpringBootApplication
@MapperScan("com.ix.dao") //扫描dao层
public class SpringbootDemoApplication extends SpringBootServletInitializer{
public static void main(String[] args) {
SpringApplication.run(SpringbootDemoApplication.class,args);
}
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(SpringbootDemoApplication.class);
}
}
public class Person implements Serializable {
private String id;
private String name;
private Integer age;
private Double salary;
@DateTimeFormat(pattern = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd", timezone="GMT+8")
private Date bir;
}
public interface PersonDao {
List<Person> findPersonAll();
Person findPersonById(String id);
void addPerson(Person person);
void updatePerson(Person person);
void deletePersonById(String id);
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.ix.dao.PersonDao">
<select id="findPersonAll" resultType="Person">
SELECT id,name,age,salary,bir FROM person
</select>
<select id="findPersonById" resultType="Person">
SELECT id,name,age,salary,bir FROM person
WHERE id= #{id}
</select>
<insert id="addPerson">
INSERT INTO person VALUES(#{id},#{name},#{age},#{salary},#{bir})
</insert>
<update id="updatePerson">
UPDATE person SET name=#{name},age=#{age},salary=#{salary},bir=#{bir}
WHERE id=#{id}
</update>
<delete id="deletePersonById">
DELETE FROM person WHERE id=#{id}
</delete>
</mapper>
public interface PersonService {
List<Person> findPersonAll();
Person findPersonById(String id);
void addPerson(Person person);
void updatePerson(Person person);
void deletePersonById(String id);
}
@Service
@Transactional(propagation = Propagation.REQUIRED)
public class PersonServiceImple implements PersonService {
@Autowired
private PersonDao personDao;
@Transactional(propagation = Propagation.SUPPORTS)
@Override
public List<Person> findPersonAll() {
return personDao.findPersonAll();
}
@Transactional(propagation = Propagation.SUPPORTS)
@Override
public Person findPersonById(String id) {
return personDao.findPersonById(id);
}
@Override
public void addPerson(Person person) {
person.setId(UUID.randomUUID().toString().replace("-",""));
personDao.addPerson(person);
}
@Override
public void updatePerson(Person person) {
personDao.updatePerson(person);
}
@Override
public void deletePersonById(String id) {
personDao.deletePersonById(id);
}
}
@Controller
@RequestMapping("person")
public class PersonController {
@Autowired
private PersonService personService;
@ResponseBody
@RequestMapping("findPersonAll")
public List<Person> findPersonAll() {
return personService.findPersonAll();
}
@ResponseBody
@RequestMapping("findPersonById")
public Person findPersonById(String id) {
return personService.findPersonById(id);
}
@RequestMapping("addPerson")
@ResponseBody
public void addPerson(Person person) {
personService.addPerson(person);
}
@RequestMapping("updatePerson")
@ResponseBody
public void updatePerson(Person person) {
personService.updatePerson(person);
}
@RequestMapping("deletePersonById")
@ResponseBody
public void deletePersonById(String id) {
personService.deletePersonById(id);
}
}
项目镜像制作
[root@docker ~]# mkdir demo
[root@docker ~]# cd demo
[root@docker demo]# vim Dockerfile
FROM openjdk:8
WORKDIR /demo
ADD demo.jar /demo
ExPOSE 8089
ENTRYPOINT ["java","-jar"]
CMD ["demo.jar"]
[root@docker demo]# mv /root/demo.jar /root/demo
[root@docker demo]# ls
demo.jar Dockerfile
[root@docker demo]# docker build -t registry.cn-hangzhou.aliyuncs.com/slowlove/demo:v0.1 ./
Sending build context to Docker daemon 21.95MB
Step 1/6 : FROM openjdk:8
---> 82f24ce79de6
Step 2/6 : WORKDIR /demo
---> Using cache
---> d96506c0908e
Step 3/6 : ADD demo.jar /demo
---> d3ab845e0ead
Step 4/6 : ExPOSE 8089
---> Running in f8aedeba089c
Removing intermediate container f8aedeba089c
---> bdd3557e09b0
Step 5/6 : ENTRYPOINT ["java","-jar"]
---> Running in b6d84d845fcc
Removing intermediate container b6d84d845fcc
---> b2c357cfa446
Step 6/6 : CMD ["demo.jar"]
---> Running in a1950fc871cc
Removing intermediate container a1950fc871cc
---> 2833e0ad1a6f
Successfully built 2833e0ad1a6f
Successfully tagged registry.cn-hangzhou.aliyuncs.com/slowlove/demo:v0.1
[root@docker demo]# docker run --rm --name demo -p 8089:8089 registry.cn-hangzhou.aliyuncs.com/slowlove/demo:v0.1
[root@docker demo]# rm -rf demo.jar
测试
http://192.168.66.13:8089/demo/index.html
上传镜像至阿里云
更改标签
[root@docker ~]# docker tag slowlove/mysql:v0.1 registry.cn-hangzhou.aliyuncs.com/slowlove/mysql:v0.1
查看镜像
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
slowlove/mysql v0.1 83ad6e0a58d0 4 minutes ago 302MB
registry.cn-hangzhou.aliyuncs.com/slowlove/mysql v0.1 83ad6e0a58d0 4 minutes ago 302MB
mysql 5.6 6419e0ef7c31 41 hours ago 302MB
上传mysql镜像和项目镜像
[root@docker ~]# docker push registry.cn-hangzhou.aliyuncs.com/slowlove/mysql:v0.1
[root@docker demo]# docker push registry.cn-hangzhou.aliyuncs.com/slowlove/demo:v0.1
为了确保制作的镜像可以使用,我们需要删除之前的镜像,重新下载
[root@docker ~]# docker kill first-mysql
first-mysql
[root@docker demo]# docker kill demo
demo
[root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
删除本地镜像
[root@docker ~]# docker rmi registry.cn-hangzhou.aliyuncs.com/slowlove/demo:v0.1
[root@docker ~]# docker rmi registry.cn-hangzhou.aliyuncs.com/slowlove/mysql:v0.1
查看镜像
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
slowlove/mysql v0.1 83ad6e0a58d0 24 hours ago 302MB
openjdk 8 82f24ce79de6 46 hours ago 514MB
mysql 5.6 6419e0ef7c31 2 days ago 302MB
测试上传阿里云的镜像
[root@docker ~]# docker run --rm --name first-mysql -v /data/mysql/:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d slowlove/mysql:v0.1
[root@docker ~]# docker run --rm --name demo -p 8089:8089 registry.cn-hangzhou.aliyuncs.com/slowlove/demo:v0.1
测试
http://192.168.66.13:8089/demo/index.html