docker部署應用的三種方式
docker命令部署
拉取ubuntu的基礎鏡像
docker pull ubuntu
注意基礎鏡像是壓縮版的,只保證能夠運行項目的最基礎條件,很多命令都是沒有的,在使用過程中如果需要那些命令需要提前安裝。
安裝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部署應用,每一層鏡像都需要配置,這些可以通過Dockerfile構(gòu)建,docker可以構(gòu)建一個虛擬機,在虛擬機的基礎上依次配置程序需要的環(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ù)據(jù)卷
VOLUME["/home/java","/usr/local/java"]
最后通過鏡像構(gòu)建容器,進入容器對應目錄下啟動服務。當然也可以通過ENTREYPOINT啟動服務。
shell腳本使用Dockerfile一鍵化部署
通過上一步的Dockerfile部署已經(jīng)感受到了Dockerfile的強大,在上一節(jié)構(gòu)建完程序需要的環(huán)境后,需要進行上傳源代碼,打包,啟動程序的步驟。然而這些程序都是可以通過Dockerfile一鍵化完成的。
Dockerfile一鍵化部署的滿足條件是:
- 下載基礎鏡像和程序所需環(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ù)端口等信息;通過克隆獲取源代碼,當然也可以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設置鏡像名稱和標簽,.設置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當然也可以修改為其他任意名稱。那么在任意代碼中只要調(diào)用該shell腳本就能啟動git倉庫下的代碼了。
到此這篇關(guān)于docker部署應用的三種方式的文章就介紹到這了,更多相關(guān)docker部署應用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Docker跨主機容器通信overlay實現(xiàn)過程詳解
這篇文章主要介紹了Docker跨主機容器通信overlay實現(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-05-05

