Ⅰ docker命令整理
不啟動docker服務,會報錯:
查看docker容器hash值:
查看docker ps完整命令:
然後可以根據contnainer id打開docker命令行
容器文件復制,和cp類似
查看所有:
查看digest:
查看簡寫hash:
忽略簡寫hash:
過濾:
docker images -f xxxx
過濾標簽格式 "key=value",如果有多個條件,則使用這種 --filter "key1=value" --filter "key2=value"
過濾沒有打標簽的鏡像:
查正則:
格式化展示:
docker images --format
查看日誌最後20行:
顯示實時log,和tail -f 一個效果:
grep 過濾 log:
根據時間過濾查看 log:
注意,docker logs 不支持 --until
docker logs日誌文件存儲路徑
docker 鏡像信息:
cd var/lib/docker/containers/容器ID
在docker目錄下,進入image文件夾,找到repositories.json文件
repositories.json文件詳細記錄了鏡像一些信息
mac下docker鏡像保存位置:
Ⅱ Docker鏡像操作常用指令有哪些
docker version:查看docker版本;
docker info:查看docker詳細信息;
docker --help:查看docker命令;
鏡像命令
docker images:列出本地主機上的鏡像,REPOSITORY:表示鏡像的倉庫源;TAG:鏡像的標簽;IMAGE
ID:鏡像ID;CREATED:鏡像創建時間;SIZE :鏡像大小,同一個倉庫源可以有多個TAG,可以表示倉庫源的不同版本,使用REPOSITORY:TAG來定義不同的鏡像;
docker images -a:列出本地所有的鏡像;
docker images -p:只顯示鏡像ID;
docker images --digests:顯示鏡像的摘要信息;
docker images --no-trunc:顯示完整的鏡像信息;
docker search tomcat:從Docker Hub上查找tomcat鏡像;
容器命令
docker run [OPTIONS] IMAGE:根據鏡像新建並啟動容器,IMAGE是鏡像ID或鏡像名稱;
docker ps:列出當前所有正在運行的容器;
exit:退出並停止容器;
docker start 容器ID或容器名稱:啟動容器;
docker restart 容器ID或容器名稱:重新啟動容器;
docker stop 容器ID或容器名稱:停止容器;
docker kill 容器ID或容器名稱:強制停止容器;
docker rm 容器ID或容器名稱:刪除容器;
docker rm -f $(docker ps -a -q):刪除多個容器。
Ⅲ DOCKER 總結
Docker 是一個開源的 應用容器引擎 ,讓 開發者可以打包他們的應用以及依賴包到一個可移植的鏡像中,然後發布到任何流行的 linux或Windows 機器上,也可以實現虛擬化 。容器是完全使用沙箱機制,相互之間不會有任何介面。
由於本地開發好的程序往往都需要部署到伺服器上進行運行,這就導致了程序需要運行在不同的環境上,這通常是一個令人頭痛的事情。在過去,開發團隊需要清楚的告訴運維部署團隊,其所使用的全部配置文件+所有軟體環境。不過,即便如此,仍然常常發生部署失敗的狀況。
於是乎, 虛擬化 技術應運而生。開發團隊將開發好的程序在虛擬機上運行,這樣就能解決運維的問題。但是由於虛擬機技術過重的特性導致了其 資源佔用多、冗餘步驟多以及啟動慢的缺陷 。而這個時候 一種新的虛擬化技術搭配上容器化的思想 的產品便出現了,而它就是Docker。
下圖是虛擬機技術和容器化技術架構的對比。我們可以得出以下總結:
[圖片上傳失敗...(image-efadd2-1643314980201)]
]( https://upload-images.jianshu.io/upload_images/646931-4b1431b77887632f.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240 )
於是乎相比於虛擬機技術,容器化技術具有以下 優勢:
相關網站
如下圖所示,Docker使用客戶端-伺服器(C/S)架構模式,使用遠程API來管理和創建Docker容器。伺服器端分為Docker daemon, Image和Container三個部分。此外還有Docker Registry。
下面首先來介紹一下Docker中的主要概念
Docker的運行原理如下:客戶端可以將docker命令發送到伺服器端的Docker daemon上,再由Docker damon根據指令創建、選擇或者從Docker倉庫中拉取(pull)鏡像。接著客戶端可以通過鏡像創建容器。當我們需要使用程序時,運行相應的容器即可。
小結
需要正確的理解倉儲/鏡像/容器這幾個概念 :
在外面使用容器的時候,我們不希望容器中的數據在容器被刪除後也一並刪除了,這時候我們就可以 通過使用容器數據卷,將數據儲存在本地並用Docker將其掛載到容器中,這樣我們即使刪除了容器,數據也依舊存在伺服器中,也就實現了數據持久化。
特點
容器數據卷掛載命令(-v)
Dockerfile 掛載容器數據卷
我們除了可以從倉庫中拉取鏡像以外,我們也可以 自己創建鏡像 ,這就要用到Docerfile。
dockerfile是用來構建Docker鏡像的構建文件,是由一系列命令和參數構成的腳本 。
構建步驟:
基礎知識:
流程:
說明:
在實際場景中,我們會遇到 多個Container之間通訊 的問題。而Docker網路就是用於解決此問題的技術。docker會給每個容器都分配一個ip,且容器和容器之間是可以互相訪問的。
Docker網路原理
每一個安裝了Docker的linux主機都有一個docker0的虛擬網卡。這是個橋接網卡,使用了 veth-pair 技術 。Docker使用Linux橋接,在宿主機虛擬一個Docker容器網橋(docker0),Docker啟動一個容器時會根據 Docker網橋的網段分配給容器一個IP地址,稱為Container-IP,同時Docker網橋是每個容器的默認網 關。因為在同一宿主機內的容器都接入同一個網橋,這樣容器之間就能夠通過容器的Container-IP直接通信。
Docker容器網路就很好的利用了Linux虛擬網路技術,在本地主機和容器內分別創建一個虛擬介面,並 讓他們彼此聯通(這樣一對介面叫veth pair);
Docker中的網路介面默認都是虛擬的介面。虛擬介面的優勢就是轉發效率極高(因為Linux是在內核中 進行數據的復制來實現虛擬介面之間的數據轉發,無需通過外部的網路設備交換),對於本地系統和容 器系統來說,虛擬介面跟一個正常的乙太網卡相比並沒有區別,只是他的速度快很多。
[圖片上傳中...(image-41d42a-1642627027452-2)]
Docker Compose是一個用於定義並運行多容器應用的工具 。
Docker Compose的 步驟如下 :
NOTE: Compose :重要的概念。
docker-compose.yml編寫
Note: docker-compose會自動為多容器之間創建網路,保證通訊。
Docker Swarm 是Docker 的集群管理工具。 它將 Docker 主機池轉變為單個虛擬 Docker 主機。 Docker Swarm 提供了標準的 Docker API,所有任何已經與 Docker 守護程序通信的工具都可以使用 Swarm 輕松地擴展到多個主機。
Docker 是一個開源的 應用容器引擎 ,它的出現大大簡化了運維的難度,提高了運維效率。過去我們需要在伺服器上安裝程序所需要的所有依賴,而如今我們只需要編寫好docker-compose和Dockefile的腳本,就可以使程序一鍵跑通。在企業級的應用中,我們必然會驚顫使用到Docker和容器化技術。
狂神說
Ⅳ 幾條簡單的docker命令
容器生命周期管理 — docker [run|start|stop|restart|kill|rm|pause|unpause]
容器操作運維 — docker [ps|inspect|top|attach|events|logs|wait|export|port]
容器rootfs命令 — docker [commit|cp|diff]
鏡像倉庫 — docker [login|pull|push|search]
本地鏡像管理 — docker [images|rmi|tag|build|history|save|import]
其他命令 — docker [info|version]
Ⅳ 微服務基礎服務之docker篇
什麼是docker
Docker 最初是 dotCloud 公司創始人 Solomon Hykes 在法國期間發起的一個公司內部項目,它是基於 dotCloud 公司多年雲服務技術的一次革新,並於 2013 年 3 月以 Apache 2.0 授權協議開源,主要項目代碼在 GitHub 上進行維護。Docker 項目後來還加入了 Linux 基金會,並成立推動 開放容器聯盟(OCI)。
Docker 使用 Google 公司推出的 Go 語言 進行開發實現,基於 Linux 內核的 cgroup,namespace,以及 AUFS 類的 Union FS 等技術,對進程進行封裝隔離,屬於 操作系統層面的虛擬化技術。由於隔離的進程獨立於宿主和其它的隔離的進程,因此也稱其為容器。最初實現是基於 LXC,從 0.7 版本以後開始去除 LXC,轉而使用自行開發的 libcontainer,從 1.11 開始,則進一步演進為使用 runC 和 containerd。
Docker 在容器的基礎上,進行了進一步的封裝,從文件系統、網路互聯到進程隔離等等,極大的簡化了容器的創建和維護。使得 Docker 技術比虛擬機技術更為輕便、快捷。
下面的圖片比較了 Docker 和傳統虛擬化方式的不同之處。傳統虛擬機技術是虛擬出一套硬體後,在其上運行一個完整操作系統,在該系統上再運行所需應用進程;而容器內的應用進程直接運行於宿主的內核,容器內沒有自己的內核,而且也沒有進行硬體虛擬。因此容器要比傳統虛擬機更為輕便。
傳統虛擬化
Docker
為什麼要用docker
對開發和運維(DevOps)人員來說,最希望的就是一次創建或配置,可以在任意地方正常運行。
使用 Docker 可以通過定製應用鏡像來實現持續集成、持續交付、部署。開發人員可以通過 Dockerfile 來進行鏡像構建,並結合 持續集成(Continuous Integration) 系統進行集成測試,而運維人員則可以直接在生產環境中快速部署該鏡像,甚至結合 持續部署(Continuous Delivery/Deployment) 系統進行自動部署。
而且使用 Dockerfile 使鏡像構建透明化,不僅僅開發團隊可以理解應用運行環境,也方便運維團隊理解應用運行所需條件,幫助更好的生產環境中部署該鏡像。
特性容器虛擬機 啟動秒級分鍾級 硬碟使用一般為MB一般為GB 性能接近原生弱於 系統支持量單機支持上千個容器一般幾十個
基本概念
我們都知道,操作系統分為內核和用戶空間。對於 Linux 而言,內核啟動後,會掛載 root 文件系統為其提供用戶空間支持。而 Docker 鏡像(Image),就相當於是一個 root 文件系統。比如官方鏡像 ubuntu:18.04 就包含了完整的一套 Ubuntu 18.04 最小系統的 root 文件系統。
Docker 鏡像是一個特殊的文件系統,除了提供容器運行時所需的程序、庫、資源、配置等文件外,還包含了一些為運行時准備的一些配置參數(如匿名卷、環境變數、用戶等)。鏡像不包含任何動態數據,其內容在構建之後也不會被改變。
鏡像(Image)和容器(Container)的關系,就像是面向對象程序設計中的 類 和 實例 一樣,鏡像是靜態的定義,容器是鏡像運行時的實體。容器可以被創建、啟動、停止、刪除、暫停等。
前面講過鏡像使用的是分層存儲,容器也是如此。每一個容器運行時,是以鏡像為基礎層,在其上創建一個當前容器的存儲層,我們可以稱這個為容器運行時讀寫而准備的存儲層為容器存儲層。
按照 Docker 最佳實踐的要求,容器不應該向其存儲層內寫入任何數據,容器存儲層要保持無狀態化。所有的文件寫入操作,都應該使用 數據卷(Volume)、或者綁定宿主目錄,在這些位置的讀寫會跳過容器存儲層,直接對宿主(或網路存儲)發生讀寫,其性能和穩定性更高。
數據卷的生存周期獨立於容器,容器消亡,數據卷不會消亡。因此,使用數據卷後,容器刪除或者重新運行之後,數據卻不會丟失。
鏡像構建完成後,可以很容易的在當前宿主機上運行,但是,如果需要在其它伺服器上使用這個鏡像,我們就需要一個集中的存儲、分發鏡像的服務,Docker Registry 就是這樣的服務。
一個 Docker Registry 中可以包含多個倉庫(Repository);每個倉庫可以包含多個標簽(Tag);每個標簽對應一個鏡像。
通常,一個倉庫會包含同一個軟體不同版本的鏡像,而標簽就常用於對應該軟體的各個版本。我們可以通過 <倉庫名>:<標簽> 的格式來指定具體是這個軟體哪個版本的鏡像。如果不給出標簽,將以 latest 作為默認標簽。
Centos安裝docker18
常用的docker命令
常用的docker鏡像
redis
mysql
Ⅵ Docker常用命令大全
基礎操作:
1 docker images 查看鏡像信息列表 鏡像是靜態的
2 docker ps -a 查看運行中的所有容器
3 docker pull [images]:[version] 從dockerhub拉取指定鏡像
4 docker run -p 8000:80 -tdi --privileged [imageID] [command] 後台啟動docker,並指定宿主機埠和docker映射埠。
-i: 以交互模式運行容器,通常與 -t 同時使用;
-d: 後台運行容器,並返回容器ID;
-t: 為容器重新分配一個偽輸入終端,通常與 -i 同時使用;
--privileged 容器將擁有訪問主機所有設備的許可權
通常情況下 [command] 填下 /bin/bash 即可。
特殊情況下,如需要在centos鏡像中使用 systemctl . 則應添加 --privileged 並設置[command ]為 init 。
5 當鏡像通過run 啟動後,便會載入到一個動態的container(容器)中運行,此時若需要進入終端交互模式:
sudo docker exec -it [containerID] /bin/bash
交互模式中,使用 ctrl+p+q退出交互 保持運行,使用 exit命令退出並停止容器。
6 在容器非交互模式下,通過docker start/stop 命令來啟動/停止已部署的容器服務。
7 docker rm [containerID] 刪除容器
8 docker rmi [imageID] 刪除鏡像
9 docker cp [YourHostFilePath] [containerID]:[DockerPath] 將宿主機內的指定文件傳輸至容器內部的指定地址。
鏡像製作:
1 docker commit [containerID] [ImageName]:[Version] 將修改後的容器重新打包成鏡像
2 docker commit -a "runoob.com" -m "my apache" a404c6c174a2 mymysql:v1 將容器a404c6c174a2 保存為新的鏡像,並添加提交人信息和說明信息。
-a :提交的鏡像作者;
-c :使用Dockerfile指令來創建鏡像;
-m :提交時的說明文字;
-p :在commit時,將容器暫停。
3 docker push [ImageID] [repertory_address] 提交鏡像到雲倉庫
(暫時先記錄這些,後續再更新)
Ⅶ 如何使用 Docker 部署容器
設想,為了推出一個網站,您不必從裸機安裝一個完整的伺服器。 而不是安裝操作系統,然後安裝伺服器軟體,然後部署精心設計的應用程序或站點,您可以簡單地在一個獨立的包中開發所有內容,並使用單個命令將其推出。
這是使用容器的眾多好處之一。它們使開發和部署周期變得異常高效。但是你如何部署這些容器?我想在這里指導你完成這個過程。我們將專注於在Ubuntu Server 18.04上部署基本的NGINX Web伺服器作為容器。所有這一切都將在Docker的幫助下完成。
為了成功將NGINX部署為容器,您需要具備以下條件:
- 一個安裝了Docker的Ubuntu Server 18.04的運行實例。
- 一個docker 用戶組的成員用戶
是的,有了這兩部分,你就准備好了。
您部署的每個容器都將基於從DockerHub中提取的鏡像。 您可以下拉單個鏡像並根據需要隨時使用。 DockerHub上還有許多鏡像用於單個應用程序或平台。 以NGINX為例。 如果你在DockerHub上搜索NGINX,你會得到大約56,172個條目。 這並不意味著每個條目都是您可以使用的可用圖像。
圖像命名如下:
例如,對於NGINX,您可能會找到一個名字為的鏡像:
或許你可能找到:
您也看到了,有幾乎所有需要的鏡像。
在使用圖像之前,必須將其保存在本地驅動器上。 有兩種方法可以做到這一點:
- 直接使用pull命令
- 間接地,在容器部署過程中。
要從DockerHub中拉取圖像,您將打開一個終端窗口並發出命令:
如果你想拉取Ingress圖像,該命令是:
當你拉取你需要的圖像之後,你可以使用命令確認是否存在:
上面的命令將列出你拉取的所有鏡像(圖A)。
拉取隨意圖像時要謹慎。 為什麼? 因為你永遠不知道創造它們的原因。 容器可能包含惡意代碼,可能會對您的網路或數據造成嚴重破壞。 因此,最好只使用官方圖像(例如NGINX圖像)。
現在該部署容器了, 如果您尚未拉取鏡像,則在部署階段將下拉所需要的鏡像。 由於我們拉取官方NGINX圖像,我們將使用它。
要部署容器,請使用docker命令,如下所示:
備註:
- NAME等於您要為容器提供的名稱(這可以是任何內容,例如nginx-webserver)。
- PORTS您要使用的埠(以NETWORK PORT:CONTAINER PORT形式)。
- IMAGE用於容器的圖像(例如nginx)。
因此,部署NGINX容器的基本命令是:
容器將要部署,NGINX Web伺服器將在埠80上可用於本地網路。但是,如果已在伺服器上使用埠80來部署容器,該怎麼辦? 您可以將其部署在網路埠8080上,如下所示:
此時,您可能會看到下一個問題。 運行上述命令之一後,不返回bash提示符(圖B)。
你如何運行一個容器,並獲得你的bash提示? 為此,您必須以分離模式運行容器。 在此之前,您必須使用鍵盤組合[Ctrl] +終止當前容器。 該組合將返回提示並殺死容器。
要確定容器是否運行,使用命令:
將列出所有容器及其狀態(圖C)。
如果容器仍在運行,我們必須在同一埠部署另一個容器之前將其終止(否則埠會發生沖突,從而阻止容器部署)。 要殺死正在運行的容器,首先需要Container ID(隨機字元串)。 發出docker ps -a命令時會顯示此字元串。 要終止正在運行的容器,使用命令:
其中CONTAINER_ID是相關容器的ID。
然後,您可以使用以下命令刪除容器:
其中CONTAINER_ID是相關容器的ID。
請注意,您不必輸入完整的Container ID,字元串的前四個字元就足夠了。
現在,要以分離模式部署容器,命令是:
這次你不僅會得到你的提示,而且Docker會為你顯示容器ID(圖D)。
如果你想在正在運行的容器上工作怎麼辦? 假設您想對NGINX進行更改甚至開始開發它將顯示的網站? 因此,您必須訪問容器。 因此,您需要Container ID。 使用ID,發出命令:
其中CONTAINER_ID是容器的ID。
您現在應該處於運行容器提示符(圖E)中,您可以在其中開始處理NGINX伺服器。
要退出容器,只需鍵入命令exit。
七、比你想像的容易
希望到現在為止,您看到容器部署並不像您想像的那樣具有挑戰性。 在Docker的幫助下,您可以在幾分鍾內推出專業版的應用和服務。
原文鏈接:
Ⅷ Docker常用命令,值得收藏
使用指定的鏡像來運行容器,並可選地在容器中運行指定的命令。
分離模式 :通過 -d 選項指定;容器會在任務(進程)結束時退出。
前台模式 :可以將控制台連接到容器中進程的標准輸入、輸出、錯誤;通過 -t 選項可以為其分配一個偽終端;通過 -i 選項可以保持標准輸入處於打開狀態。
--rm 選項能夠在容器退出時自動刪除容器。
羅列容器。
-a 選項可以列出所有的容器。
查看容器的詳細信息。
查看容器中運行的進程。
持續輸出容器的資源使用情況。
查看容器的埠映射。
查看容器的日誌(標准輸出、錯誤的內容)。
-f 選項可以持續輸出容器的日誌。
將本地終端的標准輸入、輸出、錯誤連接到容器。
在運行的容器中執行指定的命令。
使用 freezer cgroup 掛起容器中的所有進程(進程對掛起操作是無感知的)。
恢復容器中掛起的進程。
停止容器,終止容器中的進程:首先發送 SIGTERM 信號給容器中的進程,一段時間之後發送 SIGKILL 信號。
啟動停止的容器(還是運行之前給定的命令)。
刪除指定的容器。
--force 選項可以強制性刪除運行的容器。
在容器和主機之間拷貝文件、目錄。
將容器的文件系統(不包括卷的內容)導出為 tar 文件,後續可通過 docker import 來載入鏡像。
查看所有的頂層鏡像。
-a 選項可以查看所有的鏡像。
搜索 docker hub。
拉取鏡像。
基於源鏡像創建一個包含 tag 的鏡像。
推送鏡像。
從 tar 文件中載入鏡像。
保存鏡像為 tar 文件,後續可通過 docker load 來載入。
可通過 -o 選項將鏡像保存至指定的文件,默認輸出到標准輸出。
從標准輸入或 tar 文件中載入鏡像。
-i 選項指定從 tar 文件中載入鏡像。
刪除本地鏡像。如果 IMAGE 包含了 tag,且該鏡像具有多個 tags,則此命令只是移除該 tag,而不會刪除鏡像。
-f 選項可強制刪除運行容器所用的鏡像。
Ⅸ Docker命令全集
一:首先來理解三個名詞解釋:
1、鏡像(image)
Docker 鏡像(Image)就是一個只讀的模板。
例如:一個鏡像可以包含一個完整的操作系統環境,裡面僅安裝了 Apache 或用戶需要的其它應用程序。鏡像可以用來創建 Docker 容器,一個鏡像可以創建很多容器。
2、倉庫(repository)
倉庫(Repository)是集中存放鏡像文件的場所。
3、容器(container)
Docker 利用容器(Container)來運行應用。容器是從鏡像(Image)創建的運行實例。
二:常用的命令集合如下:
容器生命周期管理 — docker
[run|start|stop|restart|kill|rm|pause|unpause|create]
容器操作運維 — docker
[ps|exec|inspect|top|attach|events|logs|wait|export|import|port]
容器rootfs命令 — docker
[commit|cp|diff]
本地鏡像管理 — docker
[images|rmi|tag|build|history|save]
鏡像倉庫 — docker
[login|pull|push|search]
其他命令 — docker
[info|version]
詳細命令說明如下:
docker run -d --name alias-Name imageName //在後台啟動一個容器
docker start Name/ID //啟動容器
docker stop Name/ID //停止容器
docker restart Name/ID //重啟容器
docker kill -s KILL Name/ID //殺死一個運行的容器
docker rm /rm -f Name/ID //刪除容器
docker pause Name/ID //停止容器
docker unpause Name/ID //恢復容器
docker create --name CONTAINER_Name imageName //只創建容器但不啟動
docker ps / docker ps -a //查看運行的容器
docker exec -it CONTAINER_ID /bin/bash //進行一個運行中的容器,開啟一個新的終端
docker attach CONTAINER_ID //進行一個運行中的容器,不開啟一個新的終端
docker inspect CONTAINER_Name //查看容器的相關信息
docker top CONTAINER_Name //查看容器裡面的進程
docker events -f "image"="imageName" --since="1467302400" //時間戳=2016年7月1日後的相關事件
docker logs CONTAINER_Name //查看容器的日誌輸出
docker wait CONTAINER_Name //阻塞運行直到容器停止,然後列印出它的退出代碼
docker export -o test.tar CONTAINER_ID //將容器進行打包保存到本地,文件類型為tar
cat test.tar |docker import - image_name:tag //將上面保存的文件導入到鏡像庫中
docker port CONTAINER_ID //查看容器的埠映射情況
commit 從容器中創建一個新的鏡像
docker commit -a "tony test" -m "my mysql" CONTAINER_ID mymysql:v1
docker images mymysql:v1
cp 在使用的過程中會進行多個主機與容器之間的數據交換
docker cp /ruiqi/content CONTAINER_ID:/ruiqi/
diff 用來檢查容器裡面文件結構的更改
docker diff CONTAINER_ID
docker images /docker images -a //查看本地的鏡像,-a 表示是所有的鏡像
docker rmi -f image_name //刪除鏡像
docker tag mysql:v5.6 mysql:v5.7 //給鏡像做一個有別名的復本
docker build -t runoob/ubuntu:v1 . //構建一個鏡像
docker history image_name //查看當前這個鏡像的 歷史 信息
docker save -o TestFlask.tar TestFlask:v3 //將當前的鏡像保存到本地的一個tar 類型的文件
docker login //登錄鏡像倉庫
docker pull //從鏡像倉庫中拉鏡像
docker push //向鏡像倉庫推本地的鏡像文件
docker search //檢索鏡像內容
三:利用dockerfile 製作一個tomcat 運行image:
[root@localhost common]# more Dockerfile.tomcat
FROM cloud.io/centos:7
COPY jdk-8u144-linux-x64.rpm /opt/jdk-8u144-linux-x64.rpm
RUN ["rpm","-ivh","/opt/jdk-8u144-linux-x64.rpm"]
COPY security /usr/java/jdk1.8.0_144/jre/security
COPY certs /etc/pki/tls/certs
COPY tomcat /opt/tomcat
RUN ["ln","-s","/opt/tomcat","/usr/local/tomcat"]
Ⅹ Docker實踐之鏡像啟動及常用命令
前面簡單的介紹了如何在Linux中安裝 Docker ,這節內容,我們學習Docker鏡像啟動
我們Docker啟動鏡像從哪裡來呢?鏡像由我們自己或者他人構建,構建好的鏡像可以直接放在本地或者上傳到遠程鏡像倉庫。當我們運行一個Docker鏡像時,會先在本地查找是否存在所要運行的鏡像,如果沒有則會去遠程鏡像倉庫拉取,默認為官方的鏡像倉庫,當然,我們也可以改為自己的私有鏡像倉庫。接下來,我們先了解幾個簡單的命令。
我們直接在安裝好Docker的主機上執行 docker run nginx
我們從運行日誌可以看到這樣的字眼:
docker發現本地不存在nginx的鏡像文件,便直接去倉庫中查找下載並運行,因為我們沒有讓鏡像後台運行,所以這次運行起來的容器會隨著這次遠程連接斷開而停止。當我按下 ctrl+c 時,容器便會停止
如果要讓容器後台運行,則需要在啟動時加 -d 這個參數,
我們來看一下當前運行中的容器
可以看到,我們的nginx是啟動起來了,但是,我們並不能訪問它。容器有自己的一套虛擬系統,如:網路、文件。如果我們需要訪問,則需要給容器和宿主機做一個映射,讓宿主機和容器能夠交互。這里,我們就給nginx增加埠和配置文件映射。我為了省事,就直接把容器中的配置文件復制出來用
接下來,我們便來建立這個映射關系
來看看容器是否啟動成功
這時候,我們便能訪問我們的nginx服務,
前面已經說到,容器有自己的虛擬系統,如果需要持久化的數據不映射到宿主機上,那麼當容器銷毀時,數據也會隨之丟失,所以,我們在用容器運行時,一定要做好數據的保存方式。
在前面,我們列出了幾個常用的Docker命令,這里,我們把這幾個常用命令稍微講解一下,
ps主要是查詢正常運行的容器
docker ps 是當前正在運行的容器
這裡面的 CONTAINER ID 很重要,後面我們的很多操作都需要基於這個 CONTAINER ID 或者 NAMES 。
docker ps -a 則是列出運行中和停止中的所有容器,
這幾個參數這是啟動/停止/重啟/刪除容器的參數,如: docker restart 5ae0319e1795 ,如果要刪除容器,必須要先停止,否則會提示
docker run [OPTIONS] IMAGE [COMMAND] [ARG…],它的運行參數就比較復雜了,
這里還是只介紹幾個常用的命令參數吧,
運行示例 docker run -d --name nginx-cc -v /root/nginx/:/etc/nginx/ -p 9999:80 -m 256M nginx
cp命令主要是用於宿主機和容器間的文件復制,一般格式如下:
docker cp [OPTIONS] 容器名/容器Id:容器文件路徑 宿主機文件路徑 從容器復制到宿主機
docker cp [OPTIONS] 宿主機文件路徑 容器名/容器Id:容器文件路徑 從宿主機復制到容器中
inspect主要是查看容器或者鏡像元數據,如:
從返回的信息中,我們可以得到,啟動時所設置的啟動參數。如:
如果,那天我們忘記之前容器啟動的參數時,便可以通過 inspect 來幫我們找回來。
logs主要是查詢docker容器的運行日誌,如: