Docker教程-使用
簡介
本文主要介紹Docker正常使用過程涉及到的命令和一些基本操作,按照由簡單到復雜的過程逐一講解。
鏡像管理
回顧我之前博客所提到的,Docker允許在容器內運行應用程序,對應的命令為docker run,而容器就是鏡像的一個實例化,我們先講解本地鏡像管理。
基礎操作
sudo docker images命令可以查看本地主機上所有的Docker鏡像文件,例如剛安裝的docker-ce執行結果如下。
簡單說明上述顯示的各項含義:
- REPOSITORY:鏡像的倉庫源
- TAG:鏡像的標簽,一般代表版本
- IMAGE ID:鏡像的ID
- CREATED:鏡像創建時間
- SIZE:鏡像大小
同一倉庫源可以有不同的TAG,表示不同的版本,如ubuntu倉庫源有15.10、18.04等多個版本,使用REPOSITORY:TAG來定義具體到版本的鏡像,若不指定鏡像的TAG則默認獲取TAG為latest的最新版。
docker pull repository:tag命令來獲取一個本地不存在的鏡像,例如使用sudo docker pull ubuntu:16.04獲取16.04版本的鏡像文件到本地,當然,若是直接使用這個本地沒有的鏡像,docker也會自動下載的。
docker search repository命令用于從Docker Hub網站搜索可用鏡像,也可以直接訪問該網站進行搜索。當你不清楚自己想要的鏡像的具體名稱,可以使用關鍵詞進行搜索。下圖舉例搜索httpd服務的鏡像。
簡單說明上述各項含義。
- NAME: 鏡像倉庫源的名稱
- DESCRIPTION: 鏡像的描述
- OFFICIAL: 是否為docker官方發布
- STARS: 類似Github的Star,越高則該鏡像越受歡迎。
- AUTOMATED: 是否自動構建。
sudo docker run httpd命令用于在簡單容器中運行docker鏡像,可以運行下載到本地的鏡像,未下載則docker會先請求下載鏡像文件。(具體容器運行的命令和參數后文提到。)
sudo docker rmi hello-world命令用于刪除一個鏡像,例如刪除hello-world鏡像如下圖。注意,正在被容器使用的鏡像不能刪除,需要先刪除容器,具體操作后文提到。
進階操作
當我們從docker鏡像倉庫獲取的鏡像已經不能滿足需求了,自己定制自己的鏡像是必然的選擇,這就涉及到鏡像更改的操作,主要有兩種方法:
- 從已經創建的容器中更新鏡像并提交
- 利用docker build命令配合DockerFile文件從零創建新的docker鏡像
相對而言,后者難度較高,對Linux需要充分了解,本文只提及第一種方法。
現在,首先運行一個容器并進行修改,隨后退出容器。(涉及容器命令后文提到)下圖id為c45e75d79135的容器就是創建的容器并已經被更改了。然后通過docker commit -m "desc" -a "author" id 鏡像名命令來向本地倉庫提交鏡像副本,通過命令可以查看本地當前鏡像,確實提交成功且能向其添加容器來運行。
這里先簡單說一下commit命令的幾個基本參數(示例如下圖):
- -m: 本次提交的鏡像描述
- -a: 指定鏡像作者
- c45e75d79135:當前容器id
- zhouchen/ubuntu:v2: 指定要創建的目標鏡像名,一般分為倉庫名和標簽名兩部分,:分隔,倉庫名一般采用作者名/應用名的方式命名。
最后,docker tag 鏡像id repository:newtag命令來為鏡像添加權限的標簽,示例如下,為ubuntu鏡像創建了一個新的tag。
容器管理
這部分主要講解容器的操作,容器是鏡像運行的一個實例化,一個鏡像可以產生多個容器,但每個容器只有一個對應的鏡像。
基礎操作
docker run -i -t ubuntu /bin/bash表示啟動一個以ubuntu鏡像為基礎的可交互的容器,進入交互式shell后可以使用exit命令直接退出容器。
其具體參數說明如下:
- -i:交互式操作
- -t:指定終端
- ubuntu:鏡像名
- /bin/bash:鏡像名后是命令,這里使用bash獲取一個交互式shell。
下圖就是一個簡單示例,可以通過命令行host名等變化看出容器和主機的切換。
docker ps -a命令可以查看所有的容器的詳細信息(把控鏡像、容器id、創建時間、),docker start 容器id可以啟動一個停止的容器,docker stop 容器id可以停止一個運行的容器,docker restart 容器id可以重啟容器的運行。下圖簡單演示上述幾個命令使用情況及容器狀態的變化。
然而,很多場景下,docker服務都是后臺運行的,此時需要指定容器的運行模式。docker run -i -t -d ubuntu /bin/bash表示后臺運行容器,只需要在run命令中加入-d選項即可,加入該選項后不會默認進入該容器了只會返回一個容器id,要想進入運行的容器需要使用attach或者exec命令,強烈推薦使用后者,具體說明如下。
docker attach 容器id命令來重新進入后臺正在運行的容器,下圖就是這樣操作,進入后臺容器并執行一個輸出語句后退出容器,此時隨著退出容器,容器的運行也會終止。
docker exec -it 容器id /bin/bash命令也能進入這個運行中的容器,但是隨著容器的退出,容器運行不會終止,示例如下圖。
docker rm -f 容器id命令可以刪除指定的容器,不論這個容器的運行狀態如何(不加-f選項則不能刪除運行中的容器),而docker container prune則可以清理掉所有的處于停止狀態的容器。
進階操作
下面介紹容器的導出和導入。
很多時候,異地部署,需要將容器轉為本地文件導出,該命令為docker export 容器id > file.tar,就能將容器快照導出為本地tar文件。
docker import命令則可以將容器快照導入為鏡像,依據該鏡像可以再次創建容器。該命令接受本地文件或者遠程url。
下圖演示導出導入的過程,導入使用本地文件,命令為cat file.tar | docker import - test/ubuntu:v3。
實戰
下面具體講解一個案例,其作用是在容器中運行一個Web程序,并進行端口映射,使得主機可以訪問。
首先是拉取鏡像,這里使用一個STAR數較高的演示demo,training/webapp其運行一個flask的網站程序。隨后就是運行一個容器,里面運行Web服務,如下圖這里run命令加了一個-P或者-p選項,這表示將容器內部使用的網絡端口映射到主機,這樣才能進行訪問。
使用docker ps命令可以查看到這個運行中的容器,此時看到PORTS這一項有了內容,它表示將容器中5000端口(這是flask默認端口)轉發到主機的32768端口,這是因為run的時候使用了-P選項進行隨機轉發,可以改用-p 主機端口:容器端口進行具體設置。
此時可以通過瀏覽器進行網頁訪問,結果如下。
下面補充幾條相關的命令。
首先,只查看端口可以使用docker port 容器id/容器名稱查看映射情況;
接著,docker logs -f 容器id/容器名稱命令查看容器內部標準輸出,-f選項表示持續輸出(Ctrl + C終止);
然后,docker top 容器id/容器名稱命令查看容器內部進程情況;
最后,docker inspect 容器id/容器名稱可以查看Docker運行情況,返回一個包含容器配置和狀態的json文件。
補充說明
本文主要介紹了Docker這一容器技術最基本的一些命令和使用方法,也在最后進行了一個Web程序的演示。篇幅較長,如有疏漏,歡迎評論指正。
總結
以上是生活随笔為你收集整理的Docker教程-使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Docker教程-安装
- 下一篇: Docker教程-仓库管理