Docker容器鏡像生成的三種方法詳解
一、簡要概述
容器化部署, 生成docker鏡像是基礎(chǔ)。如何生成docker鏡像,其法有三。
二、生成鏡像的三種方式
1,準(zhǔn)備Dockerfile
下面我們以h2-1.4.200.jar生成鏡像為例來說明。
首先,定義Dockerfile 文件
#基礎(chǔ)鏡像 FROM adoptopenjdk/openjdk8-openj9:alpine-slim #設(shè)置時區(qū)與時間 RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone #項(xiàng)目jar包引入 COPY *.jar /app.jar #指定交互端口 EXPOSE 8082 EXPOSE 9092 CMD ["-web", "-webAllowOthers", "-tcp", "-tcpAllowOthers", "-ifNotExists"] #啟動腳本 ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-Xshareclasses", "-Xquickstart", "-cp", "/app.jar", "org.h2.tools.Server"]
Dockerfile 是一個用來構(gòu)建鏡像的文本文件, 簡單來說就是通過此文件定義了打包鏡像的過程。
常見命令如下

2,借助docker build
在Dockerfile 同級創(chuàng)建img-build.sh,內(nèi)容如下
#!/bin/bash curl -k -O https://repo1.maven.org/maven2/com/h2database/h2/1.4.200/h2-1.4.200.jar docker build --no-cache -t registry.cn-shanghai.aliyuncs.com/00fly/h2:1.4.200 .
3,借助docker compose build
在Dockerfile 同級創(chuàng)建docker-compose.yml文件,內(nèi)容為:
services:
h2-server:
image: registry.cn-shanghai.aliyuncs.com/00fly/h2:1.4.200
build:
context: .
dockerfile: Dockerfile
container_name: h2-server
deploy:
resources:
limits:
cpus: '2.0'
memory: 64M
reservations:
cpus: '2.0'
memory: 64M
ports:
- 8082:8082
restart: on-failure
logging:
driver: json-file
options:
max-size: 5m
max-file: '1'重點(diǎn)是這幾行,分別定義了鏡像名,路徑,dockerfile文件名等生成鏡像需要的參數(shù)。
image: registry.cn-shanghai.aliyuncs.com/00fly/h2:1.4.200 build: context: . dockerfile: Dockerfile
新建img-build.sh
#!/bin/bash curl -k -O https://repo1.maven.org/maven2/com/h2database/h2/1.4.200/h2-1.4.200.jar docker compose build --no-cache
4,借助docker-maven-plugin
插件有3種,分別是
- com.spotify.docker-maven-plugin 已停更,官方建議dockerfile-maven-plugin
- com.spotify.dockerfile-maven-plugin 近兩年無更新,不支持操作容器
- io.fabric8.docker-maven-plugin 支持直接操作容器,且仍在持續(xù)更新,推薦使用
需要說明的是,本文中連接遠(yuǎn)程docker服務(wù)器未啟用TLS,具有安全風(fēng)險。
5,推送鏡像
docker-maven-plugin已經(jīng)支持自動推送鏡像到公開或私有倉庫。下面說明手動推送過程
首先,在docker服務(wù)器登錄阿里云docker鏡像倉庫,輸入密碼登錄。
docker login --username=<用戶名> registry.cn-shanghai.aliyuncs.com
其次,執(zhí)行命令推送鏡像。例如:
docker push registry.cn-shanghai.aliyuncs.com/00fly/h2:1.4.200
三、使用比較
| 方式 | 運(yùn)行環(huán)境 | 優(yōu)劣說明 |
|---|---|---|
| docker build | 服務(wù)器docker環(huán)境 | 環(huán)境依賴最少 |
| docker compose build | 服務(wù)器docker-compose環(huán)境 | 依賴docker/docker-compose,編排文件職責(zé)不單一 |
| docker-maven-plugin | 本地連接遠(yuǎn)程docker環(huán)境 | 靈活,java工程編譯時綁定 |
到此這篇關(guān)于Docker容器鏡像生成的三種方法詳解的文章就介紹到這了,更多相關(guān)Docker容器鏡像生成內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
3分鐘用Docker搭建一個Minecraft服務(wù)器
這篇文章主要介紹了3分鐘用Docker搭建一個Minecraft服務(wù)器的相關(guān)資料,非常不錯具有參考借鑒價值,需要的朋友可以參考下2016-11-11
docker學(xué)習(xí)筆記之把容器commit成鏡像的方法
本篇文章主要介紹了docker學(xué)習(xí)筆記之把容器commit成鏡像,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-05-05
Docker搭建Minio容器的流程步驟(完整詳細(xì)版)
Minio 是一個基于Apache License v2.0開源協(xié)議的對象存儲服務(wù),雖然輕量,卻擁有著不錯的性能,它兼容亞馬遜S3云存儲服務(wù)接口,非常適合于存儲大容量非結(jié)構(gòu)化的數(shù)據(jù),本文將給大家介紹Docker搭建Minio容器的流程步驟,需要的朋友可以參考下2024-08-08
在Ubuntu上使用Grafana監(jiān)控Docker的方法
如今越來越多的公司開始使用Docker,一談起Docker總是會跟著讓人聯(lián)想到輕量這個詞,甚至?xí)幸环N通過Docker啟動一個服務(wù)會節(jié)省很多資源的錯覺。然而Docker的「輕」也只是相對于傳統(tǒng)虛擬機(jī)而已。Docker如何監(jiān)控呢?本文就給大家介紹在Ubuntu上如何使用Grafana監(jiān)控Docker。2016-12-12
linux下使用Docker Compose部署Spug實(shí)現(xiàn)公網(wǎng)遠(yuǎn)程訪問的過程
這篇文章主要介紹了linux下使用Docker Compose部署Spug實(shí)現(xiàn)公網(wǎng)遠(yuǎn)程訪問,本例演示搭建使用docker compose 方式安裝Spug,并結(jié)合cpolar,需要的朋友可以參考下2023-11-11
docker prune命令定時清理不常用數(shù)據(jù)的操作方法
使用docker引擎服務(wù)時間久了,會發(fā)現(xiàn)磁盤空間越來越大,現(xiàn)在要刪除關(guān)于docker相關(guān)不用的數(shù)據(jù)來釋放磁盤空間,這篇文章主要介紹了docker prune命令 可定時清理不常用數(shù)據(jù),需要的朋友可以參考下2022-10-10
IDEA集成Docker實(shí)現(xiàn)一鍵部署的詳細(xì)過程
這篇文章主要介紹了IDEA集成Docker實(shí)現(xiàn)一鍵部署,Docker基于Windows集成IDEA,本文分步驟通過圖文實(shí)例代碼相結(jié)合給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-08-08
docker?gitea?drone實(shí)現(xiàn)超輕量級CI?CD實(shí)戰(zhàn)詳解
這篇文章主要為大家介紹了docker?gitea?drone實(shí)現(xiàn)超輕量級CI?CD實(shí)戰(zhàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10

