1. 程式人生 > >Docker | 學習系列 (五)Docker容器常用命令

Docker | 學習系列 (五)Docker容器常用命令

本節我們來討論Docker容器的常用命令。

新建並啟動容器[重要]

使用以下docker run 命令即可新建並啟動一個容器。該命令是我們最常用的命令了,它有很多選項,下面筆者列舉一些常用的選項。

① -d選項:表示後臺執行

② -P選項:隨機埠對映

③ -p選項:指定埠對映,有以下四種格式。

ip:hostPort:containerPort

ip::containerPort

hostPort:containerPort

containerPort

④ –network選項:指定網路模式,該選項有以下可選引數:

–network=bridge: 預設選項,表示連線到預設的網橋。

–network=host:容器使用宿主機的網路。

–network=container:NAME_or_ID:告訴Docker讓新建的容器使用已有容器的網路配置。

–network=none:不配置該容器的網路,使用者可自定義網路配置。

示例1:

docker run java /bin/echo 'Hello World'

這樣終端會列印Hello World的字樣,跟在本地直接執行/bin/echo 'Hello World' 一樣。

示例2:

docker run -d -p 91:80 nginx

這樣就能啟動一個Nginx容器。在本例中,我們為docker run添加了兩個引數,含義如下:

-d # 後臺執行
-p 宿主機埠:容器埠 # 開放容器埠到宿主機埠

圖12-3 Nginx首頁

TIPS

需要注意的是,使用docker run命令建立容器時,會先檢查本地是否存在指定映象。如果本地不存在該名稱的映象,Docker就會自動從Docker Hub下載映象並啟動一個Docker容器。

列出容器[重要]

使用docker ps 命令即可列出執行中的容器。執行該命令後,可看到類似於如下的表格。

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES784
fd3b294d7 nginx "nginx -g 'daemon off" 20 minutes ago Up 2 seconds 443/tcp, 0.0.0.0:91->80/tcp backstabbing_archimedes

如需列出所有容器(包括已停止的容器),可使用-a引數。

該表格包含了七列,含義如下:

① CONTAINER_ID:表示容器ID。

② IMAGE:表示映象名稱。

③ COMMAND:表示啟動容器時執行的命令。

④ CREATED:表示容器的建立時間。

⑤ STATUS:表示容器執行的狀態。Up表示執行中,Exited表示已停止。

⑥ PORTS:表示容器對外的埠號。

⑦ NAMES:表示容器名稱。該名稱預設由Docker自動生成,也可使用docker run命令的–name選項自行指定。

命令格式:

docker ps [OPTIONS]

引數:

Name, shorthandDefaultDescription
--all, -afalse列出所有容器,包括未執行的容器,預設只展示執行的容器
--filter, -f根據條件過濾顯示內容
--format通過Go語言模板檔案展示映象
--last, -n-1顯示最近建立n個容器(包含所有狀態)
--latest, -lfalse顯示最近建立的容器(包含所有狀態)
--no-truncfalse不截斷輸出
--quiet, -qfalse靜默模式,只展示容器的編號
--size, -sfalse顯示總檔案大小

示例:

docker ps -n 5docker ps -a -q

停止容器[重要]

使用docker stop 命令,即可停止容器。

命令格式:

docker stop [OPTIONS] CONTAINER [CONTAINER...]

引數:

Name, shorthandDefaultDescription
--time, -t10強制殺死容器前等待的時間,單位是秒

示例:

docker stop 784fd3b294d7

其中784fd3b294d7 是容器ID,當然也可使用docker stop 容器名稱 來停止指定容器。

強制停止容器[重要]

可使用docker kill 命令停止一個或更多執行著的容器。

命令格式:

docker kill [OPTIONS] CONTAINER [CONTAINER...]

引數:

Name, shorthandDefaultDescription
--signal, -sKILL向容器傳送一個訊號

例如:

docker kill 784fd3b294d7

啟動已停止的容器[重要]

使用docker run 命令,即可新建並啟動一個容器。對於已停止的容器,可使用docker start 命令來啟動。

命令格式:

docker start [OPTIONS] CONTAINER [CONTAINER...]

引數:

Name, shorthandDefaultDescription
--attach, -afalse連線STDOUT/STDERR並轉發訊號
--checkpoint從該檢查點還原
--checkpoint-dir使用自定義的檢查點儲存目錄
--detach-keys覆蓋斷開容器的關鍵順序
--interactive, -ifalse連線容器的STDIN

例如:

docker start 784fd3b294d7

重啟容器[重要]

可使用docker restart 命令來重啟容器。該命令實際上是先執行了docker stop 命令,然後執行了docker start 命令。

命令格式:

docker restart [OPTIONS] CONTAINER [CONTAINER...]

引數:

Name, shorthandDefaultDescription
--time, -t10關閉容器前等待的時間,單位是秒

進入容器[重要]

某場景下,我們可能需要進入執行中的容器。

① 使用docker attach 命令進入容器。

例如:

docker attach 784fd3b294d7

很多場景下,使用docker attach 命令並不方便。當多個視窗同時attach到同一個容器時,所有視窗都會同步顯示。同理,如果某個視窗發生阻塞,其他視窗也無法執行操作。

② 使用nsenter 進入容器

nsenter工具包含在util-linux 2.23或更高版本中。為了連線到容器,我們需要找到容器第一個程序的PID,可通過以下命令獲取:

docker inspect --format "{{.State.Pid}}" $CONTAINER_ID

獲得PID後,就可使用nsenter命令進入容器了:

nsenter --target "$PID" --mount --uts --ipc --net --pid

下面給出一個完整的例子:

[[email protected] ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES784fd3b294d7 nginx "nginx -g 'daemon off" 55 minutes ago Up 3 minutes 443/tcp, 0.0.0.0:91->80/tcp backstabbing_archimedes[root@localhost ~]# docker inspect --format "{{.State.Pid}}" 784fd3b294d795492[[email protected] ~]# nsenter --target 95492 --mount --uts --ipc --net --pid[email protected]:/#

讀者也可將以上兩條命令封裝成一個Shell,從而簡化進入容器的過程。

③ docker exec

docker exec -it 容器id /bin/bash

刪除容器[重要]

使用docker rm 命令即可刪除指定容器。

命令格式

docker rm [OPTIONS] CONTAINER [CONTAINER...]

引數:

Name, shorthandDefaultDescription
--force, -ffalse通過SIGKILL訊號強制刪除正在執行中的容器
--link, -lfalse刪除容器間的網路連線
--volumes, -vfalse刪除與容器關聯的卷

例1:刪除指定容器。

docker rm 784fd3b294d7

該命令只能刪除已停止的容器,如需刪除正在執行的容器,可使用-f引數。

例2:刪除所有的容器。

docker rm -f $(docker ps -a -q)

匯出容器

將容器匯出成一個壓縮包檔案。

命令格式:

docker export [OPTIONS] CONTAINER

引數:

Name, shorthandDefaultDescription
--output, -o將內容寫到檔案而非STDOUT

示例:

docker export red_panda > latest.tardocker export --output="latest.tar" red_panda

匯入容器

使用docker import 命令即可從歸檔檔案匯入內容並建立映象。

命令格式:

docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]

引數:

Name, shorthandDefaultDescription
--change, -c將Dockerfile指令應用到建立的映象
--message, -m為匯入的映象設定提交資訊

示例:

docker import nginx2.tar nginx

拓展閱讀

相關推薦

Docker | 學習系列 Docker容器常用命令

本節我們來討論Docker容器的常用命令。 新建並啟動容器[重要]使用以下docker run 命令即可新建並啟動一個容器。該命令是我們最常用的命令了,它有很多選項,下面筆者列舉一些常用的選項。① -d選項:表示後臺執行② -P選項:隨機埠對映③ -p選項:指定埠對映,有以下四種格式。ip:h

docker學習筆記——Docker常用命令總結

docker學習筆記 docker常用命令總結 1. 開啟/停止/重啟container(start/stop/restart)容器可以通過run新建一個來運行,也可以重新start已經停止的container,但start不能夠再指定容器啟動時運行的指令,因為docker只能有一個前臺進程。容器st

Docker學習筆記-Docker Compose

背景 很多應用是很複雜的,需要多個容器共同支援,任何複雜的系統可能需要啟動的容器數量也很龐大,我們需要從Dockerfile build image或者docker hub拉取多個image,要建立並管理多個container,這個工作量是巨大的,docker

Docker | 學習系列 Docker如何配置映象加速器

國內訪問Docker Hub的速度很不穩定,有時甚至出現連線不上的情況。本節我們來為Docker配置映象加速器,從而解決這個問題。目前國內很多雲服務商都提供了映象加速的服務。常用的映象加速器有:阿里雲加速器、DaoCloud加速器等。各廠商映象加速器的使用方式大致類似,筆者以阿里雲加速器為例進

Docker學習系列:windows下安裝docker

阻止 statistic pro nta 雙擊 copyright ner notebook 現在 本文目錄如下: windows按照docker的基本要求 具體安裝步驟 開始使用 安裝遠程連接工具連接docker 安裝中遇到的問題 Docker的更新 Dock

docker學習系列製作基礎的base專案映象--jdk+tomcat

前面已經完成了docker的安裝以及使用,現在我們要將自己的javaweb專案與docker結合 1.1準備jdk+tomcat軟體 ​​我下載了apache-tomcat-7.0.68.tar.gz

Docker學習筆記容器的基本操作

容器是一個打包了應用和服務的環境,是一個輕量級的虛擬機器,每一個容器都由一組應用和必要依賴的庫組成。 容器作為軟體應用的標準集裝箱,必須要定義與應用無關的介面。 這次主要學習容器的標準操作 建立容器 建立完容器後docker都會返回一個容器的ID。這

Docker學習筆記容器檢視啟動終止刪除

檢視 docker ps 主要有些引數要說一下 1. 不加引數,表示檢視當前正在執行的容器 2. -a,檢視所有容器包括停止狀態的容器 3. -l,檢視最新建立的容器 4. -n=x,檢視最

Docker學習系列:Ubuntu下使用Docker的基本指令記錄及一些注意事項

1.Dockerhub下載映象 有兩種方式可以獲得新的映象 直接從dockerhub下載編譯好的image(該編譯過程在docker hub的雲端完成)(見3.1) 下載docekrfile檔案,在本機進行build 直接在docker

Docker學習系列:Ubuntu14.04下安裝Docker-2016.06.26更新版

注:docker官網更新很快,而且更新變化很大,3個月前的安裝方法,今天發現已經不再適用,所以,這裡對ubuntu下安裝docker的方法進行更新 Ubutnu上安裝Docker的詳細教程見新版的Docker官網 安裝使用時,需要注意一點:要用sudo許可

Docker學習筆記---docker鏡像及基於container制作

系統基礎 方式 目錄 info run contain tar 互聯 指定 Docker鏡像詳解前面講到docker包括image,container.....等組件docker image包含啟動容器所需的文件系統及內容,所以它才能用於創建並啟動docker容器docke

Docker入門教程Docker安全

【編者的話】DockOne組織翻譯了Flux7的Docker入門教程,本文是系列入門教程的第五篇,介紹了Docker的安全問題,依然是老話重談,入門者可以通過閱讀本文快速瞭解。 我們必須高度重視開源軟體的安全問題,當開發者在使用Docker時,從本地構建應用程式到生產環境部署是沒有任何差異的(譯

zookeeper學習系列zookeeper分散式鎖機制

大家也許都很熟悉了多個執行緒或者多個程序間的共享鎖的實現方式了,但是在分散式場景中我們會面臨多個Server之間的鎖的問題,實現的複雜度比較高。利用基於google chubby原理開發的開源的zookeeper,可以使得這個問題變得簡單很多。下面介紹幾種可能的實現方式

Docker學習總結29——Docker核心技術與實現原理

提到虛擬化技術,我們首先想到的一定是 Docker,經過四年的快速發展 Docker 已經成為了很多公司的標配,也不再是一個只能在開發階段使用的玩具了。作為在生產環境中廣泛應用的產品,Docker 有著非常成熟的社群以及大量的使用者,程式碼庫中的內容也變得非常龐大。同樣,由於

Docker學習總結33——Docker環境下搭建 MySQL 主從複製

搭建環境Centos 7.2 64位MySQL 5.7.13Docker 1.13.1接下來,我們將會在一臺伺服器上安裝docker,並使用docker執行三個MySQL容器,分別為一主兩從。安裝doc

Docker學習總結3——Docker實戰之入門以及Dockerfile

應用映象 csphere/wordpress:4.2 # cd docker-training/wordpress/ # ls -a . license.txt wp-config-sample.php wp-login.

Docker 學習筆記 docker特點及應用場景

 在我們討論Docker的使用場景之前,先來看看Docker這個工具有什麼特別的地方吧。 Docker提供了輕量級的虛擬化,它幾乎沒有任何額外開銷,這個特性非常酷。 首先你在享有Docker帶來的虛擬化能力的時候無需擔心它帶來的額外開銷。其次,相比於虛擬機器,你可以在

Docker學習總結23——Docker搭建大規模測試環境的實踐

內容來源:2017年4月8日,第四正規化資深測試開發工程師孫高飛在“餓了麼技術沙龍【第四彈】北京研發中心測試專場”進行《docker搭建大規模測試環境的實踐》演講分享。IT大咖說作為獨家視訊合作方,經主辦方和講者審閱授權釋出。 摘要 Docker是一個開源的應用容器

DockerDocker學習筆記Docker基礎

1 Docker簡介 開發語言:Go 性質:作業系統層面的虛擬化技術 Docker 和傳統虛擬化方式的區別: 傳統虛擬機器技術是虛擬出一套硬體後,在其上執行一個完整作業系統,在該系統上再執行所需應用程序 容器內的應用程序直接運行於宿主的核心,

Docker學習筆記:Docker的三個基本概念

Docker 包括三個基本概念 映象(Image)容器(Container)倉庫(Repository)理解了這三個概念,就理解了 Docker 的整個生命週期。 映象Image Docker 映象就是一個只讀的模板。 例如:一個映象可以包含一個完整的 ubuntu 作業系