Intellij生成docker镜像

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(较为详细)

  1. https://blog.csdn.net/woniu211111/article/details/80968154

创建一个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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容