docker部署應(yīng)用的三種方式
docker命令部署
拉取ubuntu的基礎(chǔ)鏡像
docker pull ubuntu
注意基礎(chǔ)鏡像是壓縮版的,只保證能夠運行項目的最基礎(chǔ)條件,很多命令都是沒有的,在使用過程中如果需要那些命令需要提前安裝。
安裝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ù)庫內(nèi)容:
啟動容器掛載數(shù)據(jù)卷到源代碼目錄:
docker run -it -p 8080:8080 -v /home/xwh/java:/usr/local/java --name javaweb ubuntu
進入容器,切換到源代碼目錄:
java -jar demo-0.0.1-SNAPSHOT.jar
dockerfile部署
在上一節(jié)中使用docker部署應(yīng)用,每一層鏡像都需要配置,這些可以通過Dockerfile構(gòu)建,docker可以構(gòu)建一個虛擬機,在虛擬機的基礎(chǔ)上依次配置程序需要的環(huán)境,再將源代碼上傳到虛擬機上。
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 #配置運行環(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"]
最后通過鏡像構(gòu)建容器,進入容器對應(yīng)目錄下啟動服務(wù)。當(dāng)然也可以通過ENTREYPOINT
啟動服務(wù)。
shell腳本使用Dockerfile一鍵化部署
通過上一步的Dockerfile部署
已經(jīng)感受到了Dockerfile的強大,在上一節(jié)構(gòu)建完程序需要的環(huán)境后,需要進行上傳源代碼,打包,啟動程序的步驟。然而這些程序都是可以通過Dockerfile一鍵化完成的。
Dockerfile一鍵化部署的滿足條件是:
- 下載基礎(chǔ)鏡像和程序所需環(huán)境鏡像
- 配置參數(shù)、端口即數(shù)據(jù)卷等變量
- 上傳程序并下載程序所需要的庫
- 啟動程序
# 下載python3.7鏡像 FROM python # 創(chuàng)建工作目錄 WORKDIR /usr/local/python # 引入外部參數(shù) ARG gitaddr ARG path # 暴露端口 EXPOSE 5000 # git克隆倉庫 RUN git clone ${gitaddr} share # 安裝pip RUN apt update RUN apt install -y python3-pip # 通過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ù)端口等信息;通過克隆獲取源代碼,當(dāng)然也可以COPY上傳,并進入代碼目錄;最后啟動程序。
Dockerfile中運行一個程序的基本要素都有了,那么根據(jù)該Dockerfile打包鏡像,如下
docker build --build-arg gitaddr="https://gitee.com/fireapproval/share.git" --build-arg path="share" -t flask-test:1.0 .
通過--build-arg
傳遞參數(shù)git倉庫地址,-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)聽的host一定要是0.0.0.0
,不然會出現(xiàn)只能在容器內(nèi)部訪問,在主機上訪問不了的情況。
5000端口已經(jīng)被占用了。瀏覽器也成功訪問
到這里還沒實現(xiàn)一鍵化部署,因為還需要人工調(diào)用兩個命令:
# 構(gòu)建鏡像的命令 docker build --build-arg gitaddr="https://gitee.com/fireapproval/share.git" --build-arg path="share" -t flask-test:1.0 .
# 運行容器的命令 docker run -it -p 5000:5000 --name falsk-app flask-test:18
這兩個命令也是可以通過shell腳本實現(xiàn)的,如下所示
#通過Dockerfile構(gòu)建鏡像在同一目錄下 # 參數(shù) git地址 `docker build --build-arg gitaddr=$1 -t tmp-img:1.0 .`; #通過鏡像啟動容器 # 參數(shù)容器名稱 `docker run -it -p 5000:5000 --name $2 tmp-img:1.0`;
$1
用于傳遞git地址,需是公開的,$2
是啟動容器名稱。那么運行腳本的命令就是:
bash ./build.sh https://gitee.com/fireapproval/share.git flask-test2
目錄文件如下所示:
那么啟動腳本就會自動調(diào)用上述兩條命令,分別構(gòu)建一個鏡像,并根據(jù)鏡像構(gòu)建容器,并啟動容器。
容器被我名稱成了tmp-img當(dāng)然也可以修改為其他任意名稱。那么在任意代碼中只要調(diào)用該shell腳本就能啟動git倉庫下的代碼了。
到此這篇關(guān)于docker部署應(yīng)用的三種方式的文章就介紹到這了,更多相關(guān)docker部署應(yīng)用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- docker 部署mysql詳細(xì)過程(docker部署常見應(yīng)用)
- Docker部署SpringBoot應(yīng)用的實現(xiàn)步驟
- 5分鐘教會你用Docker部署一個Python應(yīng)用
- Docker部署SQL?Server及最佳應(yīng)用小結(jié)
- docker入門教程(利用docker部署web應(yīng)用)
- Docker部署Python應(yīng)用的方法實現(xiàn)
- docker如何安裝部署golang應(yīng)用程序
- IDEA 集成 Docker 插件一鍵部署 SpringBoot 應(yīng)用小結(jié)
- docker如何部署tomcat應(yīng)用
- Docker部署Java應(yīng)用程序的實現(xiàn)步驟
相關(guān)文章
Docker跨主機容器通信overlay實現(xiàn)過程詳解
這篇文章主要介紹了Docker跨主機容器通信overlay實現(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-05-05