docker轉移鏡像的實現(xiàn)步驟
1、場景
- 有網(wǎng)絡環(huán)境向無網(wǎng)絡環(huán)境轉移鏡像。
- 無法拉取的鏡像(外網(wǎng)無法訪問)下載鏡像轉移到服務器上。
2、docker轉移
2.1 鏡像服務器
保存鏡像
列出項目使用的所有鏡像
docker images
保存所有鏡像為 tar 文件
保存docker鏡像
docker save -o my_project_images.tar my_project_images:1.0.0
2.2 新服務器
在新服務器上加載鏡像
docker load -i my_project_images.tar
啟動鏡像
docker run \ --name my_project_images \ -d \ --restart always \ my_project_images:1.0.0
3、docker compose轉移項目
3.1 鏡像服務器
保存鏡像
列出項目使用的所有鏡像
在docker-compose.yml的目錄下執(zhí)行
docker-compose images
保存所有鏡像為 tar 文件
合并導出:保存docker-compose鏡像,將所有鏡像合并到一個 .tar
文件
docker save -o my_project_images.tar $(docker-compose images | awk '{if(NR>2) print $2":"$3}')
分文件導出:每個鏡像單獨保存(適合選擇性遷移)
docker-compose images -q | xargs -n 1 -I {} docker save {} -o ./images/{}.tar
命令示例
docker-compose images | awk '{if(NR>2) print $2":"$3}'
[root@ openmetadata-docker]# docker-compose images | awk '{if(NR>2) print $2":"$3}' WARN[0000] /root/openmetadata-docker/docker-compose.yml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion docker.elastic.co/elasticsearch/elasticsearch:8.11.4 docker.getcollate.io/openmetadata/ingestion:1.6.8 docker.getcollate.io/openmetadata/db:1.6.8 docker.getcollate.io/openmetadata/server:1.6.8
docker-compose images -q | xargs -n 1
[root@ images]# docker-compose images -q | xargs -n 1 WARN[0000] /root/openmetadata-docker/docker-compose.yml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion 4128d7bbe2a1bcbad0a05a2a6af72b98b6f2ae6752fa9446b5c8eef9a1af4769 8759d2faeffbc4797832aa90ef5b88c1f40af72e6f8b0b0de42703f32fa9d67b b7c0bf7f2e52cb9b9a4b1dd6cd82c7e6b6f01895832391974d2c70144425ac60 15eb21ac0f7eedc6c62fbf1f444d6ed0cd47d99faa7fa7404af0916c67163518
3.2 新服務器
在新服務器上加載鏡像
docker load -i my_project_images.tar
啟動鏡像
確定已復制 docker-compose.yml 文件到新服務器
docker-compose up -d
3.3 注意事項
鏡像與配置一致性:確保目標服務器的
docker-compose.yml
中image:
名稱和標簽與導出的鏡像完全匹配,否則 Docker 會嘗試從倉庫拉取。依賴環(huán)境
- 目標服務器需安裝 Docker 和 Docker Compose。
- 文件路徑和卷掛載(如
volumes:
)需適配目標服務器的目錄結構。
4、私服方式
4.1 鏡像服務器
登錄倉庫
docker login [倉庫地址] # 不指定地址則默認為Docker Hub # 示例(Docker Hub): docker login -u 你的用戶名 # 示例(私有倉庫): docker login registry.example.com -u 用戶名 -p 密碼
查看現(xiàn)有鏡像
docker images docker-compose images # 如果是docker-compose項目
為鏡像打標簽
格式:docker tag 本地鏡像[:標簽] 倉庫地址/用戶名/倉庫名[:標簽]
# 為單個鏡像打標簽示例: docker tag my-app:1.0 mydockerhub/my-app:1.0 # 為docker-compose項目所有鏡像打標簽: docker-compose build # 確保鏡像已構建 docker-compose images | awk 'NR>2 {print $2":"$3}' | xargs -I {} docker tag {} mydockerhub/{}
推送鏡像到倉庫
# 推送單個鏡像: docker push mydockerhub/my-app:1.0 # 推送docker-compose項目所有鏡像: docker-compose push # 如果鏡像已正確配置在compose文件中 # 或者手動推送: docker images | grep "mydockerhub" | awk '{print $1":"$2}' | xargs -I {} docker push {}
4.2 新服務器
登錄倉庫
docker login [倉庫地址]
拉取鏡像
# 單個鏡像: docker pull mydockerhub/my-app:1.0 # 使用docker-compose(需先復制compose文件): docker-compose pull # 啟動 docker-compose up -d
5、文件分割上傳
當需要傳輸?shù)?tar 文件過大時,可以將其分割成多個小文件分別傳輸,然后在目標服務器上重新組裝。
5.1 在源服務器上分割大文件
使用 split 命令分割文件
linux直接使用如下命令,windows使用 Git Bash執(zhí)行如下命令
# 將大文件分割成每個1GB的小文件(可根據(jù)需要調整大?。? split -b 1G my_project_images.tar my_project_images.tar.part_
驗證分割結果
ls -lh my_project_images.tar.part_*
5.2 在目標服務器上重新組裝文件
使用 cat
命令合并文件
cat my_project_images.tar.part_* > my_project_images.tar
驗證合并后的文件完整性
# 檢查文件大小 ls -lh my_project_images.tar
到此這篇關于docker轉移鏡像的文章就介紹到這了,更多相關docker 轉移鏡像內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Docker容器上用DockerFile部署多個tomcat服務的步驟
這篇文章主要介紹了Docker容器上用DockerFile部署多個tomcat服務的步驟,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-11-11docker-compose:數(shù)據(jù)卷volumes掛載規(guī)則說明
這篇文章主要介紹了docker-compose:數(shù)據(jù)卷volumes掛載規(guī)則說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-03-03