一、运行简单的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文件
新增如下配置:文章来源:https://www.toymoban.com/news/detail-432177.html
<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程序一样进行启动镜像进行使用了。文章来源地址https://www.toymoban.com/news/detail-432177.html
到了这里,关于docker(四)运行java程序的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!