松江手機(jī)網(wǎng)站建設(shè)上海關(guān)鍵詞seo
dockerfile自定義鏡像安裝jdk8,nginx,后端jar包和前端靜態(tài)文件,并啟動(dòng)容器訪問(wèn)
- 簡(jiǎn)介
- centos7系統(tǒng)里面我準(zhǔn)備的服務(wù)如下:
- 5gsignplay-web靜態(tài)文件內(nèi)容如下:
- nginx.conf配置文件內(nèi)容如下:
- Dockerfile內(nèi)容如下:
- run.sh啟動(dòng)腳本內(nèi)容如下:
- 制作鏡像并啟動(dòng)訪問(wèn)
簡(jiǎn)介
通過(guò)用dockerfile來(lái)制作一個(gè)自定義的鏡像,基礎(chǔ)鏡像是centos7,然后里面安裝jdk8,安裝nginx,啟動(dòng)的后端jar包,以及前端打包的靜態(tài)文件,將這些放到一個(gè)docker容器里面,然后啟動(dòng)容器訪問(wèn)項(xiàng)目。
centos7系統(tǒng)里面我準(zhǔn)備的服務(wù)如下:
這里我將測(cè)試需要的文件都放在了/opt/wrapper/test目錄下面。
5gsignplay-web靜態(tài)文件內(nèi)容如下:
nginx.conf配置文件內(nèi)容如下:
#user nobody;
worker_processes 1;#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;#pid logs/nginx.pid;events {worker_connections 1024;
}http {include mime.types;default_type application/octet-stream;#log_format main '$remote_addr - $remote_user [$time_local] "$request" '# '$status $body_bytes_sent "$http_referer" '# '"$http_user_agent" "$http_x_forwarded_for"';#access_log logs/access.log main;sendfile on;#tcp_nopush on;#keepalive_timeout 0;keepalive_timeout 65;#gzip on;server {listen 80;server_name 192.168.5.43;#填寫你的宿主機(jī)ip#charset koi8-r;#access_log logs/host.access.log main;location / {root /usr/local/project/5gsignplay-web;index index.html;}#error_page 404 /404.html;# redirect server error pages to the static page /50x.html#error_page 500 502 503 504 /50x.html;location = /50x.html {root html;}# proxy the PHP scripts to Apache listening on 127.0.0.1:80##location ~ \.php$ {# proxy_pass http://127.0.0.1;#}# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000##location ~ \.php$ {# root html;# fastcgi_pass 127.0.0.1:9000;# fastcgi_index index.php;# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;# include fastcgi_params;#}# deny access to .htaccess files, if Apache's document root# concurs with nginx's one##location ~ /\.ht {# deny all;#}}}
Dockerfile內(nèi)容如下:
FROM centos:7# 描述作者和郵箱,可只寫其中一個(gè),也可二個(gè)都寫
MAINTAINER test test@163.com# 時(shí)區(qū)與字符設(shè)置UTF-8并配置環(huán)境
ENV TZ=Asia/Shanghai
ENV LANG=C.UTF-8# 在容器里面創(chuàng)建一個(gè)java目錄,用來(lái)放拷貝過(guò)來(lái)的文件,RUN用來(lái)執(zhí)行l(wèi)inux命令
RUN mkdir /usr/local/java
# 在容器內(nèi)創(chuàng)建一個(gè)project目錄和子目錄5gsignplay-web,用來(lái)存放后端jar包和前端打包好的靜態(tài)頁(yè)面
RUN mkdir -p /usr/local/project/5gsignplay-web
# 把jdk-8u172-linux-x64.tar.gz添加到容器中,文件必須要和你的Dockerfile在同一級(jí)目錄里面,ADD命令會(huì)自動(dòng)將.gz文件拷貝到容器里面并自動(dòng)解壓
ADD jdk-8u172-linux-x64.tar.gz /usr/local/java/
# 配置java環(huán)境變量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_172
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH#將后端jar包復(fù)制到容器里面的project
COPY 5gsignplay-consumer-0.0.1.jar /usr/local/project
#將前端打包好的靜態(tài)文件復(fù)制到容器里面的5gsignplay-web目錄下面,COPY復(fù)制不了文件本身,只能復(fù)制文件里面的內(nèi)容,所以要提前在容器里面創(chuàng)建一個(gè)前端目錄
COPY 5gsignplay-web /usr/local/project/5gsignplay-web#配置nginx,將nginx搬到容器里面自動(dòng)解壓
ADD nginx-1.18.0.tar.gz /usr/local/java/
#進(jìn)入/usr/local/java/nginx-1.18.0目錄進(jìn)行安裝和編譯
WORKDIR /usr/local/java/nginx-1.18.0
#安裝nginx的四個(gè)依賴
RUN yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel
#配置環(huán)境,考慮到后續(xù)安裝ssl證書 添加兩個(gè)模塊
RUN ./configure --with-http_stub_status_module --with-http_ssl_module
#make編譯,make install安裝,make && makeinstall的意思就是執(zhí)行make如果沒有發(fā)生錯(cuò)誤就執(zhí)行make install
RUN make && make install
#將nginx.conf拷貝到容器里面nginx安裝后的目錄,make install安裝成功后,/usr/local下面會(huì)多出一個(gè)nginx目錄,所以這里需要將nginx.conf拷貝到/usr/local/nginx文件目錄里面
COPY nginx.conf /usr/local/nginx/conf/nginx.conf#將啟動(dòng)腳本拷貝到容器里面的/usr/local/project下面
COPY run.sh /usr/local/project
#給run.sh可執(zhí)行權(quán)限
RUN chmod 777 /usr/local/project/run.sh#對(duì)外暴露80,8880端口,暴不暴露端口沒有什么影響,重要的是要在啟動(dòng)的時(shí)候使用-p映射宿主機(jī)端口:容器端口,暴露端口你也得使用-p映射端口
#EXPOSE 80 8880#通過(guò)腳本同時(shí)啟動(dòng)后端jar包和nginx
CMD ["sh","/usr/local/project/run.sh"]
run.sh啟動(dòng)腳本內(nèi)容如下:
#!/bin/bash
# 啟動(dòng)nginx服務(wù)
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf#啟動(dòng)后端jar包,日志打印不額外存儲(chǔ)
nohup java -jar /usr/local/project/5gsignplay-consumer-0.0.1.jar >/dev/null 2>& 1 &#使這個(gè)腳本一直處于運(yùn)行狀態(tài),如果不這樣,當(dāng)這個(gè)腳本命令執(zhí)行結(jié)束后,docker容器會(huì)立即停止運(yùn)行,所以這里需要讓這個(gè)腳本一直運(yùn)行,使docker容器一直處于運(yùn)行狀態(tài)
while [[ true ]];dosleep 1
done
制作鏡像并啟動(dòng)訪問(wèn)
然后docker build -t 5gsignplay . 開始制作鏡像,這里的.表示dockerfile文件的當(dāng)前位置,
-t 是給自己制作的鏡像取名。
然后用docker images查看自己的鏡像文件
使用docker run -d -p 80:80 -p 8880:8880 --name 5gsignplay 5gsignplay啟動(dòng)鏡像,
-d表示后臺(tái)啟動(dòng),-p是映射宿主機(jī)端口:容器端口,–name 第一個(gè)5gsinplay是給容器起名叫5gsignplay,第二個(gè)5gsignplay是鏡像名稱。
然后通過(guò)docker ps查看正在運(yùn)行的docker容器,發(fā)現(xiàn)容器在正常運(yùn)行。
docker ps -a可用來(lái)查看歷史運(yùn)行過(guò)的容器。
如果你想進(jìn)入運(yùn)行中的容器,可以使用docker exec -it 6652c30befd3 /bin/bash就能進(jìn)入5gsignplay容器里面:
查看容器里面的nginx和jar包是否啟動(dòng):
發(fā)現(xiàn)都是正常啟動(dòng)
退出容器輸入exit即可退出容器。
因?yàn)槟愕娜萜骼锩娴膎ginx監(jiān)聽端口是80,然后這里又將容器的80端口映射給了宿主機(jī)的端口,所以本地瀏覽器訪問(wèn)前端頁(yè)面地址就是訪問(wèn)你宿主機(jī)的ip即可。
如:http://192.168.5.43/即可訪問(wèn)到頁(yè)面
好了我的docker學(xué)習(xí)自定義鏡像打包先記錄到這里。