docker(四)运行java程序

8 篇文章 0 订阅

一、运行简单的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程序一样进行启动镜像进行使用了。

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值