docker自己部署一个项目
老祖宗的话说得好呀:实践出真知
自己打个简单的镜像运行 遇到了一堆破问题
学习docker主要在菜鸟教程 https://www.runoob.com/docker/docker-container-usage.html
知识点壹
第一个端口是真实机器的,第二个端口是docker的
docker run -p 13138:13131 -d lastt
***************************************************************************************************
知识点贰
我们自己启动jar包时 喜欢java -jar
但是这个命令放在docker文件里,总是发生启动后立即阿挂掉
这是一篇博主的总结
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 <eangulee@gmail.com> # 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的镜像作为基础镜像,以后再制作镜像的时候就不会再下载了。
Docker搭建MySQL主从集群
这是爱宝贝写的一个docker部署mysql的一个文档,这是回头补的总结,第一次部署时候应该是noproblem的,很久没上服务器了
又折腾了一哈docker 重启了 要重新启动这个主从服务,照搬的命令是不行的
去掉了name
docker run --privileged=true -v /home/mysql/master-data:/var/lib/mysql -p 13306:3306 -e MYSQL_ROOT_PASSWORD=root -d xiaochunping/mysql-master
去掉了name和link
docker run --privileged=true -v /home/mysql/slave-data:/var/lib/mysql -p 13307:3306 -e MYSQL_ROOT_PASSWORD=root -d xiaochunping/mysql-slave