docker部署應(yīng)用的三種方式
docker命令部署
拉取ubuntu的基礎(chǔ)鏡像
docker pull ubuntu
注意基礎(chǔ)鏡像是壓縮版的,只保證能夠運(yùn)行項(xiàng)目的最基礎(chǔ)條件,很多命令都是沒(méi)有的,在使用過(guò)程中如果需要那些命令需要提前安裝。
安裝openjdk
sudo apt install openjdk-11-jdk

安裝mysql
sudo apt-get install mysql-server

若安裝失敗更新一下源sudo apt-get update
上傳源代碼,構(gòu)建容器掛載數(shù)據(jù)卷。
源代碼就不粘貼了,就是查詢?nèi)缦聰?shù)據(jù)庫(kù)內(nèi)容:


啟動(dòng)容器掛載數(shù)據(jù)卷到源代碼目錄:
docker run -it -p 8080:8080 -v /home/xwh/java:/usr/local/java --name javaweb ubuntu
進(jìn)入容器,切換到源代碼目錄:
java -jar demo-0.0.1-SNAPSHOT.jar


dockerfile部署
在上一節(jié)中使用docker部署應(yīng)用,每一層鏡像都需要配置,這些可以通過(guò)Dockerfile構(gòu)建,docker可以構(gòu)建一個(gè)虛擬機(jī),在虛擬機(jī)的基礎(chǔ)上依次配置程序需要的環(huán)境,再將源代碼上傳到虛擬機(jī)上。
FROM ubuntu:20.04 MAINTAINER gancy "xiaoxu@163.com" #刷新包緩存,安裝wget工具 RUN apt-get update #安裝并配置java環(huán)境 ADD jdk-8u101-linux-x64.tar.gz /usr/local/java #配置環(huán)境變量 ENV JAVA_HOME /usr/local/java/jdk1.8.0_101 ENV PATH $JAVA_HOME/bin;$PATH ENV CLASSPATH .:$JAVA_HOME/lib #配置運(yùn)行環(huán)境 ENV LANG C.UTF-8 #配置Tomcat ADD apache-tomcat-8.5.11.tar.gz /usr/local/tomcat/ RUN chmod +x /usr/local/tomcat/apache-tomcat-8.5.11/bin/*.sh EXPOSE 8080 ENTRYPOINT /usr/local/tomcat/apache-tomcat-8.5.11/bin/startup.sh && /bin/bash # Install MySQL. RUN \ apt-get update && \ DEBIAN_FRONTEND=noninteractive apt-get install -y mysql-server && \ rm -rf /var/lib/apt/lists/* && \ sed -i 's/^\(bind-address\s.*\)/# \1/' /etc/mysql/my.cnf && \ sed -i 's/^\(log_error\s.*\)/# \1/' /etc/mysql/my.cnf && \ echo "mysqld_safe &" > /tmp/config && \ echo "mysqladmin --silent --wait=30 ping || exit 1" >> /tmp/config && \ echo "mysql -e 'GRANT ALL PRIVILEGES ON *.* TO \"root\"@\"%\" WITH GRANT OPTION;'" >> /tmp/config && \ bash /tmp/config && \ rm -f /tmp/config # Define mountable directories. VOLUME ["/etc/mysql", "/var/lib/mysql"] # Define working directory. WORKDIR /data # Define default command. CMD ["mysqld_safe"] # Expose ports. EXPOSE 3306
直接安裝jdk和mysql,使用VOLUME設(shè)置數(shù)據(jù)卷
VOLUME["/home/java","/usr/local/java"]
最后通過(guò)鏡像構(gòu)建容器,進(jìn)入容器對(duì)應(yīng)目錄下啟動(dòng)服務(wù)。當(dāng)然也可以通過(guò)ENTREYPOINT啟動(dòng)服務(wù)。
shell腳本使用Dockerfile一鍵化部署
通過(guò)上一步的Dockerfile部署已經(jīng)感受到了Dockerfile的強(qiáng)大,在上一節(jié)構(gòu)建完程序需要的環(huán)境后,需要進(jìn)行上傳源代碼,打包,啟動(dòng)程序的步驟。然而這些程序都是可以通過(guò)Dockerfile一鍵化完成的。
Dockerfile一鍵化部署的滿足條件是:
- 下載基礎(chǔ)鏡像和程序所需環(huán)境鏡像
- 配置參數(shù)、端口即數(shù)據(jù)卷等變量
- 上傳程序并下載程序所需要的庫(kù)
- 啟動(dòng)程序
# 下載python3.7鏡像
FROM python
# 創(chuàng)建工作目錄
WORKDIR /usr/local/python
# 引入外部參數(shù)
ARG gitaddr
ARG path
# 暴露端口
EXPOSE 5000
# git克隆倉(cāng)庫(kù)
RUN git clone ${gitaddr} share
# 安裝pip
RUN apt update
RUN apt install -y python3-pip
# 通過(guò)requirements安裝環(huán)境
RUN pip install -r ./share/requirements.txt
# 執(zhí)行命令
ENTRYPOINT ["cd","share"]
ENTRYPOINT ["ls"]
ENTRYPOINT ["python3","share/app.py"]
在上面的Dockerfile中,構(gòu)建了python所需要的環(huán)境;設(shè)置了工作目錄,參數(shù)端口等信息;通過(guò)克隆獲取源代碼,當(dāng)然也可以COPY上傳,并進(jìn)入代碼目錄;最后啟動(dòng)程序。
Dockerfile中運(yùn)行一個(gè)程序的基本要素都有了,那么根據(jù)該Dockerfile打包鏡像,如下
docker build --build-arg gitaddr="https://gitee.com/fireapproval/share.git" --build-arg path="share" -t flask-test:1.0 .
通過(guò)--build-arg傳遞參數(shù)git倉(cāng)庫(kù)地址,-t設(shè)置鏡像名稱和標(biāo)簽,.設(shè)置Docker所在目錄。

flask-test即為剛剛構(gòu)建的鏡像。以該鏡像構(gòu)建容器:
docker run -it -p 5000:5000 --name falsk-app flask-test:18


需要注意的是監(jiān)聽(tīng)的host一定要是0.0.0.0,不然會(huì)出現(xiàn)只能在容器內(nèi)部訪問(wèn),在主機(jī)上訪問(wèn)不了的情況。

5000端口已經(jīng)被占用了。瀏覽器也成功訪問(wèn)

到這里還沒(méi)實(shí)現(xiàn)一鍵化部署,因?yàn)檫€需要人工調(diào)用兩個(gè)命令:
# 構(gòu)建鏡像的命令 docker build --build-arg gitaddr="https://gitee.com/fireapproval/share.git" --build-arg path="share" -t flask-test:1.0 .
# 運(yùn)行容器的命令 docker run -it -p 5000:5000 --name falsk-app flask-test:18
這兩個(gè)命令也是可以通過(guò)shell腳本實(shí)現(xiàn)的,如下所示
#通過(guò)Dockerfile構(gòu)建鏡像在同一目錄下 # 參數(shù) git地址 `docker build --build-arg gitaddr=$1 -t tmp-img:1.0 .`; #通過(guò)鏡像啟動(dòng)容器 # 參數(shù)容器名稱 `docker run -it -p 5000:5000 --name $2 tmp-img:1.0`;
$1用于傳遞git地址,需是公開(kāi)的,$2是啟動(dòng)容器名稱。那么運(yùn)行腳本的命令就是:
bash ./build.sh https://gitee.com/fireapproval/share.git flask-test2

目錄文件如下所示:

那么啟動(dòng)腳本就會(huì)自動(dòng)調(diào)用上述兩條命令,分別構(gòu)建一個(gè)鏡像,并根據(jù)鏡像構(gòu)建容器,并啟動(dòng)容器。

容器被我名稱成了tmp-img當(dāng)然也可以修改為其他任意名稱。那么在任意代碼中只要調(diào)用該shell腳本就能啟動(dòng)git倉(cāng)庫(kù)下的代碼了。
到此這篇關(guān)于docker部署應(yīng)用的三種方式的文章就介紹到這了,更多相關(guān)docker部署應(yīng)用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- docker 部署mysql詳細(xì)過(guò)程(docker部署常見(jiàn)應(yīng)用)
- Docker部署SpringBoot應(yīng)用的實(shí)現(xiàn)步驟
- 5分鐘教會(huì)你用Docker部署一個(gè)Python應(yīng)用
- Docker部署SQL?Server及最佳應(yīng)用小結(jié)
- docker入門(mén)教程(利用docker部署web應(yīng)用)
- Docker部署Python應(yīng)用的方法實(shí)現(xiàn)
- docker如何安裝部署golang應(yīng)用程序
- IDEA 集成 Docker 插件一鍵部署 SpringBoot 應(yīng)用小結(jié)
- docker如何部署tomcat應(yīng)用
- Docker部署Java應(yīng)用程序的實(shí)現(xiàn)步驟
相關(guān)文章
Docker 部署 RocketMQ 5.1.0 踩坑指南從超時(shí)到 C
最近在項(xiàng)目中引入RocketMQ作為消息中間件,選擇使用Docker容器化部署以簡(jiǎn)化環(huán)境搭建,本文給大家介紹Docker 部署 RocketMQ 5.1.0 踩坑指南從超時(shí)到 Console 連不上的完整解決方案,感興趣的朋友跟隨小編一起看看吧2026-03-03
Docker部署Laravel應(yīng)用實(shí)現(xiàn)隊(duì)列&任務(wù)調(diào)度
這篇文章主要介紹了Docker部署Laravel應(yīng)用實(shí)現(xiàn)隊(duì)列&任務(wù)調(diào)度,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09
關(guān)于dockerfile build過(guò)程中報(bào)/bin/sh: pip: command not found的解決方法
這篇文章主要介紹了關(guān)于dockerfile build過(guò)程中報(bào)/bin/sh: pip: command not found的解決方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03
docker搭建nacos1.3.0的實(shí)現(xiàn)
這篇文章主要介紹了docker搭建nacos1.3.0的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12
docker映射端口穿透內(nèi)置防火墻的實(shí)現(xiàn)
在使用Docker部署項(xiàng)目時(shí),即使未開(kāi)啟CentOS7的Firewalld防火墻,端口仍可被外網(wǎng)訪問(wèn),這是因?yàn)镈ocker在安裝后會(huì)接管iptables,并自動(dòng)添加規(guī)則以放行指定端口,解決方法包括依賴外置防火墻放行端口、指定端口監(jiān)聽(tīng)地址為本機(jī)、禁用Docker的iptables規(guī)則修改2024-10-10
使用Docker部署Angular項(xiàng)目的方法步驟
這篇文章主要介紹了使用Docker部署Angular項(xiàng)目的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12
docker環(huán)境變量配置不生效/ect/profile的解決方法
docker在使用過(guò)程中,有時(shí)候自定義容器實(shí)例中的某些配置文件,本文主要介紹了docker環(huán)境變量配置不生效/ect/profile的解決方法,感興趣的可以了解一下2023-08-08
win7環(huán)境下Docker快速構(gòu)建及阿里云容器加速配置詳解
這篇文章主要介紹了win7環(huán)境下Docker快速構(gòu)建及阿里云容器加速配置詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09

