博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Docker $ 项目部署 :Docker 部署 SpringBoot + Mysql
阅读量:4104 次
发布时间:2019-05-25

本文共 3320 字,大约阅读时间需要 11 分钟。

一.Dockerfile常用指令

  • FROM

目的

指定基础镜像

特点

需要写在其他指令之前,之后的指令都依赖于该指令指定的镜像。

语法

FROM <image>

FROM <image>:
FROM <image>@

实例

FROM java:8

  • ADD

目的

1.复制文件

语法

ADD ["",…""]

ADD <src>…<dest>
从src复制文件到容器的dest。src可以是Dockerfile所在目录的相对路径。

实例

ADD spring-boot-docker.jar app.jar

拷贝文件并且重命名

  • VOLUME

目的

1.加载本地目录下的配置文件到容器目标地址下

2.使容器中的一个目录具有持久化存储的功能,该目录可被容器本身使用,也可共享其他容器。。

语法

VOLUME ["<路径1>","<路径2>"…]

VOLUME <路径>

实例

VOLUME /tmp

VOLUME 指向了一个 /tmp的目录,由于 Spring Boot 使用内置的Tomcat容器,Tomcat 默认使用 /tmp作为工作目录。这个命令的效果是:在宿主机的 /var/lib/docker目录下创建一个临时文件并把它链接到容器中的 /tmp目录

  • EXPOSE

目的

声明端口

特点

声明容器打算用什么端口,不会自动在宿主进行端口映射。

运行时用随机映射,会自动映射EXPOSE的端口。
-p <宿主端口>:<容器端口>,将容器对应端口服务公开给外界访问。

语法

EXPOSE <端口1> [<端口2>…]

实例

EXPOSE 8080

  • ENTRYPOINT

目的

入口点,在指定容器启动程序及参数

特点

场景一:让镜像变成像命令一样使用。

场景二:应用运行前的准备工作。
可多次设置,但只有最后一个有效。

语法

ENTRYPOINT[“executable”,“param1”,“param2”]

ENTRYPOINT command param1 param2

实例

ENTRYPOINT [“java”,"-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

为了缩短 Tomcat 的启动时间,添加 java.security.egd的系统属性指向 /dev/urandom作为 ENTRYPOINT

二.部署SpringBoot+Mysql

1.准备部署项目

1.完整项目在笔者github:

2.将项目打包为.jar形式,任意文件夹
在这里插入图片描述

2.编写Dockerfile
FROM java:8VOLUME /tmpADD spring-boot-docker.jar /app.jarEXPOSE 8080ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
3.编译镜像
# docker build -t spring-boot-docker .末尾的点代表文件所在目录执行,指上下文目录

在这里插入图片描述

编译好的镜像如下:
在这里插入图片描述

4.安装Mysql

  创建用来保存mysql的数据,可多个容器共享一个数据卷,当容器被删除时,数据卷不会被删除,mysql的数据依然存在。

# docker volume create mysql_data

运行mysql容器

#  docker run --name mysql -v mysql_data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=roof -p 3306:3306 -d mysql:5.7

-v mysql_data:/var/lib/mysql

/var/lib/mysql是mysql容器数据存储位置
-e MYSQL_ROOT_PASSWORD=t
设置mysql密码

5.数据库配置

1.进入mysql容器

# docker exec -it mysql bash

2.输入用户名密码

mysql -u root -p

3.设置外部网络访问mysql权限

ALTER user 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'roof';
FLUSH PRIVILEGES;

4.创建数据库,添加数据

create database springbootDROP TABLE IF EXISTS `users`;CREATE TABLE `users` (  `user_id` varchar(20) NOT NULL,  `user_password` varchar(100) DEFAULT NULL,  PRIMARY KEY (`user_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;INSERT INTO `users` VALUES ('hly', '123');
6.启动项目
docker run --name spring-boot-docker -d -p 8080:8080 --link mysql:mysql spring-boot-docker

--link :alias 添加链接到另一个容器;

name和id是源容器的name和id,alias是源容器在link下的别名。

三.初始化Mysql数据

  为了方便部署,无需每次部署都需要运行mysql数据库,然后再进行创建表,插入数据等一些列操作,我们可以制作一个mysql镜像,初始化数据库的数据。

1.准备工作

首先需要创建一个文件夹,添加四个文件,如下。

  • Dockerfile
FROM mysql:8# 把数据库初始化数据文件复制到工作目录COPY springboot.sql /springboot.sqlCOPY privileges.sql /privileges.sql# 把要执行的shell文件放到/docker-entrypoint-initdb.d/目录下,容器会自动执行这个shellCOPY setup.sh /docker-entrypoint-initdb.d/setup.sh# 给执行文件增加可执行权限RUN chmod a+x /docker-entrypoint-initdb.d/setup.sh
  • springboot.sql
create database springboot;use springboot;DROP TABLE IF EXISTS `users`;CREATE TABLE `users` (  `user_id` varchar(20) NOT NULL,  `user_password` varchar(100) DEFAULT NULL,  PRIMARY KEY (`user_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;INSERT INTO `users` VALUES ('hly', '123');
  • privileges.sql
use springboot;ALTER user 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'roof';FLUSH PRIVILEGES;
  • setup.sh
    制作sh文件,执行sql脚本。
#!/bin/bashmysql -u root -p$MYSQL_ROOT_PASSWORD <

在这里插入图片描述

2.编译镜像
# docker build -t mysql .
3.运行容器
# docker run -it --rm --name mysql -e MYSQL_ROOT_PASSWORD=roof -p 3306:3306 -d
4.进入容器
# docker exec -it 1a6 bash

查看表,发现已经创建

在这里插入图片描述
在这里插入图片描述

ABOUT

公众号:【星尘Pro】

github:

推荐阅读

转载地址:http://hbfsi.baihongyu.com/

你可能感兴趣的文章
第四章 - 程序计数器
查看>>
第七章 - 本地方法栈
查看>>
第十一章 - 直接内存
查看>>
JDBC核心技术 - 上篇
查看>>
JDBC核心技术 - 下篇
查看>>
一篇搞懂Java反射机制
查看>>
一篇彻底搞懂Java注解与枚举类
查看>>
【2021-MOOC-浙江大学-陈越、何钦铭-数据结构】树
查看>>
【2021-MOOC-浙江大学-陈越、何钦铭-数据结构】树-中
查看>>
【2021-MOOC-浙江大学-陈越、何钦铭-数据结构】线性结构
查看>>
【2021-MOOC-浙江大学-陈越、何钦铭-数据结构】图
查看>>
JSP中文验证码
查看>>
JavaScript学习笔记1:鼠标划过选中
查看>>
JavaScript学习笔记2之特殊公告栏效果
查看>>
AJAX视频教程下载
查看>>
android 开发资源
查看>>
九度1001 A+B for Matrices
查看>>
九度1002 Grading
查看>>
九度1003 A+B
查看>>
__INT64的用法
查看>>