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了。
而后編譯運行
而后運行
中間一部分省略
就能夠看見相似與平時的開啟tomcat的日志
若是不想要在前臺看日志,能夠-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++