Docker入門實戰(一)——Docker常用命令
什麼是Docker?
Docker containers wrap a piece of software in a complete filesystem that contains everything needed to run: code, runtime, system tools, system libraries – anything that can be installed on a server. This guarantees that the software will always run the same, regardless of its environment.
Docker容器是一個完整的檔案系統,這個檔案系統中包含了你的軟體執行所需要的全部環境,如:軟體的原始碼、執行環境、所需的軟體等。也就是說,你的軟體執行所需要的環境都包含在了Docker容器中,這樣的話當你把程式碼部署到伺服器上時就不需要考慮環境問題,只要伺服器安裝了Docker就能準確無誤地執行你的軟體。
Docker基本概念
映象
映象可以理解為一組指令的集合。這些指令確定你的軟體執行所需要的環境,如確你需要什麼作業系統、需要安裝什麼軟體、需要執行什麼命令。
當我們做完一個映象後可以把它通過git的方式管理起來。
映象倉庫
映象倉庫用於儲存同一映象的不同版本。
容器
容器是映象的執行例項,從使用者角度看它是一個完整的Linux系統。
Registry
Registry用於儲存映象倉庫。Registry分為兩種型別,一種是Docker官方提供的Registry,稱為Docker Hub,它和Github一樣,我們可以註冊賬號,並存儲自己的映象,也可以使用別人的映象;另一種是自己搭建的Registry,由於Docker Hub是一個開源專案,因此我們可以把Docker Hub部署到我們的區域網中,從而擁有私有的Registry。
Docker常用命令
檢視映象
該命令會顯示本地所有映象:
docker images
結果如下:
REPOSITORY TAG IMAGE ID CREATED SIZE
chai/tomcat8 0.0.1 4af46f004a15 4 days ago 1.197 GB
chaimm/tomcat8 0.0.1 4af46f004a15 4 days ago 1.197 GB
ubuntu latest f8d79ba03c00 8 days ago 126.4 MB
centos latest 970633036444 3 weeks ago 196.7 MB
REPOSITORY:映象倉庫的名字
TAG:該映象的版本號
IMAGE ID:映象的ID
CREATED:建立時間
SIZE:映象的大小
新建容器
方式一:
該命令會基於指定映象建立一個新的容器:
docker run --name 容器名 -i -t 映象名 /bin/bash
–name:為容器設定一個名字
-i -t:使得容器啟動後能獲取該容器的shell
映象名:指定容器要基於哪一個映象執行
最後一個引數是執行時需要需要執行的命令,這裡執行/bin/bash使得容器執行後啟動一個bash供我們和容器互動。
啟動後結果如下:
[root@20fcdc5cdc57 local]#
啟動後我們將進入容器內部,獲得一個用於和容器互動的shell,我們可以在這裡對容器作任何操作,並且和操作一臺Linux系統沒有任何區別。
方式二:
docker run --name 容器名 -d 映象名
上述命令將-i -t和/bin/bash換成了-d,從而可以使容器在後臺執行,無互動式shell。
該命令執行後僅返回一個容器ID。
檢視已建立的容器
docker ps -a
-a:能檢視所有已經被建立的容器;不加這個引數僅會顯示正在執行的容器。
執行結果如下:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
20fcdc5cdc57 chai/tomcat8:0.0.1 "/bin/bash" 4 days ago Exited (0) 6 minutes ago tomcat8
d89068a849bd centos "/bin/bash" 4 days ago Exited (0) 4 days ago high_ride
CONTAINER ID:該容器的ID
IMAGE:該容器使用的映象
COMMAND:啟動時執行的命令
CREATED:容器建立時間
STATUS:當前執行狀態
PORTS:該容器所開啟的埠號
NAMES:容器的名字
啟動已建立的容器
docker start 容器名
該命令執行後容器會在後臺執行,只返回一個容器ID,若需要獲取容器互動式shell,需要繼續執行如下命令:
docker attach 容器名
在容器內執行命令
要在容器內執行命令有兩種情況:
情況一:如果你已經進入容器內部,並獲取了容器的shell,那麼就執行執行命令即可;
情況二:如果容器在後臺執行,那麼你可以通過docker exec命令直接在宿主機上執行某個容器的命令,該命令的用法如下:
docker exec [引數] 容器名 命令
上述命令會在指定的容器中執行指定的命令。
如果你的命令無需互動,那麼需要在引數部分加上-d,使得該命令在容器後臺執行即可;
如果你的命令在執行過程中需要使用者輸入,那麼需要在引數部分加上-i -t,並使用命令:/bin/bash,從而你就能進入容器內部,獲取一個互動式的shell。
停止容器
方式一:
當你在容器內部,只要執行exit命令即可停止並退出容器。
方式二:
當容器處於後臺執行的狀態,你需要通過如下命令停止容器:
docker stop 容器名
獲取容器引數
docker inspect 容器名
上述指令可以檢視指定容器的所有配置資訊,這些資訊以JSON的形式返回,如下:
[
{
"Id": "20fcdc5cdc577460fb58bfe76eff743f176cfabbcbf4942401dc7aa35031a56b",
"Created": "2016-08-15T13:45:50.99616017Z",
"Path": "/bin/bash",
"Args": [],
"State": {
"Status": "exited",
"Running": false,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 0,
"ExitCode": 0,
"Error": "",
"StartedAt": "2016-08-20T02:50:13.565344395Z",
"FinishedAt": "2016-08-20T02:51:31.574303352Z"
},
"Image": "sha256:4af46f004a1542f94b6a4178d1af7eaa896e45bcfaf1fd1955a6c08a36670c0d",
"ResolvConfPath": "/var/lib/docker/containers/20fcdc5cdc577460fb58bfe76eff743f176cfabbcbf4942401dc7aa35031a56b/resolv.conf",
"HostnamePath": "/var/lib/docker/containers/20fcdc5cdc577460fb58bfe76eff743f176cfabbcbf4942401dc7aa35031a56b/hostname",
"HostsPath": "/var/lib/docker/containers/20fcdc5cdc577460fb58bfe76eff743f176cfabbcbf4942401dc7aa35031a56b/hosts",
"LogPath": "/var/lib/docker/containers/20fcdc5cdc577460fb58bfe76eff743f176cfabbcbf4942401dc7aa35031a56b/20fcdc5cdc577460fb58bfe76eff743f176cfabbcbf4942401dc7aa35031a56b-json.log",
"Name": "/tomcat8",
"RestartCount": 0,
"Driver": "aufs",
……………………
如果你只需要檢視其中某個資訊,可以使用-f或–format引數指定:
docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名
刪除容器
docker rm 容器名