1.创建架包
注:将项目docker化的时候需要注意的是一些经常变化的参数不能写死(比如mysql的数据库地址)我们需要将其以变量的方式进行保留。
以mysql的url为例:
url: jdbc:mysql://${mysql.address}:3306/mybaby?useUnicode=true&characterEncoding=utf8
至于这个参数如何传进来,后面有介绍。
在pom.xml中增加spring-boot-maven-plugin和maven-compiler-plugin的插件,如下:
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<source>1.8</source> <!-- 源代码使用的JDK版本 --> <target>1.8</target> <!-- 需要生成的目标class文件的编译版本 --> </configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
执行maven的package打包的命令
项目打包完成:
2.编写Dockerfile
Dockerfile具体内容:
FROM openjdk:8-jre
MAINTAINER mdh mdhcode@163.com
COPY target/mybaby2017-0.0.1-SNAPSHOT.jar mybaby.jar
ENTRYPOINT ["java","-jar","/mybaby.jar"]
3.上传架包和Dockfile文件到linux系统中
此处使用的是intellij自带的linux远程连接系统,具体操作参考备注。
构建命令:
docker build -t mybabyapp:latest .
docker build -t ace-monitor-app:latest .
后面有.表示当前目录下,执行命令,然后构建成功,如下图所示:
执行docker images ,可以看到创建好的镜像:
4.创建mysql容器实现数据的持久化
拉取mysql镜像
docker pull mysql:5.7
简单的创建mysql容器比较简单,直接执行docker run -d -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 mysql
不过要实现mysql容器的持久化,步骤如下:
参考地址:1.https://blog.csdn.net/u014690615/article/details/83692683(较为详细)
创建一个mysql的容器
docker run -p 3306:3306 --name mysql -v /root/commonConfig/mysql/conf:/etc/mysql/conf.d -v /root/commonConfig/mysql/logs:/logs -v /root/commonConfig/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
相关的命令说明:
-p 3306:3306:将主机的3306端口映射到docker容器的3306端口。
--name mysql:运行服务名字
-v /root/commonConfig/mysql/conf:/etc/mysql/conf.d :将主机/root/commonConfig/mysql/录下的conf/my.cnf 挂载到容器的 /etc/mysql/conf.d
-v /root/commonConfig/mysql/logs:/logs:将主机/root/commonConfig/mysql/目录下的 logs 目录挂载到容器的 /logs。
-v /root/commonConfig/mysql/data:/var/lib/mysql :将主机/root/commonConfig/mysql/目录下的data目录挂载到容器的 /var/lib/mysql
-e MYSQL_ROOT_PASSWORD=123456:初始化 root 用户的密码。
-d mysql:5.7 : 后台程序运行mysql5.7
--character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci :给mysql设置相应的编码格式(不过如果数据库中的相关表已经创建好了,这儿不设置也没有啥影响)
然后使用图形化数据管理工具进行数据库的操作,这里使用的是sqlyog
连接到创建好的mysql容器中,然后执行sql脚本创建相关的数据库和表
创建完成。
然后删除容器,再以上面的方式进行创建的时候就发现,数据库中的表等信息并未发生改变。既mysql容器实现了数据持久化。
5.将spingboot和MySQL联合起来使用。
首先需要将mysql容器运行起来
然后:
形式一:springboot里面与mysql的配置参数写死的情况:
spring: datasource: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://192.168.144.101:3306/mybaby?useUnicode=true&characterEncoding=utf8 username: root password: 123456
创建镜像:docker build -t mybaby:latest .
运行容器:docker run -it -p 8088:8080 --name mybaby mybaby:latest
然后地址栏输入:http://192.168.144.101:8088/baby/home,即可访问相关的项目
形式二:springboot中以变量的形式代替具体的配置参数,然后在动态创建容器的时候,将参数传进来
spring: datasource: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://${mysql.address}:3306/mybaby?useUnicode=true&characterEncoding=utf8 username: ${mysql.username} password: ${mysql.password}
创建镜像:docker build -t mybaby:2.0 .
创建容器:docker run -it -p 8088:8080 --name mybaby2 mybaby:2.0 --mysql.address=192.168.144.101 --mysql.username=root --mysql.password=123456
将相关的需要的参数动态的传入进去
6.向镜像仓库推送镜像
docker tag ace-monitor-app:latest 192.168.40.94/common_images/ace-monitor-app:0.9
给镜像打标签:
docker tag SOURCE_IMAGE[:TAG] 192.168.40.94/common_images/IMAGE[:TAG]
将镜像推送至镜像仓库:
docker push 192.168.40.94/common_images/IMAGE[:TAG]
docker push 192.168.40.94/common_images/ace-monitor-app:0.9