docker安裝與使用

轉載自 https://blog.csdn.net/yx_222/article/details/80936757

本文主要介紹在Ubuntu16.04 LTS 64位系統下通過apt的Docker官方源安裝最新的Docker CE(Community Edition),即Docker社區版的步驟。

Docker安裝

  • 卸載可能存在舊版本的docker:
$ sudo apt-get remove docker docker-engine docker-ce docker.io
  • 更新apt包索引:
$ sudo apt-get update

爲了使apt可以通過https使用Repository,先安裝以下包:

$ sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common

添加Docker官方GPG密鑰:

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

檢查GPG Key信息是否正確:

$ sudo apt-key fingerprint 0EBFCD88

GPG Key信息如下:

pub   4096R/0EBFCD88 2017-02-22
      Key fingerprint = 9DC8 5822 9FC7 DD38 854A  E2D8 8D81 803C 0EBF CD88
uid                  Docker Release (CE deb) <[email protected]>
sub   4096R/F273FCD8 2017-02-22

添加源信息:

# 將源信息直接寫入/etc/apt/sources.list
$ sudo add-apt-repository \
    "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
    $(lsb_release -cs) \
    stable"

或者

#單獨創建docker的source.list
$ sudo bash -c "deb [arch=amd64] https://download.docker.com/linux/ubuntu trusty stable > /etc/apt/sources.list.d/docker.list"

再更新下apt包索引:

$ sudo apt-get update

確認Docker的源信息是否正確, 新的源是否添加成功:

$ sudo apt-cache madison docker-ce

  • 安裝最新版本的Docker CE:
$ sudo apt-get install -y docker-ce
  • 如果需要安裝某個指定版本的Docker CE,而不是最新版本,可用下面命令列出可用的版本列表信息:
$ sudo apt-cache madison docker-ce

第一列是包名,第二列是版本字符串,第三列是存儲庫名稱,它標識出包來自哪個存儲庫,以及擴展它的穩定性級別。通一下命令安裝指定版本的包:

$ sudo apt-get install docker-ce=[版本字符串]

Docker安裝驗證

$ sudo docker -v

  • 查看Docker安裝版本詳細信息:
$ sudo docker version

啓動Docker

  • 查看docker服務是否啓動:
$ sudo systemctl status docker
  • 如果Docker未啓動,則啓動Docker:
$ sudo systemctl start docke
  • 運行Hello World,校驗Docker是否安裝成功:
$ sudo docker run hello-world

運行這個命令會下載一個hello-world的鏡像, 並且運行在一個容器中。該容器運行時會有如下輸出:

Docker開啓遠程訪問

默認情況下,Docker守護進程會生成一個socket(/var/run/docker.sock)文件來進行本地進程通信,而不會監聽任何端口,因此只能在本地使用docker客戶端或者使用Docker API進行操作。

如果想在其他主機上操作Docker主機,就需要讓Docker守護進程監聽一個端口,這樣才能實現遠程通信。

方法一:臨時啓動遠程訪問和本地訪問(親測未能成功開啓Docker遠程訪問

  • 執行以下命令:
$ sudo dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock &

方法二:永久開啓遠程訪問和本地訪問(親測未能成功開啓Docker遠程訪問)

  • 修改Docker服務啓動配置文件,添加一個未被佔用的端口號:

Docker服務啓動配置文件位置:

Ubuntu位置:/etc/default/docker

Centos位置:/etc/sysconfig/docker

修改啓動配置文件,如下:

  1. # 開啓遠程訪問 -H tcp://0.0.0.0:2375
  2. # 開啓本地套接字訪問 -H unix:///var/run/docker.sock
  3. DOCKER_OPTS="-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock"
  • 重啓Docker
$ sudo systemctl restart docker

方法三:永久開啓遠程訪問和本地訪問(親測有效)

外部鏈接地址:點擊打開鏈接

  • 進入/etc/systemd/system/目錄
$ sudo cd /etc/systemd/system/
  • 查找docker.service文件
# 在/etc/systemd/system目錄下查找docker.service文件
$sudo find /etc/systemd/system -name docker.service
  • 打開docker.service文件
vim docker.service

註釋掉:ExecStart=/usr/bin/dockerd -H fd://

添加:ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock

保存Docker.service文件

  • 刷新配置
$ sudo systemctl daemon-reload
  • 重新啓動Docker守護進程
$ sudo systemctl restart docker
  • 確認是否重啓成功
$ sudo ps -ef | grep docker

or

$ sudo ps -A|grep docker

測試Docker遠程通訊是否成功開啓

  • Docker客戶端校驗

瀏覽器訪問:http://Docker服務器IP:2375/info

  • Docker服務器校驗遠程訪問
docker -H tcp://localhost:2375 images
或
docker -H tcp://127.0.0.1:2375 images
或
docker -H tcp://Docker服務器IP:2375 images
  • Docker服務器校驗本地訪問
docker info 

戶機添加Docker環境變量

DOCKER_HOST=tcp://Docker服務器IP:2375


Docker基本用法(常用命令)

Docker鏡像常用命令

  • 搜索鏡像

可以使用docker search命令搜索存放在Docker Hub中的鏡像,例如:

$ sudo docker search java

執行該命令後,Docker就會在Docker Hub中搜索含有java這個關鍵詞的鏡像倉庫。執行該命令後可以看到類似於如下的表格:


該表格包含五列,含義如下:

- NAME:鏡像倉庫名稱。

- DESCRIPTION:鏡像倉庫描述。

- STARS:鏡像收藏數,表示該鏡像倉庫的受歡迎程度,類似於GitHub的Stars。

- OFFICAL:表示是否爲官方倉庫,該列標記爲[OK]的鏡像均由個軟件的官方項目組創建和維護。由結果可知,java這個鏡像倉庫是官方倉庫,而其他倉庫都不是官方鏡像倉庫。

- AUTOMATED:表示是否爲自動構建鏡像倉庫。

  • 下載鏡像

使用docker pull命令即可從Docker Registry上下載鏡像,例如:

$ sudo docker pull java

執行該命令後,Docker會從Docker Hub中的java倉庫下載最新版本的java鏡像。若鏡像下載緩慢,可配置鏡像加速器。

該命令還可指定想要下載的鏡像標籤以及Docker Registry地址,例如:

$ sudo docker pull reg.itmuch.com/java:7

這樣就可以從指定的Docker Registry中下載標籤爲7的Java鏡像。

  • 列出本地鏡像

使用docker images命令即可列出一下載的本地鏡像列表。

執行該命令後,將會看到類似於如下表格:


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

- REPOSITORY:鏡像所屬倉庫名稱

- TAG:鏡像標籤。默認是latest,表示最新。

- IMAGE ID:鏡像ID,表示鏡像唯一標標識

- CREATED:鏡像創建時間

- SIZE:鏡像大小

  • 刪除本地鏡像

使用docker rmi命令即可刪除指定鏡像

例1:刪除指定名稱的鏡像

$ sudo docker rmi hello-world

表示刪除hello-world這個鏡像

例2:刪除所有鏡像

$ sudo docker rmi -f $(docker images)

-f 參數表示強制刪除

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:

$ sudo docker run java /bin/echo 'Hello World'

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

示例2:

$ sudo docker run -d -p 91:80 nginx

這樣就能啓動一個Nginx容器。在本例中,爲docker run添加了兩個參數,含義如下:

-d # 後臺運行
-p 宿主機端口:容器端口 # 開放容器端口到宿主機端口
訪問http://Docker宿主機IP:91/將會看到如下界面:

  • 列出本地容器

使用docker ps命令即可列出運行中的本地容器,執行該命令後,可以看到類似與如下的表格:


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

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

- CONTAINER_ID:表示容器ID

- IMAGE:表示鏡像名稱

- COMMAND:表示啓動容器時運行的命令

- CREATED:表示容器創建時間

- STATUS:表示容器運行狀態。UP表示運行中,Exited表示已停止。

- PORTS:表示容器對外的端口號

- NAMES:表示容器名稱,該名稱默認由Docker自動生成,也可使用docker run命令的--name選項自定指定。

  • 停止容器

使用docker stop命令,即可停止容器,例如:

$ sudo docker stop 2730ed88f8e5

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

  • 強制停止容器

可以使用docker kill 命令發送SINGKILL信號來強制停止容器。例如:

$ sudo docker kill 2730ed88f8e5
  • 啓動已停止的容器

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

$ sudo docker start 2730ed88f8e5
  • 重啓容器

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

  • 進入容器
某場景下,可能需要進入運行中的容器。

使用docker attach命令進入容器。例如:

$ sudo docker attach 2730ed88f8e5

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

可以使用nsenter進入容器。

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

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

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

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

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


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

  • 刪除容器

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

例1:刪除指定容器

$ sudo docker rm 2730ed88f8e5

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

例2:刪除所有容器

$ sudo docker rm -f $(docker ps -a -q)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章