docker运行程序

一般文档使用docker的docker-maven-plugin插件可以生成镜像,配置如下

 <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>0.4.14</version>
                <configuration>
                    <imageName>renren/fast</imageName>
                    <dockerDirectory>${project.basedir}</dockerDirectory>
                    <resources>
                        <resource>
                            <targetPath>/</targetPath>
                            <directory>${project.build.directory}</directory>
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                </configuration>
                <!-- 运行命令 mvn clean package docker:build 打包并生成docker镜像 -->
            </plugin>

imageName指定了镜像名称,应该生成镜像也是需要同级目录的Dockerfile文件。由于在windows开发环境没有docker,我们将jar包上传到linux服务器。

还有Dockerfile文件。

  Dockerfile内容如下

FROM java:8
EXPOSE 9101

VOLUME /tmp
ADD televr.jar  /app.jar
RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-jar","/app.jar"]

在当前目录进行镜像运行 Docker build打包  -t指明镜像名称 -f指明文件 .指明在当前目录

然后查看生成的镜像

运行镜像,这里没有在后台运行ctrl+c结束程序,容器就关闭了。

springboot是8080端口,docker对外暴露是9101端口,外面通过9101访问访问不到。重新指定端口映射

使用-p指定端口映射,-d为后台运行。注意参数要在前面。下面NAMES容器名称,可以通过--name 指定比如docker run -p 8080:8080 --name televr televr:v1 

[root@izuf6buyhgwtrx60bq2okoz televr]# docker run -p 9101:8080 -d televr:v1 
1c7139e67e4fb3e207987fa92031e76f866577f57148af583c168f38fbd3ef24
[root@izuf6buyhgwtrx60bq2okoz televr]# docker ps
CONTAINER ID        IMAGE                       COMMAND                  CREATED             STATUS              PORTS                              NAMES
1c7139e67e4f        televr:v1                   "java -jar /app.jar"     20 seconds ago      Up 12 seconds       9101/tcp, 0.0.0.0:9101->8080/tcp   jolly_ardinghelli
ad5b52ca9150        bladex/sentinel-dashboard   "java -Djava.securit??   4 weeks ago         Up 4 weeks          8719/tcp, 0.0.0.0:8858->8858/tcp   sentinel

通过外面telnet虚拟机的9101端口连接不上,在虚拟机本机telnet localhost 9101 会出现如下Connection closed by foreign host

停止容器运行,估计是虚拟机没有开放9101端口

docker stop dd5915f69ec9d5e252b16232ea8d8d3d001b29d8f2cbf371020a8a4a5fb281bc

使用8080端口(开放外网访问) 启动容器 docker run -p 8080:8080 -d --name televr televr:v1 进入容器内部验证访问成功

[root@izuf6buyhgwtrx60bq2okoz televr]# docker exec -it 1f61c3dc0d40 bash 
root@1f61c3dc0d40:/# curl http://localhost:8080/televr/sys/config/list

外网telnet成功,访问成功。Dockfile配置的Expose端口9101只是说明容器要暴露的端口,实际我们并不是这个段口。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值