docker四运行java程序
一、运行简单的java程序
1、准备一个简单的java web程序,打成jar包之后上传到服务器上。
2、创建Dockerfile文件
# 基于openjdk镜像
FROM openjdk:8
#定义环境变量
ARG MS_NAME=docker-demo
ENV JAVA_OPTS="-Xms512m -Xmx512m -Xmn200m -Xss512K"
#声明需要暴露的端口
EXPOSE 2001
#设置工作目录
WORKDIR /app/data/${MS_NAME}
# 复制文件到容器目录
ADD ${MS_NAME}*.jar .
#定义匿名数据卷
VOLUME ["/app/data/${MS_NAME}/logs"]
#配置容器启动后执行的命令
ENTRYPOINT java ${JAVA_OPTS} -Duser.timezone=GMT 8 -Dlog4j2.formatMsgNoLookups=true -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=256m -XX: DisableExplicitGC -XX: UseConcMarkSweepGC -XX: CMSParallelRemarkEnabled -XX: UseFastAccessorMethods -XX: UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70 -XX: HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=dump/${MS_NAME}.dump -jar ${MS_NAME}*.jar
以上命令涉及到宿主机的目录或者文件是相对dockerfile文件相对路径。
3、生成镜像
将jar包和Dockerfile文件上传到宿主机上,如下图:
执行以下命令,生成镜像。
docker build -t demo-test .
其中demo-test代码镜像名称,.代表dockerfile文件所在目录在当前目录。
4、启动镜像
我这里拿我之前已经构建好的镜像为示例(方便自己记忆,同时方便后文讲解),如下图:
上图的eureka等都是构建好的镜像,启动命令如下:
run -d -e PROFILE="dev" -p 2014:2014 --hostname ms-recognition-1 --name ms-recognition-1 --network test-net host:5000/library/ms-recognition:1.2.0
其中,PROFILE="dev"代表开发环境,2014:2014代码端口映射为2014,容器名称为ms-recognition-1。
在Docker中,默认情况下容器与容器、容器与外部宿主机的网络是隔离开来的。当你安装Docker的时候,docker会创建一个桥接器docker0,通过它才让容器与容器之间、与宿主机之间通信。
上面命令中的–network就是指定桥接网络,保证容器之间进行通信的。我们docker中的network 如下:
5、日志查看
镜像启动之后,我们查看已经启动的容器:
利用docker logs -f 93c70416fca7查看实时日志(这里就不截图了)。
至此,启动完成。
二、docker-maven-plugin插件使用
对于maven项目来说,除了上面的方法之外,还有一个插件的方法能够进行docker构建镜像和启动。
1、修改宿主机的docker配置,开放2375端口,让其可以远程访问
//修改配置文件
vi /lib/systemd/system/docker.service
修改内容如下:
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock \
表示允许任何远程客户端通过 2375 端口连接 Docker Daemon。
重启:
systemctl daemon-reload //加载docker守护线程
systemctl restart docker //重启docker
2、关闭防火墙
参考linux防火墙的操作。
3、修改pom.xml文件
新增如下配置:
<plugin>
<groupId>io.fabric8</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.35.0</version>
<executions>
<execution>
<id>docker-build</id>
<goals>
<goal>build</goal>
</goals>
<phase>package</phase>
</execution>
<execution>
<id>docker-push</id>
<goals>
<goal>push</goal>
</goals>
<phase>install</phase>
</execution>
</executions>
<configuration>
<!--指定远程 docker api地址-->
<dockerHost>http://XXX:2375</dockerHost>
<images>
<image>
<!--镜像名(含版本号)-->
<!--私有仓库地址和端口,再加上镜像id和TAG,我们要直接传到私服-->
<name>
XXX:5000/library/${project.name}:${project.version}
</name>
<!--registry地址,用于推送,拉取镜像-->
<registry>XXX</registry>
<!--指定远程 docker api地址-->
<build>
<dockerFile>${project.basedir}/Dockerfile</dockerFile>
<contextDir>${project.basedir}/target/package</contextDir>
</build>
</image>
</images>
</configuration>
</plugin>
4、打包和推送
如图所示,先build,再push就能在docker镜像中构建。然后就是和简单java程序一样进行启动镜像进行使用了。
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgcgkaf
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01