Docker镜像篇(10)- 综合练习 - springboot项目制作镜像

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

Docker镜像篇(9) - 镜像原理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值