一:首先你要明白什么是鏡像部署
看下面這個圖

從中可以看出,Docker 包含三個基本概念,分別是鏡像(Image)、容器(Container)和倉庫(Repository)。鏡像是 Docker 運行容器的前提,倉庫是存放鏡像的場所,可見鏡像更是Docker的核心。
回到正題,Docker 鏡像可以看作是一個特殊的文件系統(tǒng),除了提供容器運行時所需的程序、庫、資源、配置等文件外,還包含了一些為運行時準備的一些配置參數(shù)(如匿名卷、環(huán)境變量、用戶等)。鏡像不包含任何動態(tài)數(shù)據(jù),其內(nèi)容在構(gòu)建之后也不會被改變。
要想更深入的了解 Docker 鏡像,鏡像的原理也必不可少,而這其中最重要的概念就是鏡像層(Layers)(如下圖)。鏡像層依賴于一系列的底層技術(shù),比如文件系統(tǒng)(filesystems)、寫時復(fù)制(copy-on-write)、聯(lián)合掛載(union mounts)等。

總的來說,你最需要記住這點:
在 Dockerfile 中, 每一條指令都會創(chuàng)建一個鏡像層,繼而會增加整體鏡像的大小。
鏡像作為 Docker 最突出的創(chuàng)新之一,它變革了軟件交付標準。理解鏡像,對理解整個 Docker 的生命周期非常重要。
二: 把你的項目打包成docker鏡像文件
在Linux下操作
Java項目
在當前文件夾下創(chuàng)建個文件夾目錄:docker(注:可以隨便找個地方創(chuàng)建此文件夾)
里面放你的Java對的程序Jar包
在當前目錄下創(chuàng)建dockerfile 文件
里面編輯添加如下內(nèi)容:
FROM java:8
# 把jar包添加到鏡像中
# auth-authentication-1.0.0.jar 這里是我Java打出來的Jar包的名字 你的要改成你的名字
ADD auth-authentication-1.0.0.jar /app.jar
# 鏡像暴露的端口
EXPOSE 8010
RUN bash -c 'touch /app.jar'
# 容器啟動命令
ENTRYPOINT ["java","-jar","/app.jar"]
# 設(shè)置時區(qū)
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezonei
此時docker 文件夾下有如下文件:

三:基于該Dockerfile構(gòu)建Jave應(yīng)用鏡像
運行如下命令,注意不要少了最后的“ . ”
Docker build -t auth-authentication-1.0.0.jar:v1.0 .
auth-authentication-1.0.0.jar:v1.0 構(gòu)建docker鏡像為1.0版本
查看你構(gòu)建的docker鏡像
docker images

這個圖是隨便截的
那里是你構(gòu)建的docker鏡像的名字(auth-authentication-1.0.0) tag是版本號(v1.0)
Image id 是此鏡像的ID號(d124ab8e75a7)
把構(gòu)建的docker 鏡像打為tar包
docker save d124ab8e75a7 > xxx.tar(名字隨便起的,你可以按你項目的名字來起)
這時候就可以在你創(chuàng)建的docker 的文件夾下看到你打的tar包了,打出來的包很大

這時候就可以上傳到docker 的服務(wù)器上了
四:上傳docker鏡像
登錄
docker login 127.0.0.1 (此IP我隨便填寫的,到時候看你的服務(wù)器IP地址)
輸入自己的docker賬號密碼
載入tar包
docker load -i xxx.tar 然后就會出來鏡像的id

Docker tar sha256:xxx 192.xxx.xxx.xxx/xxx.tar:v1.0.0.1
Docker push 192.xxx.xxx.xxx/xxx.tar:v1.0.0.1
Docker tag sha256:xxxx (這里填上面出來的鏡像id) 192.xxx.xxx.xxx/xxx.tar:v1.0.0.1 (后明填你服務(wù)器地址和文件夾路徑在帶你的鏡像包名字和版本號)
這樣自己就tag 好了
然后docker push 推到docker 上 就可以了
這時候 你就可以在你的docker上看到你剛才推上去的包了
下面是 vue 和python 的dockerfile 文件
VUE dockerfile
#dockerfile
#使用 nginx最新版本作為基礎(chǔ)鏡像
FROM nginx
#將當前文件夾的dist文件復(fù)制到容器的/usr/share/nginx/html目錄
COPY ./dist /usr/share/nginx/html/
# 拷貝.conf文件到鏡像下,替換掉原有的nginx.conf
COPY nginx.conf /etc/nginx/nginx.conf
#聲明運行時容器暴露的端口(容器提供的服務(wù)端口)
EXPOSE 9123
#CMD:指定容器啟動時要運行的命令
CMD ["nginx", "-g", "daemon off;"]
=====================vue還需要配一個nginx.conf文件。防止地址404 找不到地址
worker_processes auto;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
#keepalive_timeout 0;
keepalive_timeout 65;
client_max_body_size 20m;
server {
listen 80;
server_name www.longdb.com;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
===========================python ==dockerfile
# syntax=docker/dockerfile:1
FROM python:3.9
WORKDIR /app
COPY requirements.txt requirements.txt
RUN pip3 install -r requirements.txt
COPY . .
CMD [ "python3","-m" , "flask", "run", "--host=0.0.0.0", "--port=20010"]
====================== requirements.txt 這個里面是你python用到的依賴庫 直接填名字就好
下面截圖下每個文件里的配置
VUE

Python