1. 程式人生 > >Docker入門實戰(一)——Docker常用命令

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 容器名

這裡寫圖片描述