Docker入門教程之本地打包docker鏡像教程
什么是Docker?
Dockers是基于Go語言開發(fā)的虛擬容器技術。以前我們部署應用通常是將源代碼打包成一個jar包運行,這樣就會受到運行環(huán)境、配置環(huán)境的限制,而且程序也不能跨服務器運行。Docker基于Linux容器技術,將Java源代碼、運行環(huán)境像MySQL、redis、jdk等通通打包成一個鏡像,實現(xiàn)“一次鏡像,處處運行”。極大的提高的應用的移植性以及部署的效率。
簡單來說,docker是一個解決了運行環(huán)境和配置問題的軟件容器,方便做持續(xù)集成并有助于整體發(fā)布的容器虛擬化技術。
容器與虛擬機的區(qū)別
- 傳統(tǒng)虛擬機技術是虛擬出一套硬件后,在其上運行的一個完整的操作系統(tǒng),在該系統(tǒng)上在運行所需應用進程。而Docker不需要捆綁一整套的操作系統(tǒng),它只需要軟件工作所需的庫資源和設置。
- Docker容器是在操作系統(tǒng)層面上實現(xiàn)虛擬化,直接復用本地主機的操作系統(tǒng),而傳統(tǒng)虛擬機則是在硬件層面實現(xiàn)虛擬化;Docker依賴于Linux內(nèi)核環(huán)境,其實本質(zhì)上是在已經(jīng)運行的Linux下制造一個隔離的文件環(huán)境。
優(yōu)點:
- 更輕量:基于容器的虛擬化,僅包含業(yè)務運行所需的runtime環(huán)境。
- 更高效:無操作系統(tǒng)虛擬化開銷。
- 更靈活:容器隔離,devoops理念。
Docker的組成
docker中有三個基本概念:
- 鏡像(image):一個只讀的模板,可以用來創(chuàng)建Docker容器。類似于Student類
- 容器(Container):容器是鏡像創(chuàng)建的運行實例。容器是鏡像運行時的實體,為鏡像提供了一個標準的和隔離的運行環(huán)境。它可以被啟動、停止、刪除,每個容器之間都是隔離的。類似于stu實例對象
- 倉庫(repository):存放鏡像文件的地方。比如maven倉庫是存放jar包的地方。
類比于--》Student stu = new Student();
docker安裝
Linux上安裝:
# 首先安裝 Docker yum -y install docker # 然后啟動 Docker 服務 service docker start # 測試安裝是否成功 docker -v # 配置阿里云鏡像加速 sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://******.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker
Windows上安裝:下載Docker Desktop,配置WSL
docker run 的執(zhí)行流程及原理
執(zhí)行流程:
docker是一個client-server結(jié)構(gòu)的系統(tǒng),docker的守護進程運行在主機上。dockerServer接收到docker-client的命令,就會執(zhí)行這個命令。
容器基本操作
docker 中的容器就是一個輕量級的虛擬機,是鏡像運行起來的一個狀態(tài),本文就先來看看容器的基本操作。
鏡像就像是一個安裝程序,而容器則是程序運行時的一個狀態(tài)。
查看容器
#查看正在運行容器 docker ps #查看所有容器 docker ps -a #查看最新創(chuàng)建的容器 docker ps -l
創(chuàng)建容器
#創(chuàng)建容器 docker create 鏡像 --創(chuàng)建一個 nginx 容器:docker create nginx --指定容器的name為nginx:docker create --name=nginx nginx #創(chuàng)建并啟動一個容器 docker run 鏡像 --docker run --name nginx1 -d -p 8080:80 nginx --name 含義和上文一樣,表示創(chuàng)建的容器的名字,-d 表示容器在后臺運行,-p 表示將容器的 80 端口映射到宿主機的 8080 端口
啟動關閉容器
#啟動容器 docker start id|name #重啟容器 docker restart id|name #關閉容器 docker stop id|name
刪除容器
#單個刪除 docker rm id|name #批量刪除 docker rm $(docker ps -a -q)
查看容器信息、日記
#容器詳情 docker inspect id|name #查看容器進程 docker top #查看你容器日記 docker logs id|name -f :實時日記 -t : 顯示時間 -tail: 控制輸出行數(shù)
容器導入導出
#導出一個已經(jīng)創(chuàng)建的容器導到一個文件 docker export -o 文件名.tar 容器id #將文件導入為鏡像 docker import 文件名.tar 鏡像名:鏡像標簽
docker export -o image-test.tar 1ffcd3e4a201
鏡像的基本操作
鏡像是容器運行的基礎,容器是鏡像運行后的形態(tài)。鏡像是一個包含程序運行必要以來環(huán)境和代碼的只讀文件,它采用分層的文件系統(tǒng),將每一層的改變以讀寫層的形式增加到原來的只讀文件上。
查看所有鏡像
docker images
- TAG: TAG用于區(qū)分同一倉庫中的不同鏡像,默認為latest。
- IMAGE ID: IMAGE ID是鏡像的一個唯一標識符。
- CREATED: CREATED表示鏡像的創(chuàng)建時間。
- SIZE: SIZE表示鏡像的大小。
- REPOSITORY:倉庫名稱,倉庫一般用來存放同一類型的鏡像。倉庫的名稱由其創(chuàng)建者指定。如果沒有指定則為
<none>
。
搜索鏡像
docker search name
下載鏡像
docker pull name:版本
版本可以在Docker hub上查看
刪除鏡像
docker rmi id|name
Dockerfile
Dockerfile是用來構(gòu)建docker鏡像的構(gòu)建文件。
其實Dockerfile就是一個普通的文本文件,其中包含了一條條的指令,每一條指令都會構(gòu)建一層。
dockerfile指令
FROM #基礎鏡像,一切從這里開始構(gòu)建 MAINTAINER #鏡像是誰寫的,姓名+郵箱 RUN #鏡像構(gòu)建時需要運行的命令 ADD #步驟,tomcat鏡像,這個tomcat壓縮包;添加內(nèi)容 WORKDIR #鏡像工作目錄 VOLUME #掛載的目錄 EXPOSE #暴露端口配置 CMD #指定這個容器啟動的時候要運行的命令,只有最后一個會生效,可被替代 ENTRYPOINT #指定這個容器啟動的時候要運行的命令,可以追加命令 ONBUILD #當構(gòu)建一個被繼承DockerFile 這個時候就會運行 ONBUILD 的指令,觸發(fā)指令 COPY #類似ADD,將我們的文件拷貝至鏡像中 ENV #構(gòu)建的時候設置環(huán)境變量
- FROM nginx 表示該鏡像的構(gòu)建,以已有的 nginx 鏡像為基礎,在該鏡像的基礎上構(gòu)建。
- MAINTAINER 指令用來聲明創(chuàng)建鏡像的作者信息以及郵箱信息,這個命令不是必須的。
- RUN 指令用來修改鏡像,算是使用比較頻繁的一個指令了,該指令可以用來安裝程序、安裝庫以及配置應用程序等,一個 RUN 指令執(zhí)行會在當前鏡像的基礎上創(chuàng)建一個新的鏡像層,接下來的指令將在這個新的鏡像層上執(zhí)行,RUN 語句有兩種不同的形式:shell 格式和 exec 格式。本案例采用的 shell 格式,shell 格式就像 linux 命令一樣,exec 格式則是一個 JSON 數(shù)組,將命令放到數(shù)組中即可。在使用 RUN 命令時,適當?shù)臅r候可以將多個 RUN 命令合并成一個,這樣可以避免在創(chuàng)建鏡像時創(chuàng)建過多的層。
- COPY 語句則是將鏡像上下文中的
hello.html
文件拷貝到鏡像中。
命令解釋:
- -t 參數(shù)用來指定鏡像的命名空間,倉庫名以及 TAG 等信息。
- 最后面的
.
是指鏡像構(gòu)建上下文。
本地打包docker鏡像
下載安裝Docker Desktop,配置完成后即可在windows CMD上操作docker命令
編寫一個簡單的springboot項目,提供一個helloworld接口
@RestController public class HelloWorld { @GetMapping("/hello") public String helloImages() { return "hello images!"; } }
使用maven插件打包--install--,在target包下可以看得到生成的jar包。
編寫Dockerfile文件
# 基礎鏡像使用java FROM java:8 #作者 MAINTAINER CJC #將jar包添加到容器中并更名為: hello-docker-image.jar ADD docker-image-test-0.0.1-SNAPSHOT.jar hello-docker-image.jar #運行jar包 RUN bash -c 'touch hello-docker-image.jar' ENTRYPOINT ["java","-jar","hello-docker-image.jar"] #暴露端口 EXPOSE 8080
將jar包和dockerfile文件置于同一目錄下執(zhí)行命令,構(gòu)建鏡像:
docker build -t Name:TagName . > build -t hello-docker-image:V1.0 . -t參數(shù)指定構(gòu)建成后,鏡像的倉庫、標簽等, Name 給鏡像取的名字 TagName 給鏡像取的標簽 最后的 . 表示 Dockerfile 文件在當前目錄下
查看鏡像:docker images
創(chuàng)建并啟動容器:docker run -d -p 8080:8080 6e7772b68332
docker desktop上可以看到容器正在運行:
docker數(shù)據(jù)卷操作
一般情況下,當我們需要將數(shù)據(jù)從宿主機拷貝到容器中使用的都是docker的拷貝命令。數(shù)據(jù)卷可以避免這種麻煩的操作。
數(shù)據(jù)卷可以實現(xiàn)容器和宿主機之間的數(shù)據(jù)共享,簡單來說數(shù)據(jù)卷就是在宿主機和容器之間搭建的一個映射的工作區(qū),兩者可以同步修改。
docker run -itd --name nginx -v /Users/sang/blog/docker/docker/:/usr/share/nginx/html/ -p 80:80 bc26f1ed35cf
這樣便是將宿主機中的 /Users/sang/blog/docker/docker/
目錄掛載到容器的 /usr/share/nginx/html/
目錄下。接下來讀者只需要在 /Users/sang/blog/docker/docker/
目錄下添加 html 文件,或者修改 html 文件,都能在 nginx 訪問中立馬看到效果。
查看所有的數(shù)據(jù)卷:
docker volume ls
查看數(shù)據(jù)卷詳情
docker volume inspect
刪除數(shù)據(jù)卷
docker volume rm
總結(jié)
到此這篇關于Docker入門教程之本地打包docker鏡像教程的文章就介紹到這了,更多相關本地打包docker鏡像內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
詳解從 0 開始使用 Docker 快速搭建 Hadoop 集群環(huán)境
這篇文章主要介紹了詳解從 0 開始使用 Docker 快速搭建 Hadoop 集群環(huán)境,具有一定的參考價值,感興趣的小伙伴們可以參考一下。2017-03-03Docker拉取ubuntu鏡像并建立環(huán)境的詳細過程
在Docker實戰(zhàn)中Ubuntu是一個常見的基礎鏡像,用于構(gòu)建其他應用服務的容器,這篇文章主要給大家介紹了關于Docker拉取ubuntu鏡像并建立環(huán)境的詳細過程,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2024-07-07docker容器中布置靜態(tài)網(wǎng)站的實現(xiàn)
這篇文章主要介紹了docker容器中布置靜態(tài)網(wǎng)站的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-01-01