[阶段4 企业开发进阶] 8. Docker
文章目錄
- 1 Docker簡(jiǎn)介
- 1.1 概述
- 1.2 應(yīng)用場(chǎng)景
- 1.3 Docker優(yōu)點(diǎn)
- 1.4 Docker能做什么
- 1.5 Docker架構(gòu)
- 1.6 安裝Docker
- 1.7 Run的運(yùn)行流程
- 1.8 Docker底層原理
- 2 Docker常用命令
- 2.1 幫助命令
- 2.2 鏡像命令
- 2.3 容器命令
- 2.4 其他命令
- Docker安裝Nginx
- Docker安裝Tomcat
- 可視化工具Portainer
- 3 Docker鏡像
- 3.1 鏡像的概念
- 3.2 Docker鏡像加載原理
- 3.3 分層理解
- 3.4 Commit鏡像
- 4 容器數(shù)據(jù)卷
- 4.1 概念
- 4.2 使用數(shù)據(jù)卷
- Docker安裝MySQL
- 具名掛載和匿名掛載
- 數(shù)據(jù)卷容器
- 4.3 Dockerfile
- Dockerfile指令
- Dockerfile實(shí)戰(zhàn)
- 創(chuàng)建個(gè)性化的centos
- 創(chuàng)建個(gè)性化的Tomcat
- 發(fā)布鏡像
Docker學(xué)習(xí)
- Docker概述
- Docker安裝
- Docker命令
- 鏡像命令
- 容器命令
- 操作命令
- …
- Docker鏡像
- 容器數(shù)據(jù)卷
- DockerFile
- Docker網(wǎng)絡(luò)原理
- 整合Docker
- Docker Compose
- Docker Swarm
- CI/CD jenkins
1 Docker簡(jiǎn)介
1.1 概述
Docker官網(wǎng)
Docker官方文檔
Docker源碼
Docker 是一個(gè)開源的應(yīng)用容器引擎,基于 Go 語(yǔ)言 并遵從 Apache2.0 協(xié)議開源。
Docker 可以讓開發(fā)者打包他們的應(yīng)用以及依賴包到一個(gè)輕量級(jí)、可移植的容器中,然后發(fā)布到任何流行的 Linux 機(jī)器上,也可以實(shí)現(xiàn)虛擬化。
容器是完全使用沙箱機(jī)制,相互之間不會(huì)有任何接口(類似 iPhone 的 app),更重要的是容器性能開銷極低。
1.2 應(yīng)用場(chǎng)景
- Web 應(yīng)用的自動(dòng)化打包和發(fā)布。
- 自動(dòng)化測(cè)試和持續(xù)集成、發(fā)布。
- 在服務(wù)型環(huán)境中部署和調(diào)整數(shù)據(jù)庫(kù)或其他的后臺(tái)應(yīng)用。
- 從頭編譯或者擴(kuò)展現(xiàn)有的 OpenShift 或 Cloud Foundry 平臺(tái)來(lái)搭建自己的 PaaS 環(huán)境。
1.3 Docker優(yōu)點(diǎn)
Docker 是一個(gè)用于開發(fā),交付和運(yùn)行應(yīng)用程序的開放平臺(tái)。Docker 使您能夠?qū)?yīng)用程序與基礎(chǔ)架構(gòu)分開,從而可以快速交付軟件。借助 Docker,您可以與管理應(yīng)用程序相同的方式來(lái)管理基礎(chǔ)架構(gòu)。通過利用 Docker 的方法來(lái)快速交付,測(cè)試和部署代碼,您可以大大減少編寫代碼和在生產(chǎn)環(huán)境中運(yùn)行代碼之間的延遲。
1、快速,一致地交付您的應(yīng)用程序
Docker 允許開發(fā)人員使用您提供的應(yīng)用程序或服務(wù)的本地容器在標(biāo)準(zhǔn)化環(huán)境中工作,從而簡(jiǎn)化了開發(fā)的生命周期。
容器非常適合持續(xù)集成和持續(xù)交付(CI / CD)工作流程,請(qǐng)考慮以下示例方案:
- 您的開發(fā)人員在本地編寫代碼,并使用 Docker 容器與同事共享他們的工作。
- 他們使用 Docker 將其應(yīng)用程序推送到測(cè)試環(huán)境中,并執(zhí)行自動(dòng)或手動(dòng)測(cè)試。
- 當(dāng)開發(fā)人員發(fā)現(xiàn)錯(cuò)誤時(shí),他們可以在開發(fā)環(huán)境中對(duì)其進(jìn)行修復(fù),然后將其重新部署到測(cè)試環(huán)境中,以進(jìn)行測(cè)試和驗(yàn)證。
- 測(cè)試完成后,將修補(bǔ)程序推送給生產(chǎn)環(huán)境,就像將更新的鏡像推送到生產(chǎn)環(huán)境一樣簡(jiǎn)單。
2、響應(yīng)式部署和擴(kuò)展
Docker 是基于容器的平臺(tái),允許高度可移植的工作負(fù)載。Docker 容器可以在開發(fā)人員的本機(jī)上,數(shù)據(jù)中心的物理或虛擬機(jī)上,云服務(wù)上或混合環(huán)境中運(yùn)行。
Docker 的可移植性和輕量級(jí)的特性,還可以使您輕松地完成動(dòng)態(tài)管理的工作負(fù)擔(dān),并根據(jù)業(yè)務(wù)需求指示,實(shí)時(shí)擴(kuò)展或拆除應(yīng)用程序和服務(wù)。
3、在同一硬件上運(yùn)行更多工作負(fù)載
Docker 輕巧快速。它為基于虛擬機(jī)管理程序的虛擬機(jī)提供了可行、經(jīng)濟(jì)、高效的替代方案,因此您可以利用更多的計(jì)算能力來(lái)實(shí)現(xiàn)業(yè)務(wù)目標(biāo)。Docker 非常適合于高密度環(huán)境以及中小型部署,而您可以用更少的資源做更多的事情。
1.4 Docker能做什么
比較Docker和虛擬機(jī)技術(shù)
- 傳統(tǒng)虛擬機(jī),虛擬出一條硬件,運(yùn)行一個(gè)完整的操作系統(tǒng),在該系統(tǒng)上運(yùn)行和安裝軟件
- 容器內(nèi)的應(yīng)用直接運(yùn)行在宿主機(jī)的內(nèi)核,容器本身沒有內(nèi)核
- 每個(gè)容器間相互隔離,每個(gè)容器內(nèi)部有屬于自己的文件系統(tǒng),互不影響
DevOps(開發(fā)、運(yùn)維)
應(yīng)用更快速的交付和部署
傳統(tǒng):一堆幫助文檔和安裝程序
Docker:打包鏡像發(fā)布測(cè)試,一鍵運(yùn)行
更便捷的升級(jí)和擴(kuò)縮容
使用Docker后,容易部署項(xiàng)目
項(xiàng)目打包為一個(gè)鏡像,擴(kuò)展服務(wù)器A 服務(wù)器B
更簡(jiǎn)單的系統(tǒng)運(yùn)維
在容器化之后,開發(fā)和測(cè)試環(huán)境高度一致
更高效的計(jì)算資源利用
Docker是內(nèi)核級(jí)別的虛擬化,可以在物理機(jī)上運(yùn)行多個(gè)容器實(shí)例
1.5 Docker架構(gòu)
Docker 包括三個(gè)基本概念:
- 鏡像(Image):Docker 鏡像是用于創(chuàng)建 Docker 容器的模板,通過模板創(chuàng)建容器服務(wù),容器可以創(chuàng)建多個(gè)
- 容器(Container):鏡像和容器的關(guān)系,就像是面向?qū)ο蟪绦蛟O(shè)計(jì)中的類和實(shí)例一樣,鏡像是靜態(tài)的定義,容器是鏡像運(yùn)行時(shí)的實(shí)體。容器可以被創(chuàng)建、啟動(dòng)、停止、刪除、暫停等。
- 倉(cāng)庫(kù)(Repository):倉(cāng)庫(kù)可看成一個(gè)代碼控制中心,用來(lái)保存鏡像。
Docker 使用客戶端-服務(wù)器 (C/S) 架構(gòu)模式,使用遠(yuǎn)程API來(lái)管理和創(chuàng)建Docker容器。
Docker 容器通過 Docker 鏡像來(lái)創(chuàng)建。
容器與鏡像的關(guān)系類似于面向?qū)ο缶幊讨械膶?duì)象與類。
| 容器 | 對(duì)象 |
| 鏡像 | 類 |
| Docker 鏡像(Images) | Docker 鏡像是用于創(chuàng)建 Docker 容器的模板,比如 Ubuntu 系統(tǒng)。 |
| Docker 容器(Container) | 容器是獨(dú)立運(yùn)行的一個(gè)或一組應(yīng)用,是鏡像運(yùn)行時(shí)的實(shí)體。 |
| Docker 客戶端(Client) | Docker 客戶端通過命令行或者其他工具使用 Docker SDK (https://docs.docker.com/develop/sdk/) 與 Docker 的守護(hù)進(jìn)程通信。 |
| Docker 主機(jī)(Host) | 一個(gè)物理或者虛擬的機(jī)器用于執(zhí)行 Docker 守護(hù)進(jìn)程和容器。 |
| Docker Registry | Docker 倉(cāng)庫(kù)用來(lái)保存鏡像,可以理解為代碼控制中的代碼倉(cāng)庫(kù)。Docker Hub(https://hub.docker.com) 提供了龐大的鏡像集合供使用。一個(gè) Docker Registry 中可以包含多個(gè)倉(cāng)庫(kù)(Repository);每個(gè)倉(cāng)庫(kù)可以包含多個(gè)標(biāo)簽(Tag);每個(gè)標(biāo)簽對(duì)應(yīng)一個(gè)鏡像。通常,一個(gè)倉(cāng)庫(kù)會(huì)包含同一個(gè)軟件不同版本的鏡像,而標(biāo)簽就常用于對(duì)應(yīng)該軟件的各個(gè)版本。我們可以通過 <倉(cāng)庫(kù)名>:<標(biāo)簽> 的格式來(lái)指定具體是這個(gè)軟件哪個(gè)版本的鏡像。如果不給出標(biāo)簽,將以 latest 作為默認(rèn)標(biāo)簽。 |
| Docker Machine | Docker Machine是一個(gè)簡(jiǎn)化Docker安裝的命令行工具,通過一個(gè)簡(jiǎn)單的命令行即可在相應(yīng)的平臺(tái)上安裝Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure。 |
1.6 安裝Docker
Windows環(huán)境安裝Docker
Linux環(huán)境安裝Docker
Docker 鏡像加速
1.7 Run的運(yùn)行流程
1.8 Docker底層原理
Docker是一個(gè)Client-Server結(jié)構(gòu)的系統(tǒng),Docker的守護(hù)進(jìn)程運(yùn)行在主機(jī)上,通過Socket從客戶端訪問,DockerServer接受到Docker-Client的指令,就會(huì)執(zhí)行該命令
Docker為什么比虛擬機(jī)快?
2 Docker常用命令
2.1 幫助命令
docker version # 顯示docker的版本信息 docker info # 顯示docker的系統(tǒng)信息,包括鏡像和容器的數(shù)量 docker 命令 --help # 幫助命令幫助文檔
2.2 鏡像命令
docker images 查看所有本地的主機(jī)上的鏡像
docker images [OPTIONS] [REPOSITORY[:TAG]] REPOSITORY TAG IMAGE ID CREATED SIZE <none> <none> 77af4d6b9913 19 hours ago 1.089 GB committ latest b6fa739cedf5 19 hours ago 1.089 GB <none> <none> 78a85c484f71 19 hours ago 1.089 GB docker latest 30557a29d5ab 20 hours ago 1.089 GB <none> <none> 5ed6274db6ce 24 hours ago 1.089 GB postgres 9 746b819f315e 4 days ago 213.4 MB postgres 9.3 746b819f315e 4 days ago 213.4 MB postgres 9.3.5 746b819f315e 4 days ago 213.4 MB postgres latest 746b819f315e 4 days ago 213.4 MB解釋
| REPOSITORY | 鏡像倉(cāng)庫(kù)源 |
| TAG | 鏡像標(biāo)簽 |
| IMAGE ID | 鏡像ID |
| CREATED | 鏡像創(chuàng)建時(shí)間 |
| SIZE | 鏡像大小 |
可選項(xiàng)
| --all , -a | Show all images (default hides intermediate images) |
| --digests | Show digests |
| --filter , -f | Filter output based on conditions provided |
| --format | Pretty-print images using a Go template |
| --no-trunc | Don’t truncate output |
| --quiet , -q | Only show image IDs |
docker search 搜索鏡像
docker search [OPTIONS] TERM可選項(xiàng)
| --filter , -f | Filter output based on conditions provided | |
| --format | Pretty-print search using a Go template | |
| --limit | 25 | Max number of search results |
| --no-trunc | Don’t truncate output |
docker pull 下載鏡像
docker pull [OPTIONS] NAME[:TAG|@DIGEST] docker pull debianUsing default tag: latest # 若不寫tag 默認(rèn) latest latest: Pulling from library/debian fdd5d7827f33: Pull complete a3ed95caeb02: Pull complete Digest: sha256:e7d38b3517548a1c71e41bffe9c8ae6d6d29546ce46bf62159837aad072c90aa Status: Downloaded newer image for debian:latestdocker rmi 刪除鏡像
docker rmi [OPTIONS] IMAGE [IMAGE...]可選項(xiàng)
| --force , -f | Force removal of the image |
| --no-prune | Do not delete untagged parents |
2.3 容器命令
docker run 新建并啟動(dòng)容器
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]參數(shù)說(shuō)明
| --name="Name" | 容器名稱 |
| -d | 后臺(tái)方式運(yùn)行 |
| -it | 使用交互方式運(yùn)行,進(jìn)入容器查看內(nèi)容 |
| -p | 指定容器的端口 |
| -P | 隨機(jī)指定端口 |
實(shí)例
# 獲取centos鏡像 docker pull centos # 啟動(dòng)容器 docker run -it centos /bin/bash # 查看容器內(nèi)的centos ls # 從容器中退回主機(jī) exitdocker ps列出所有運(yùn)行的容器
docker ps [OPTIONS]可選項(xiàng)
| `` | 列出當(dāng)前正在運(yùn)行的容器 |
| -a | Show all containers (default shows just running) |
| -n=? | 顯示最近創(chuàng)建的容器 |
| -q | 只顯示容器的編號(hào) |
退出容器
| exit | 停止容器,并退出 |
| Ctrl+P+Q | 不停止容器,退出 |
docker rm 刪除容器
docker rm [OPTIONS] CONTAINER [CONTAINER...] docker rm 容器id # 刪除指定的容器,不能刪除正在運(yùn)行的容器,如果強(qiáng)制刪除 rm -f docker rm -f $(docker ps -aq) # 刪除所有的容器 docker ps -a -q|xargs docker rm # 刪除所有的容器啟動(dòng)和停止容器
docker start 容器id # 啟動(dòng)容器 docker restart 容器id # 重啟容器 docker stop 容器id # 停止當(dāng)前正在運(yùn)行的容器 docker kill 容器id # 強(qiáng)制停止當(dāng)前容器2.4 其他命令
后臺(tái)啟動(dòng)容器
# 命令 docker run -d 鏡像名; # 問題 docker ps 發(fā)現(xiàn)centos停止了 # 常見的坑 docker容器使用后臺(tái)運(yùn)行,就必須要有一個(gè)前臺(tái)進(jìn)程,若docker發(fā)現(xiàn)沒有應(yīng)用,就會(huì)自動(dòng)停止 # 如 nginx 容器啟動(dòng)后,發(fā)現(xiàn)自己沒有提供服務(wù),就會(huì)立即停止查看日志
docker logs -f -t --tail查看容器中的進(jìn)程信息
docker top 容器ID查看鏡像的元數(shù)據(jù)
docker inspect 容器id進(jìn)入當(dāng)前正在運(yùn)行的容器
# 容器通常都是后臺(tái)方式運(yùn)行的,需要進(jìn)入容器,修改些配置 # 命令 # 方式1 docker exec -it 容器id bashShell # 方式2 docker attach 容器id兩種方式區(qū)別
- docker exec 表示 進(jìn)入容器后開啟一個(gè)新的終端,可以在里面操作(常用)
- docker attach 表示進(jìn)入容器正在執(zhí)行的終端,不會(huì)啟動(dòng)新的進(jìn)程
從容器內(nèi)拷貝文件到主機(jī)上
docker cp 容器id:容器內(nèi)路徑 目的主機(jī)路徑小結(jié)
Docker安裝Nginx
# 1. 搜索鏡像 search # 2. 下載鏡像 pull # 3. 運(yùn)行測(cè)試 docker images# -d 后臺(tái)運(yùn)行 # --name 容器命名 # -p 宿主機(jī)端口:容器內(nèi)部端口 docker run -d --name nginx01 -p 3344:80 nginx # 測(cè)試本機(jī) curl localhost:3344端口暴露
Docker安裝Tomcat
# 官方用法 (用完即刪) docker run -it --rm tomcat:9.0 # 下載鏡像 docker pull tomcat:9.0 # 查看鏡像 docker images # 運(yùn)行容器 docker run -d -p 3355:8080 --name tomcat01 tomcat可視化工具Portainer
3 Docker鏡像
3.1 鏡像的概念
鏡像概念
鏡像是一種輕量級(jí)、可執(zhí)行的獨(dú)立軟件包,用來(lái)打包軟件運(yùn)行環(huán)境和基于運(yùn)行環(huán)境開發(fā)的軟件,它包含運(yùn)行某個(gè)軟件所需的所有內(nèi)容,包括代碼、運(yùn)行時(shí),庫(kù)、環(huán)境變量和配置文件。
所有的應(yīng)用,直接打包docker撓像,就可以直接跑起來(lái)!
得到鏡像
- 從遠(yuǎn)程倉(cāng)庫(kù)下載
- 拷貝
- 自制鏡像DockerFile
3.2 Docker鏡像加載原理
UnionFS (聯(lián)合文件系統(tǒng))
Union文件系統(tǒng)是一種分層、輕量級(jí)并且高性能的文件系統(tǒng),它支持對(duì)文件系統(tǒng)的修改作為一次提交來(lái)一層層的疊加,同時(shí)可以將不同目錄掛載到同一個(gè)虛擬文件系統(tǒng)下。 Union 文件系統(tǒng)是Docker鏡像的基礎(chǔ)。鏡像可以通過分層來(lái)進(jìn)行繼承,基于基礎(chǔ)鏡像(沒有父鏡像),可以制作各種具體的應(yīng)用鏡像。
特性:
一次同時(shí)加載多個(gè)文件系統(tǒng),但從外面看起來(lái),只能看到一個(gè)文件系統(tǒng),聯(lián)合加載會(huì)把各層文件系統(tǒng)疊加起來(lái),最終的文件系統(tǒng)會(huì)包含所有底層的文件和目錄
Docker鏡像加載原理
docker的鏡像實(shí)際上由一層一層的文件系統(tǒng)組成,bootfs(boot file system)主要包含bootloader和kernel, bootloader主要是引導(dǎo)加載kernel,Linux剛啟動(dòng)時(shí)會(huì)加載bootfs文件系統(tǒng),在Docker鏡像的最底層是bootfs。這一層與我們典型的Linux/Unix系統(tǒng)是一樣的,包含boot加載器和內(nèi)核。當(dāng)boot加載完成之后整個(gè)內(nèi)核就都在內(nèi)存中了,此時(shí)內(nèi)存的使用權(quán)已由bootfs轉(zhuǎn)交給內(nèi)核,此時(shí)系統(tǒng)也會(huì)卸款bootfs。
rootfs (root file system) , 在bootfs之上包含的就是典型Linux系統(tǒng)中的/dev,/proc,/bin, /etc等標(biāo)準(zhǔn)目錄和文件。rootfs就是各種不同的操作系統(tǒng)發(fā)行版,比如Ubuntu , Centos等等。
對(duì)于一個(gè)精簡(jiǎn)的OS,rootfs可以很小,只需要包含最基本的命令,工具和程序,因?yàn)榈讓又苯佑弥鳈C(jī)的kernel,自己只需要提供rootfs,由此可見對(duì)于不同的Linux發(fā)行版,bootfs基本一致,rootfs會(huì)有差距,rootfs會(huì)有差別,因此不同的發(fā)行版可以共用bootfs
3.3 分層理解
分層的鏡像
下載Redis鏡像,觀察日志輸出,發(fā)現(xiàn)是分層下載
鏡像分層
所有的Docker鏡像最開始起于基礎(chǔ)鏡像層,當(dāng)進(jìn)行修改或增加新的內(nèi)容,便會(huì)在當(dāng)前鏡像層上,創(chuàng)建新的鏡像層
下圖展示與系統(tǒng)顯示相同的三層鏡像,所有鏡像層堆疊合并,對(duì)外提供統(tǒng)一的視圖
特點(diǎn)
Docker鏡像都是只讀的,當(dāng)容器啟動(dòng)時(shí),一個(gè)新的可寫層加載到鏡像的頂部,該層就是容器層,容器層下面稱鏡像層
3.4 Commit鏡像
docker commit # 提交容器成為一個(gè)副本 # 命令和git原理類似 docker commit -m="提交的描述信息" -a="作者" 容器id 目標(biāo)鏡像名:[TAG]4 容器數(shù)據(jù)卷
4.1 概念
容器間的數(shù)據(jù)共享,將Docker容器產(chǎn)生的數(shù)據(jù),同步到本地。容器的持久化和同步操作,容器間可以數(shù)據(jù)共享
4.2 使用數(shù)據(jù)卷
方式1 使用命令掛載 -v
docker run -it -v 主機(jī)目錄:容器內(nèi)目錄docker run -it -v /home/ceshi:/home centos /bin/bashDocker安裝MySQL
# 獲取mysql鏡像 docker pull mysql:5.7 # 查看鏡像 docker images # 啟動(dòng)容器,進(jìn)行掛載 # -d 后臺(tái)運(yùn)行 # -p 端口映射 # -v 卷掛載 # -e 環(huán)境配置 # --name 容器名字 docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root --name mysql01 mysql:5.7具名掛載和匿名掛載
匿名掛載
# 匿名掛載, -v只寫容器內(nèi)的路徑,沒有寫容器外的路徑 -v 容器內(nèi)路徑 docker run -d -P --name nginx01 -v /etc/nginx nginx# 查看所有volume情況 docker volume具名掛載
# 具名掛載, -v 卷名:容器內(nèi)路徑 docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx nginx所有docker容器內(nèi)的卷,沒有指定目錄的情況下都是在/var/lib/docker/volumes/xxx/_data
拓展
通過 -v 容器內(nèi)路徑 ro rw 改變讀寫權(quán)限
docker run -d -P --name nginx01 -v juming-nginx:/etc/nginx:ro nginx docker run -d -P --name nginx01 -v juming-nginx:/etc/nginx:rw nginx注意 ro說(shuō)明該路徑只能通過宿主機(jī)操作,容器內(nèi)部無(wú)法操作
數(shù)據(jù)卷容器
容器之間的配置消息的傳遞,數(shù)據(jù)卷容器的生命周期一直持續(xù)到?jīng)]有容器使用為止,但是一但持久化到本地,本地的數(shù)據(jù)是不會(huì)刪除的
4.3 Dockerfile
Dockerfile是用來(lái)構(gòu)建docker鏡像的文件,命令參數(shù)腳本
構(gòu)建步驟
構(gòu)建過程
基礎(chǔ)知識(shí)
Dockerfile指令
| FROM | 指定基礎(chǔ)鏡像 |
| MAINTAINER | 指定維護(hù)者信息 |
| RUN | 鏡像構(gòu)建時(shí)要運(yùn)行的命令 |
| ADD | 添加內(nèi)容 |
| WORKDIR | 設(shè)置當(dāng)前工作目錄 |
| VOLUME | 設(shè)置卷,掛載主機(jī)目錄 |
| EXPOSE | 指定對(duì)外的端口 |
| CMD | 指定容器啟動(dòng)時(shí)運(yùn)行的命令(只有最后一個(gè)會(huì)生效,可被替代) |
| ENTRYPOINT | 指定容器啟動(dòng)時(shí)運(yùn)行的命令(可以追加命令) |
| ONBUILD | 觸發(fā)指令 |
| COPY | 文件拷貝到鏡像 |
| ENV | 構(gòu)建時(shí)設(shè)置環(huán)境變量 |
Dockerfile實(shí)戰(zhàn)
創(chuàng)建個(gè)性化的centos
1.編寫Dockerfile文件
FROM centos MAINTAINER Cyan-ChauENV MYPATH /usr/local WORKDIR $MYPATHRUN yum -y install vim RUN yun -y install net-toolsEXPOSE 80CMD echo $MYPATH CMD echo "----end----" CMD /bin/bash2.通過文件構(gòu)建鏡像
# docker build -f dockerfile文件路徑 -t 鏡像名:[tag] docker build -f myfile -t mycnetos:0.1補(bǔ)充命令
# 鏡像的歷史變更記錄 docker history 鏡像ID創(chuàng)建個(gè)性化的Tomcat
準(zhǔn)備鏡像文件tomcat壓縮包,jdk的壓縮包
編寫Dockerfile文件
vim Dockerfile FROM centos MAINTAINER Cyan-ChauCOPY readme.txt /usr/local/readme.txtADD jdk-8u11-linux-x64.tar.gz /usr/local ADD apache-tomcat-9.0.22.tar.gz /usr/localRUN yum -y install vimENV MYPATH /usr/local WORKDIR $MYPATHENV JAVA_HOME /usr/local/jdk1.8.0_11 ENV CLASSPATH $JAVA_HOME/lib/dt.jar;$JAVA_HOME/lib/tools.jar ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.22 ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.22 ENV PATH $PATH:$JAVA_HOME/bin;$CATALINA_HOME/lib;CATALINA_HOME/binEXPOSE 8080CMD /usr/local/apache-tomcat-9.0.22/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.22/bin/logs/catalina.out # 構(gòu)建鏡像 docker build -t mytomcat .發(fā)布鏡像
DockerHub
注冊(cè)賬號(hào)
登錄賬號(hào)
docker login --helpdocker login -u xxx提交鏡像(帶上版本號(hào))
docker push xxx:version總結(jié)
以上是生活随笔為你收集整理的[阶段4 企业开发进阶] 8. Docker的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OBCE首位认证 实力与颜值并存 | 9
- 下一篇: 神经网络之激活函数