docker自己部署一个项目

老祖宗的话说得好呀:实践出真知

自己打个简单的镜像运行  遇到了一堆破问题

学习docker主要在菜鸟教程  https://www.runoob.com/docker/docker-container-usage.html

知识点壹

第一个端口是真实机器的,第二个端口是docker的

docker run -p 13138:13131 -d lastt

***************************************************************************************************

知识点贰

我们自己启动jar包时  喜欢java -jar

但是这个命令放在docker文件里,总是发生启动后立即阿挂掉

扫描二维码关注公众号,回复: 7367898 查看本文章

这是一篇博主的总结

https://blog.csdn.net/do_it_/article/details/80014321

最近在看docker如何让容器在启动时直接运行某些进程,后来发现Dockerfile可以在容器启动的时候指定容器运行命令。

CMD指定,但是每个Dockerfile只能有一条CMD指令,如果指定了多条CMD指定,只有最后一条会被执行。

于是就想了一个办法,在写了一个脚本,在脚本里面启动多个进程,在Dockerfile里运行这个脚本。

最后证明这个方法是可行的,在实验过程中遇到一个问题,容器启动后会马上停止。

经查阅资料:

Docker容器同时只能管理一个进程,如果这个进程退出那么容器也就退出了,但这不表示容器只能运行一个进程(其他进程可在后台运行),但是要使容器不退出必须有一个前台执行的进程。

解决方法:

脚本中最后一个进程一定要用前台运行方式即在进程最后不加&(&表示后台运行),否则容器会退出。
————————————————
版权声明:本文为CSDN博主「do_it_」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/do_it_/article/details/80014321

在学习docker的时候 遇到一个坑 就是当docker容器中没有前台运行的程序的时候 docker会认为这个容器没有工作内容会自动关闭这个容器

解决方法:
在写dockerfile的时候 记得留一个在前台执行的任务 特别是在做那种一般在后台运行的服务 如mysql这样的 需要让他在前台运行 mysqld.service

这是个mysql的坑 自己还没碰到过

***************************************************************************************************

说回部署

https://blog.csdn.net/dhaiuda/article/details/82228186

我是按照这个搭的,但是犯了个傻 我的项目端口是13131,怎么映射初始端口肯定也是这个呀,我又没在启动命令里指定别的端口,当时我为啥会想成docker启动的spring项目的端口会改

真是脑抽

解决了问题后发现,这个是顺畅的,

我在解决这个问题的时候   用了https://www.jianshu.com/p/397929dbc27d这个博主的内容

3. 编写Dockerfile文件

# Docker image for springboot file run
# VERSION 0.0.1
# Author: eangulee
# 基础镜像使用java
FROM java:8
# 作者
MAINTAINER eangulee <[email protected]>
# VOLUME 指定了临时文件目录为/tmp。
# 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp
VOLUME /tmp 
# 将jar包添加到容器中并更名为app.jar
ADD demo-0.0.1-SNAPSHOT.jar app.jar 
# 运行jar包
RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

解释下这个配置文件:

VOLUME 指定了临时文件目录为/tmp。其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp。改步骤是可选的,如果涉及到文件系统的应用就很有必要了。/tmp目录用来持久化到 Docker 数据文件夹,因为 Spring Boot 使用的内嵌 Tomcat 容器默认使用/tmp作为工作目录
项目的 jar 文件作为 “app.jar” 添加到容器的
ENTRYPOINT 执行项目 app.jar。为了缩短 Tomcat 启动时间,添加一个系统属性指向 “/dev/./urandom” 作为 Entropy Source

如果是第一次打包,它会自动下载java 8的镜像作为基础镜像,以后再制作镜像的时候就不会再下载了。

猜你喜欢

转载自www.cnblogs.com/heroinss/p/11590765.html