docker官方文檔筆記


 

DockerCentOS7.X上運行。Docker可能在其他EL7的兼容版本中成功安裝,但是官方並未進行測試,因此也不提供任何支持。

 

系統環境要求

docker必須運行在64-bit的系統上,對於CentOS的版本號並沒有特別要求。另外,如果需要在CentOS上安裝,內核版本必須高於3.10

通過uname -r 查看內核版本

uname -r

3.10.0-327.el7.x86_64

 

腳本安裝

可以通過以下兩種方法安裝Docker Engine。使用 yum包管理器;

或者使用 curl命令訪問 get.docker.com網站。后者將獲得一個安裝腳本,該腳本將通過yum管理器安裝Docker

[root@localhost ~]# curl https://get.docker.com|sh

#安裝好之后在/etc/group 下,會有一個docker

創建一個docker用戶組

docker守護進程現在綁定了一個Unix Socket,取代了之前的TCP端口。 默認情況下,這個Socket的屬主用戶是root並且用戶可以通過sudo進行訪問。因此,docker守護進程總是通過root用戶運行。

為了避免在使用docker命令的時候使用sudo,需要創建一個名為dockerUnix用戶組,並給該用戶組添加用戶。當docker守護進程啟動后,docker用戶組的用戶可以獲得socket的的讀寫權限。

注意: docker用戶組等效於root用戶; 關於這樣做為什么為影響你的系統安全,更多信息可以查看Docker Daemon Attach Surface

 

docker用戶組添加用戶

$ sudo usermod -aG docker your_username

重新登錄

這樣可以保證你的用戶獲得正確的權限

確認你可以不使用sudo啟動docker容器

$ docker run hello-world

 

 

設置docker daemon為開機啟動

確保docker會在開機時候啟動,需要執行以下命令

sudo chkconfig docker on

# 或者

sudo systemctl enabld docker.service

#如果需要使用HTTP代理,那么需要為Docker執行文件另外設置一個目錄或者分區,或者使用其他定制選項。閱讀關於系統的文章並學習customize your Systemd Docker daemon options

 

 

卸載

可以通yum 卸載docker軟件

列出所有以及安裝的程序包

$ yum list installed |grep docker

docker-engine.x86_64                 1.12.1-1.el7.centos             @dockerrepo

docker-engine-selinux.noarch         1.12.1-1.el7.centos             @dockerrepo

 

刪除軟件包

$ sudo yum -y remove docker-engine.x86_64   1.12.1-1.el7.centos

 

該命令不會刪除docker鏡像,容器,數據卷,或者用戶創建的配置文件。 +

如果要刪除鏡像,容器和數據卷,使用以下命令

$ rm -rf /var/lib/docker

查找並刪除其他任意用戶創建的配置文件。

 

使用yum安裝

登錄系統,並確認用戶為root或者用戶有權限使用sudo命令。

保證你現有的yum安裝包是最新的。

 sudo yum update

 

添加yum repo

sudo tee /etc/yum.repos.d/docker.repo <<-'EOF'

 

[dockerrepo]

name=Docker Repository

baseurl=https://yum.dockerproject.org/repo/main/centos/7/

enabled=1

gpgcheck=1

gpgkey=https://yum.dockerproject.org/gpg

EOF

 

安裝docker

sudo yum install docker-engine

 

啟動docker

    sudo service docker start

    /bin/systemctl  stop  docker.service

確認docker被正確安裝並在容器中運行一個測試鏡像(image)

    $ sudo docker run hello-world (大小為1.84KB

    Unable to find image 'hello-world:latest' locally

    latest: Pulling from library/hello-world

    c04b14da8d14: Pull complete

    Digest: sha256:0256e8a36e2070f7bf2d0b0763dbabdd67798512411de4cdcf9431a1feb60fd9

    Status: Downloaded newer image for hello-world:latest

 

    Hello from Docker!

    This message shows that your installation appears to be working correctly.

 

    To generate this message, Docker took the following steps:

     1. The Docker client contacted the Docker daemon.

     2. The Docker daemon pulled the "hello-world" image from the Docker Hub.

     3. The Docker daemon created a new container from that image which runs the

        executable that produces the output you are currently reading.

     4. The Docker daemon streamed that output to the Docker client, which sent it

        to your terminal.

 

    To try something more ambitious, you can run an centos container with:

     $ docker run -it centos bash

 

    Share images, automate workflows, and more with a free Docker Hub account:

     https://hub.docker.com

 

    For more examples and ideas, visit:

     https://docs.docker.com/engine/userguide/

 

了解docker鏡像與容器

docker引擎提供核心docker技術,從而實現鏡像和容器。正如安裝的最后一步,你執行docker run hello-world命令。這條命令分為三個部分:

        

 

鏡像是在運行時使用的文件系統和參數構成的。他沒有狀態且還不會改變。

容器是鏡像運行時的一個實例。當你執行命令時,Docker引擎會:

    ● 檢查當前系統環境是否有hello-world軟件鏡像

    ● 如果沒有則從Docker Hub上下載鏡像

    ● 加載鏡像到容器並“執行”他

根據構建方式的不同,一個鏡像可能在執行一個簡單的、單一的命令后退出。正如hello-world鏡像。

一個docker鏡像可以做事情還有很多。一個鏡像可能啟動一個例如數據庫的復雜程序,並等待你(或其他人)添加、存儲數據並在之后使用他;進而等待之后的人員繼續使用。

 

Docker創建了 hello-world鏡像,但是其他任何人也可以。Docker引擎允許其他人或公司通過鏡像創建並分享軟件。

使用docker時,你不用擔心你的計算機是否能夠運行鏡像中的軟件dock容器中,永遠可以成功運行

 

容器中的Hello World

Docker允許你在容器中運行你創建的應用或其他任何東西。而運行一個應用只需要一個簡單的命令: docker run ****

注意:跟你docker系統的配置,可能你需要使用 sudo才能執行docker命令。如果不想再使用sudo,可以將用戶添加到docker用戶組。

 

輸出hello wolrd

    $ docker run centos /bin/echo "hello world"

    hello wolrd

#########啟動了你的第一個容器##########

 

docker run 啟動了一個容器。

Centos是這個容器使用的鏡像。如果本地沒有該鏡像則會從DockerHub上下載。

鏡像啟動完成后,在容器內執行了 /bin/echo 命令。

 

這個容器啟動后,Docker創建了一個新的centos系統環境並在容器內執行/bin/echo已經打印輸出

hello world

啟動一個可交互的容器

$ docker run centos (# pull centos系統)

$ docker run -t  -i  centos  /bin/bash

[root@041024e7efea /]# pwd

/

[root@041024e7efea /]# cd /tmp

[root@041024e7efea tmp]# ls

ks-script-CIN_1i  yum.log

[root@041024e7efea tmp]#

在本例中:

docker run啟動了一個容器。

centos是使用的鏡像。

-t 在容器內部注冊了一個 pseudo-tty或者terminal

-i 通過容器的標准輸入[STDIN]建立了一個鏈接,允許你與容器進行交互

/bin/bash 在容器中啟動 bash shell

容器啟動后,我們可以看到命令行提示為:

[root@3b39ca23e6c8 /]#

當需要結束是,使用 exit命令或 Ctrl+D退出交互shell+

[root@3b39ca23e6c8 /]# exit

exit

[root@localhost ~]#

注意: 這里一旦結束了 bash shell進程,容器就停止了。

啟動一個后台容器

$ docker run -d centos /bin/sh -c "while trus;echo hello world;sleep 1;done"

1864e7a169419b74a8c863f4e488461d54bf2f8fdcd8a41cd5a47ca23467fb53

-d 參數使容器在后台運行

在輸出中只是有一串很長的字符串

1864e7a169419b74a8c863f4e488461d54bf2f8fdcd8a41cd5a47ca23467fb53

這個字符串就是容器ID 該字符串唯一標識一個容器的,可以通過該字符串操作容器。

注意:這個容器ID顯然太長了。之后我們將使用更短的ID和方法標示容器。

可以使用這個容器ID查看hello wolrd做了什么。

首先, 需要確認容器正在運行。 使用命令 docker ps 查看。 該命令將引導docker進程列出所有已知容器的信息。

$ docker ps

CONTAINER ID        IMAGE               COMMAND                  CREATED                 STATUS               PORTS               NAMES

1f8830d097b7      centos             "/bin/sh -c 'while..."         11 minutes ago         Up 11 minutes                                upbeat_noether

在本例中,可以看到處於后台運行的容器。 docker ps 另外返回了一些有用的信息:

1f8830d097b7 這是一個更短的容器ID

Centos 是我們所使用的鏡像。

另外還有容器啟動后執行的命令,容器狀態和容器名稱。

注意:如果啟動容器的時候不指定容器名稱,那么docker會自動為容器分配一個。

確認了容器正在運行,但是容器是否按照我們要求在運行呢?

為了確認,我們可以使用 docker log命令觀察容器內部。

$ docker logs upbeat_noether     (upbeat_noether是上面的,往上看)

本例中:

docker log查看了容器的內部,並返回 hello world

docker還在后台運行。另外,你剛創建了你的第一個docker化的應用。

接下來使用 docker stop 命令關閉容器。 docker stop + 名字也可以關閉)

或者

使用 docker ps查看容器運行狀態

Excellent. 所有容器都已經停止了。

運行一個簡單的應用

在之前容器中的Hello World學習了如何使用 docker run啟動容器。在前台運行了一個可交互容器;也可以在后台運行一個分離的容器。之前你習以下幾個命令

docker ps 顯示容器

docker logs 顯示容器中的標准輸出

docker stop 停止一個運行中的容器

學習如何使用docker客戶端

可能你還沒有意識到,你之前使用的在bash終端中輸入的每一條docker命令都是在使用docker客戶端。命令行客戶端又被稱為命令行接口(CLI)。你每一次執行的行為都是由docker命令和一些標記和參數組成。

例如:$ docker run -i -t ubuntu /bin/bash

使用命令 docker version 可以查看你當前使用的docker客戶端和服務端版本信息。+

$ docker version

docker命令幫助信息

使用 --help 參數, 可以查看docker命令的幫助信息。 查詢docker所有子命令,如下:

$ docker --help

查看具體子命令的幫助信息,則是在子命令后使用 --help 參數。

$ docker attach --help

注意:如果要了解更多命令的詳細信息和用法,參考命令手冊。

 

docker中運行一個web應用

剛才又學習了一點關於docker客戶端的用法,現在可以開始處理一些更做要的工作了:

啟動更多的容器。到目前為止,你還沒有啟動任何一台有實際意義的容器,現在你可以運行一台我們預先准備的web應用。

 

提供的web應用鏡像中,將運行一個 Python Flash 應用。 使用 docker run

$ docker run -d -P training/webapp python app.py(是大P

再來回顧一下該命令做了些什么。 使用了兩個標記 -d -P

-d 告訴docker后台運行容器

-P則是告訴docker映射所有容器內部需要使用的網絡端口到本地計算機,這讓我們可以訪問容器中的web應用。

 

指定使用鏡像:training/webapp該鏡像是一個創建好的鏡像,容器中會運行一個簡單的 Python Flash web應用程序。

最后, 你為容器指定了一個命令: python app.py命令會啟動容器內的web應用

注意: 你可以在 命令手冊 和 docker run 手冊 中查看更多關於 docker run 的信息。

查看web容器

現在你可以使用命令 docker ps 查看剛才啟動的容器。

[root@localhost ~]# docker ps -l

CONTAINER ID      IMAGE                   COMMAND           CREATED                STATUS                  PORTS                                   NAMES

8a0be323ed56   training/webapp     "python app.py"     54 seconds ago     Up 53 seconds       0.0.0.0:32769->5000/tcp   stupefied_hoover

注意:默認情況下, docker ps 只會顯示正在運行的容器信息。使用 docker ps -a 則會顯示所有容器信息,包括停止了的。

當我們使用 -P 標記時, docker run 命令會映射容器中使用的所有端口到本地計算機。

PORTS

0.0.0.0:32769->5000/tcp

注意:將 如何創建鏡像 中學習如何在鏡像暴露(EXPOSE)端口。

在上面的案例中,docker將容器的5000端口(python flask的默認端口)映射到了本地計算機的49155端口上。

 

端口綁定是可配置的。在上一個案例中, -P -p 5000 的縮寫 將容器內部的5000端口映射到本機計算機的高端口號(臨時端口范圍(ephemeral port range)通常為32768-61000)上。也可以使用 -p指定綁定的端口

 

注意: -P  local_port:container_port 前面是是本機計算機端口,后面是容器端口 如果省略 local_port的話,則將使用隨機高位端口

 

例如:docker run -d -P 80:5000 training/webapp python app.py

      #iptables -F

      #setenforce 0

curl localhost:32769 ##linux端訪問本地

 

http://192.168.0.18:32769/ ##win端訪問

 

 python應用成功運行了。可以在瀏覽器上訪問 http://192.168.0.18:32769 訪問。

容器的5000端口將被映射到本機計算機的80端口上。你可能會問,那我們為什么不使用1:1對應的端口映射,而要映射到高端口號上?

1:1對應端口映射的局限在於本地計算機端口只能被映射一次,不能同時被重復映射。

試想一下你同時測試兩個python應用,容器內部都使用5000端口。

在不使用docker端口映射的情況下,在同一時間內你只能訪問一個docker容器。

 

快速查詢端口映射

使用 docker ps 命令查詢容器的端口映射信息有一點不方便。因此docker提供了一個有用的快捷方式: docker port

使用 docker port 命令時,我們需要指定容器ID名稱以及需要進行通訊的的容器端口號。

 

本例中,你查詢容器的5000端口映射到了本機計算機哪個端口上。

 

查看web應用的日志

也可以使用 docker logs 命令查看web引用發生了什么

 

查看容器內應用的進程信息

除了查看容器日志之外,還可以使用 docker top 命令查看容器內的進程信息

[root@localhost ~]# docker top stupefied_hoover

UID          PID          PPID         C        STIME        TTY         TIME               CMD

root       25912       25897        0        19:14           ?          00:00:01        python app.py

#這里我們看到,容器中只有一個進程。

 

檢查容器內的應用信息

最后,將使用 docker  inspect 命令獲取docker容器初級信息。該命令將返回一個JSON文檔,其中包含了指定容器配置和狀態信息。

[root@localhost ~]# docker inspect stupefied_hoover

 

可以通過指定具體的元素查詢信息,例如說,查詢容器的IP地址:

 

停止一個運行的容器

已經看過web應用如何工作了,現在可以使用 docker stop container_name|container_id 命令停止容器。

 

啟動一個停止的容器

在你停止了容器之后,你接到一個電話說另外一個程序員需要使用web應用。現在你有兩個選擇:

創建一個新的容器;

使用   docker start container_name|container_id   重啟剛才關閉的容器

 

注意: 也可以使用 docker restart container_name|container_id 命令停止並啟動一個容器。

刪除一個容器

當一個容器不再被使用的時候,可以通過 docker  rm  container_name|container_id 命令刪除

[root@localhost ~]# docker stop stupefied_hoover    #先暫停

[root@localhost ~]# docker rm stupefied_hoover       #再刪除

 

#不能刪除一個正在運行的容器,這樣做的原因是防止刪除時的誤操作。因此在刪除容器之前,你需要停止他。

現在容器已經被刪掉了

注意: 永遠記住 刪除 是一個容器操作的最后操作

 

創建自定義鏡像

docker images是容器的技術。每次使用 docker run 命令時都需要指定使用的鏡像。之前的章節中使用的鏡像都已經存在,例如 centos training/webapp

也學習了如何在docker hub搜索並下載鏡像到本地計算機。如果本機計算機上沒有該鏡像,則會從遠程倉庫中下載,默認倉庫為 Docker Hub Registry

 

本節中,將學習更多關於docker鏡像的只是,包括:

管理和使用本機鏡像

創建基礎鏡像

上傳鏡像到Docker Hub Registry

docker images    #可以列出本地計算機上的所有鏡像。

docker search centos   #可以列出docker hub上所有關於centos (也可以說成搜索鏡像的意思)

 

#上圖中第一個的意思是:CentOS的官方搭建的意思。

之前使用過的鏡像都是在啟動容器時從DockerHub上下載的。

當查看鏡像列表時,需要注意三個重要信息:

    鏡像所在的倉庫,例如centos

    鏡像的標簽(TAG),例如7.3.1611

    鏡像的IMAGE ID

Tips: 你可以使用第三方的圖形工具 dockviz tool 或 鏡像網站 查看鏡像數據。

 

查詢當前centos的版本:

 

當你的容器運行一個指定tag的鏡像,命令如下:(如果想使用其他版本,換一下版本號即可)

 

###這里如果沒有的話會下載到本地,如果命令中不指定tag,例如 centosdocker默認使用 centos:latest 鏡像。

 

創建自己的鏡像

將基於 training/sinatra 創建新鏡像。

    1、修改容器內容,並時候commit提交結果創建新鏡像

    2、使用dockerfile指定新鏡像的創建指令

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM