docker寫一個(gè)Dockerfile文件的實(shí)現(xiàn)
現(xiàn)在的項(xiàng)目肯定都離不開docker,只要是流水線部署就會(huì)涉及Dockerfile文件,那么如何寫一個(gè)正確的編寫一個(gè)Dockerfile文件呢?
建議先熟悉一下Dockerfile的一些語法。
之后就是看案例:
前端項(xiàng)目(Nginx) DockerFile文件
- Vue項(xiàng)目,涉及node安裝依賴、build打包等操作。
# 使用 Node.js 鏡像 , as build 別名構(gòu)建階段 FROM node:14 AS build # 指定構(gòu)建目錄 WORKDIR /holmes-center-front # 復(fù)制 package.json 和 package-lock.json COPY package*.json ./ # 安裝項(xiàng)目依賴 RUN npm install # 將宿主機(jī)的所有文件,放到指定的WORKDIR工作目錄里面來 COPY . . # 執(zhí)行 npm run build:prod 命令 RUN npm run build:prod # 使用官方的 Nginx 鏡像 FROM nginx:latest # 將宿主機(jī)的 nginx.conf 文件復(fù)制到容器中的 /etc/nginx/ 目錄 COPY docker/nginx/nginx.conf /etc/nginx/nginx.conf # 從第一build階段獲取dist下的文件移動(dòng)到容器中的 /usr/share/nginx/html/ 目錄 COPY --from=build /holmes-center-front/dist /usr/share/nginx/html/ # 暴露 Nginx 監(jiān)聽的端口,一般為 80,但這里因?yàn)槭莌ttps協(xié)議所以要暴露443端口! EXPOSE 443 # 啟動(dòng) Nginx 服務(wù) CMD ["nginx", "-g", "daemon off;"]
后端項(xiàng)目 DockerFile文件
- SpringBoot項(xiàng)目,涉及mvn命令執(zhí)行,啟動(dòng)jar包等。
# 選擇構(gòu)建用基礎(chǔ)鏡像。如需更換,請(qǐng)到[dockerhub官方倉庫](https://hub.docker.com/_/java?tab=tags)自行選擇后替換。 FROM maven:3.6.0-jdk-8-slim AS build # 指定構(gòu)建過程中的工作目錄 WORKDIR /holmes-center-server # 將src目錄下所有文件,拷貝到工作目錄中src目錄下(.gitignore/.dockerignore中文件除外) COPY holmes-admin /holmes-center-server/holmes-admin COPY holmes-common /holmes-center-server/holmes-common COPY holmes-framework /holmes-center-server/holmes-framework COPY holmes-generator /holmes-center-server/holmes-generator COPY holmes-quartz /holmes-center-server/holmes-quartz COPY holmes-system /holmes-center-server/holmes-system # 將pom.xml文件和settings.xml文件,拷貝到工作目錄下 COPY settings.xml pom.xml /holmes-center-server/ # 自定義settings.xml, 選用國內(nèi)鏡像源以提高下載速度 RUN mvn -s /holmes-center-server/settings.xml -f /holmes-center-server/pom.xml clean package # 基礎(chǔ)鏡像 FROM openjdk:8-jre # author MAINTAINER holmes # 指定路徑 WORKDIR /holmes-center-server # 復(fù)制jar文件到路徑 COPY --from=build /holmes-center-server/holmes-admin/target/*.jar . # 啟動(dòng)認(rèn)證服務(wù) ENTRYPOINT ["java","-jar","-Dspring.profiles.active=prod","holmes-admin.jar"]
Redis DockerFile文件
# 基礎(chǔ)鏡像 FROM redis:5.0.10 MAINTAINER holmes # 掛載目錄 VOLUME /home/holmes/redis # 創(chuàng)建目錄 RUN mkdir -p /home/holmes/redis # 指定路徑 WORKDIR /home/holmes/redis # 復(fù)制conf文件到路徑 COPY /docker/redis/redis.conf /home/holmes/redis/redis.conf # 啟動(dòng)redis服務(wù) ENTRYPOINT ["redis-server","/home/holmes/redis/redis.conf"]
下面就是說幾個(gè)碰到的棘手的命令:
COPY 指令 作用:很簡單就是復(fù)制宿主機(jī)的文件到容器中
- 如果添加了–from=xxx,那就不一樣了,例如:
# 這個(gè)指的是復(fù)制宿主機(jī)中的/holmes/dist到/usr/share/nginx/html/中。 COPY /holmes/dist /usr/share/nginx/html/ # 加上了--from=build,就是復(fù)制來自build階段的/holmes-center-front/dist內(nèi)容到/usr/share/nginx/html/下面,就不是宿主機(jī)了。 # 一般常用于多個(gè)階段鏡像構(gòu)建當(dāng)中,就和上面案例一樣 COPY --from=build /holmes-center-front/dist /usr/share/nginx/html/
- 如果沒添加–from=xxx,第一個(gè)參數(shù)就是指定宿主機(jī)相關(guān)文件,第二個(gè)參數(shù)是指定容器相關(guān)文件的,不要混淆。為什么強(qiáng)調(diào)這個(gè)事情,因?yàn)?,每次寫dockerfile文件時(shí),寫著寫著就混淆了,舉個(gè)例子:
... # 復(fù)制 package.json 和 package-lock.json COPY package*.json ./ # 安裝項(xiàng)目依賴 RUN npm install # 將宿主機(jī)的所有文件,放到指定的WORKDIR工作目錄里面來 COPY . . # 執(zhí)行 npm run build:prod 命令,這樣容器中就有了dist壓縮目錄 RUN npm run build:prod # 前面我將dist包build出來了,但是第一印象卻是用COPY來操作的,這就不對(duì)了。。。 # 錯(cuò)誤案例:COPY dist /usr/share/nginx/html/ 這樣他就去宿主機(jī)找dist文件,一般不會(huì)存在! # 正確應(yīng)該是下面的執(zhí)行mv,是容器內(nèi)部執(zhí)行命令才對(duì)。 RUN mv dist/* /usr/share/nginx/html/ # 如果涉及多個(gè)鏡像階段,那就通過--from=xxx來操作了。
- " . " 代表當(dāng)前目錄下所有文件,例如:
# 指定構(gòu)建目錄 WORKDIR /holmes # 將當(dāng)前目錄下所有文件,轉(zhuǎn)移holmes目錄 COPY . /holmes
RUN 指令:就是執(zhí)行命令。靈活運(yùn)用即可,有時(shí)候也可以執(zhí)行 ls、pwd命令,排除一些錯(cuò)誤等等。
到此這篇關(guān)于docker寫一個(gè)Dockerfile文件的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)docker寫Dockerfile內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Mac?M1?Docker如何運(yùn)行nacos2.0.3(若依微服務(wù)框架)
這篇文章主要介紹了Mac?M1?Docker如何運(yùn)行nacos2.0.3(若依微服務(wù)框架),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12docker部署minio并使用springboot連接的操作方法
這篇文章主要介紹了docker部署minio并使用springboot連接的操作方法,本文以minio為例結(jié)合實(shí)例代碼給大家詳細(xì)講解,需要的朋友可以參考下2023-11-11