dockerfile源碼安裝mysql_docker容器詳解五: dockerfile實現tomcat環境以及源碼安裝mysql...

tomcat

上一節講到了dockerfile的基礎,這一次咱們來作一個小的練習

首先要了解tomcat安裝的整個過程

首先搭建 jdk環境:

下載jdk包,解壓以后添加環境變量

而后搭建tomcat:

下載tomcat包,解壓,修改配置文件到一個工做目錄

而后給工做目錄加入一些東西,訪問。java

From centos

add ./jdk-8u191-linux-x64.tar.gz /usr/local

add ./apache-tomcat-8.5.35.tar.gz /usr/local

ENV JAVA_HOME /usr/local/jdk

ENV CLASSPATH $JAVA_HOME/lib/

ENV PATH $PATH:$JAVA_HOME/bin

RUN mkdir -p /var/www/www.fz.com

VOLUME /var/www/www.fz.com

RUN cd /usr/local/ && mv apache-tomcat-8.5.35 tomcat && mv jdk1.8.0_191 jdk

copy ./server.xml /usr/local/tomcat/conf/

copy ./mysql-connector-java-5.1.7-bin.jar /usr/local/tomcat/lib/

workdir /usr/local/tomcat

CMD bash bin/startup.sh && tail -f logs/catalina.out

這是整個dockerfile的文件。我來一次解釋一下

From centos:

這個沒什么好說的就是一個基礎的centos的源鏡像

add:

兩個源碼包 一個是jdk的一個是tomcat的包

ENV:這里會設置環境變量,就是三個jdk的環境變量

RUN:執行命令,建立一個tomcat的工做目錄,

VOLUME:和上面一塊兒,建立目錄以后把他映射到宿主機,以即可以在外部把具體的頁面代碼放入。

RUN: 運行命令把tomcat放到制定目錄并解壓

copy:第一個是把tomcat的配置文件的副本拷貝進去,第二個是拷貝jdbc的包,以便之后鏈接數據庫時用。

workdir:后面的命令都是在/usr/local/tomcat下運行

最后一個CMD很關鍵。

前面講過,docker的鏡像運行以后在執行完命令就會自動關閉,必需要給他一個可以掛在后臺運行的命令,好比說你在run后面會加上 /bin/bash等等讓他保持活躍的狀態。否則它就會自動關閉。

這里若是只有打開tomcat而沒有后面的加載日志,那么就會在打開以后容器立刻又關閉了。因此docker ps就看不見 須要用 ps -a看全部的容器,會發現容器是關閉的。 就須要用刷新日志的方式讓tomcat在后臺與進行。保持容器的開啟狀態。

前面的須要的文件放在和dockerfile一個目錄下ok了。

而后編譯運行

7e2867fba2bbee1df0c58ab95cc558a6.png

30b498a21baa1da405547d7a29298904.png而后運行

91bb30ef3c915cd9e8b068109d692880.png中間一部分省略

077355422d46d872e3e8c780a00b1d92.png就能夠看見相似與平時的開啟tomcat的日志

b9ed67bd89a69cd4add705d32a66aee2.png若是不想要在前臺看日志,能夠-d掛入后臺。如上圖所示mysql

mysql源碼安裝

mysql源碼安裝的大體過程

1.下載源碼包,下載一些依賴包例如gcc等

2.編譯安裝

3.建立用戶和組并賦予權限,而后數據庫初始化

4.設置數據庫root密碼linux

from centos

ADD ./mysql-5.6.35.tar.gz /usr/local/

RUN yum install gcc gcc-c++ ncurses-devel perl cmake make autoconf -y

RUN cd /usr/local/mysql-5.6.35 && cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \

&& make && make install

RUN groupadd mysql && useradd -r -g mysql mysql && \

chown -R mysql:mysql /usr/local/mysql

ENV PATH /usr/local/mysql/bin:/usr/local/mysql/lib:$PATH

workdir /usr/local/mysql

RUN scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql \

--datadir=/usr/local/mysql/data --pid-file=/usr/local/mysql/data/mysql.pid

RUN support-files/mysql.server start && mysqladmin -u root password 'redhat'

COPY ./test.sql /root/

RUN support-files/mysql.server start && mysql -uroot -predhat < /root/test.sql

CMD mysqld --user=mysql

這是個人dockerfile文件

依次解釋:

from:鏡像源

add:把源碼包copy進去并解壓

run: 第一個是下載一些依賴包,第二個是編譯安裝。第三個是用戶和權限。

env:環境變量

workdir :工做目錄設在mysql目錄下

run:數據庫初始化,

第二個是開啟服務并修改root密碼

這里我踩了一個坑,修改密碼是要在開啟服務的狀態下的,一開始我沒有開服務,會出錯。第二次我知道了要開服務,而后我是先在前面開服務,在后面在加一個run修改密碼,也會出錯,為何呢?

由于dockerfile每一行命令都是把鏡像生成一個容器,而后在容器內執行命令,子啊構建成新的鏡像,這樣一來,上一個鏡像是開啟服務,像開啟服務把他單獨列在一行是沒有效果的,由于生成容器開啟服務再生成鏡像還會同樣的鏡像,下一個執行修改root密碼命令時候已是一個新的鏡像了因此服務是沒打開的。

copy:而后就是拷貝我本身寫的一個mysql的腳本進入docker

run:這個是開啟服務而且執行腳本,然數據庫生成表插入數據

cmd:這個是前臺開啟數據庫服務。

像前面一個編譯并開啟就ok了

這里數據庫的編譯是最基礎的,沒有不少參數,有需求本身加,而后這里的編譯須要的時間可能會有點久。c++

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/273111.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/273111.shtml
英文地址,請注明出處:http://en.pswp.cn/news/273111.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

pom.xml的配置詳解

<!--可以免費轉載&#xff0c;轉載時請注明出處 http://pengqb.iteye.com 。--><project xmlns"http://maven.apache.org/POM/4.0.0 " xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance " xsi:schemaLocation"http://maven.apache.or…

azkaban 與 java任務_azkaban任務報錯java.lang.RuntimeException: The root scratch dir: /tmp/hive...

azkaban運行任務的時候失敗報錯如下&#xff1a;23-03-2016 08:16:14 CST analyzer-kafka2hdfs_new ERROR - Exception in thread "main" org.apache.hive.service.cli.HiveSQLException: java.lang.RuntimeException: The root scratch dir: /tmp/hive on HDFS shou…

php-fpm的重啟/關閉

php 5.3.3 下的php-fpm 不再支持 php-fpm 以前具有的 /usr/local/php/sbin/php-fpm (start|stop|reload)等命令&#xff0c;需要使用信號控制&#xff1a; INT, TERM 立刻終止QUIT 平滑終止USR1 重新打開日志文件USR2 平滑重載所有worker進程并重新載入配置和二進制模塊 kill -…

SQL server 2008數據庫的備份與還原、分離(轉)

一、SQL數據庫的備份&#xff1a; 1、依次打開 開始菜單 → 程序 → Microsoft SQL Server 2008 → SQL Server Management Studio → 數據庫&#xff1a;Dsideal_school_db既是我們需要備份的學籍數據庫 圖&#xff08;1&#xff09; 2、選擇要備份的數據庫“Dsideal_school_d…

Java做一個動畫效果音量調節_設計與實現一個 ISoundable 接口,該接口具有發聲功能、還能調節音量大小...

[java]代碼庫package experiment6;public interface ISoundable {public void increaseVolume();public void decreaseVolume();public void stopSound();public void playSound();}package experiment6;public class Radio implements ISoundable {public void increaseVolume…

人人都有極客精神

http://www.jisuanke.com/minicourse/59/438 人人公司是一家極為鼓勵極客精神的公司&#xff0c;當有重要的項目需要上線但又時間太緊&#xff0c;甚至需要當天上線的時候&#xff0c;往往會掛起海盜旗開啟電子日期顯示&#xff0c;讓大家可以在對時間有更明確的感知的情況下&a…

WPF入門教程系列十三——依賴屬性(三)

四、 只讀依賴屬性 在以前在對于非WPF的功能來說&#xff0c;對于類的屬性的封裝中&#xff0c;經常會對那些希望暴露給外界只讀操作的字段封裝成只讀屬性&#xff0c;同樣在WPF中也提供了只讀屬性的概念&#xff0c;如一些 WPF控件的依賴屬性是只讀的&#xff0c;它們經常用于…

java 反編譯 類名_java javassist創建類和反編譯類

public class Byte {public static void main(String[] args) throws Exception {//獲得類池ClassPool poolClassPool.getDefault();//創建類CtClass ccpool.makeClass("cn.sxt.in.Emp");//創建屬性CtField f1 CtField.make("private int empno;", cc);Ct…

java生成動態驗證碼_動態生成驗證碼案例

servlet代碼package cn.guizimo.web.servlet;import javax.imageio.ImageIO;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.…

TCP、UDP、HTTP、SOCKET之間的區別

http://blog.csdn.net/magister_feng/article/details/8634518 轉載于:https://www.cnblogs.com/luningning0901/p/4667733.html

特征選擇算法java實現_relief算法特征選擇

1.[文件]Relief算法程序.txt ~ 6KB下載(44)package com.relief.algorithm;import java.util.Random;import java.util.Set;import java.util.ArrayList;import java.util.Collections;import java.util.HashMap;import java.util.List;import java.util.Map;public class Relie…

freemarker跳出循環

break語句跳出當前循環&#xff0c;如下: <#list table.columns as c> <#if c.isPK> <#assign pkNamec.columnName?cap_first /> <#break> </#if> </#list>轉載于…

多線程程序排錯總結

先不考慮其他因素&#xff0c;直接干掉密集IO操作&#xff0c;把并行IO變成串行IO 要沉下心來&#xff0c;先瀏覽一遍代碼&#xff0c;看看是否有有問題的地方&#xff0c;首先找加鎖的地方 沒有辦法的辦法是&#xff0c;用二分法&#xff0c;一行一行的來定位轉載于:https://w…

java如何將數據保存為xml6_用Java實現可保存狀態的數據庫生成XML樹,源碼來了(9)...

用Java實現可保存狀態的數據庫生成XML樹&#xff0c;源碼來了(9)時間&#xff1a;2006/7/19 5:38:30作者&#xff1a;佚名人氣&#xff1a;306.3.2.Servlet源碼1.RefreshServlet.javapackage com.sitechasia;import javax.servlet.*;import javax.servlet.http.*;import java.i…

企業服務總線全雙工異步通信機

為了實現系統的高可靠性、高可用性和并行處理能力&#xff0c;我們經常使用一些負載均衡設備&#xff08;例如F5&#xff09;等集群解決方案。但&#xff0c;會有一些特殊的情況下&#xff0c;。例如&#xff0c;長連接、特殊的技術協議。不可用F5和其他設備來解決&#xff0c;…

java druid jdbc例子_JDBC【使用Druid連接數據庫,DBUtils工具類的使用】

Druid連接數據庫&#xff0c;DBUtils工具類的使用1.在maven中添加Druid依賴com.alibabadruid1.2.02.封裝Druid連接方法import com.alibaba.druid.pool.DruidDataSource;import com.alibaba.druid.pool.DruidDataSourceFactory;import java.io.IOException;import java.io.Input…

TimerTask定時任務

web.xml <listener><listener-class>com.sign.listener.NFDFlightDataTaskListener</listener-class></listener> 監聽器類 package com.sign.listener;import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener;impor…

java前后端接口文檔_前后端交互接口設計規范

在開發web應用的時候&#xff0c;往往會涉及到一個問題&#xff0c;前端后接口定義的問題。接口定義設計的好壞很大程度上能影響一個項目的進度和可擴展性。但是前輩們在這個問題上留下了非常寶貴的一些常規的設計思路&#xff0c;值得我們參考。1、后端設計統一的返回模型在與…

2015 多校第三場

1002 求max&#xff08;f(a),f(b)&#xff09;, f為不重復的素因子個數&#xff0c; 在數據要求以內 &#xff0c; 每個數最多有7個&#xff0c;可以打表。 1 /*Author :usedrose */2 /*Created Time :2015/7/29 11:32:09*/3 /*File Name :2.cpp*/4 #include <cstdio>5 …

java多線程必須掌握嗎_多線程模式有什么作用(java多線程必須掌握的知識)

什么叫多進程&#xff1f;在預估中&#xff0c;過程是已經實行的計算機語言的一個案例。或是簡易地說&#xff0c;運作程序流程也稱之為過程。多進程代表著“在單獨計算機軟件中具備2個或更好幾個CPU。比如&#xff0c;假如計算機軟件具備雙核四線程&#xff0c;而且另外運作(實…