老祖宗的話說得好呀:實踐出真知
自己打個簡單的鏡像運行 遇到了一堆破問題
學習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