Docker的安裝,配置,更新和卸載

在Linux中開啓Docker引擎


我們可以在Linux中安裝Docker並運行Hello world應用程序。通過下面這些操作,我們將會學到更多有關於Docker的基礎特徵。我們將會學到如何:

  • 安裝Docker引擎
  • 在一個容器中運行軟件鏡像
  • 在Docker Hub中瀏覽一個鏡像
  • 創建你的鏡像,並且在容器中運行它
  • 創建一個Docker Hub賬戶和一個鏡像庫
  • 創建你自己的鏡像
  • 將你的鏡像放到Docker Hub中讓其他人使用

該開始教程是用於減少用戶碰到問題的可能性,爲了能夠測試成功,一定要遵循下面說明的步驟來進行操作。該過程將會消耗大約45分鐘。

確保你瞭解。。。

該開始教程使用命令行來進行相應的操作。你不必特別熟悉命令行,但是你應該瞭解如何打開shell或終端,並且在那個環境中運行基本的命令。它幫助我們瞭解如何去導航一個目錄樹,操作文件,列舉運行的進程等等。

安裝Docker(在Ubuntu中)


Ubuntu

Docker支持下面的這些Ubuntu操作系統:

  • Ubuntu Xenial 16.04 (LTS)
  • Ubuntu Wily 15.10
  • Ubuntu Trusty 14.04 (LTS)
  • Ubuntu Precise 12.04 (LTS)

該頁指導你使用Docker管理髮行包和安裝機制來安裝Docker。使用這些包能夠確保你獲得最新的Docker發行版。如果你希望使用Ubuntu管理包進行安裝,可以查閱一個UBuntu資料。

注意:Ubuntu 14.10和15.04存在Docker的APT庫,但是並不官方支持。

要求

不管你的Ubuntu版本是什麼,Docker要求64位系統安裝。除此之外,你的內核最低版本要求爲3.10。最近的3.10的較小版本或最新的維護版本都是可以接受的。

版本低於3.10的內核缺少一些運行Docker容器的特徵。這些較老版本的內核被瞭解到,存在一些bug,這些bug將會導致數據丟失;並且在特定條件下,會導致頻繁的恐慌。

你可以打開一個終端,使用uname -r來檢查你的當前內核版本。

bobo@bobo:~$ uname -r
3.19.0-15-generic
注意:如果你之前使用`APT`安裝了Docker,一定要確定更新你的`APT`源碼到最新的Docker庫。

更新你的apt源

Docker的APT庫包含Docker 1.7.1和更高版本。爲了設置APT從最新的庫中使用包:

  1. 使用sudoroot權限,作爲一個用戶登陸你的機器
  2. 打開一個終端窗口
  3. 更新包信息,確定APT以https方法工作,並且CA證書已被安裝。
 $ sudo apt-get update
 $ sudo apt-get install apt-transport-https ca-certificates
  1. 添加新的GPG
$ sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
  1. 使用你喜歡的編輯器打開/etc/apt/sources.list.d/docker.list文件。如果文件不存在,則創建他。
  2. 移除所有存在的條目。
  3. 爲你的Ubuntu操作系統添加一個條目。
    可能的條目爲:

    • 在Ubuntu Precise 12.04 (LTS)中

      deb https://apt.dockerproject.org/repo ubuntu-precise main
    • 在Ubuntu Trusty 14.04 (LTS)中

      deb https://apt.dockerproject.org/repo ubuntu-trusty main
    • 在Ubuntu Wily 15.10中

      deb https://apt.dockerproject.org/repo ubuntu-wily main
    • 在Ubuntu Xenial 16.04(LTS)

      deb https://apt.dockerproject.org/repo ubuntu-xenial main

    注意:Docker並不爲所有的架構提供包。你可以在 https://master.dockerproject.org 中找到構建的二進制。爲了在多架構系統上安裝docker,向條目中添加一個[arch=...]元素。細節參考Debian Multiarch wiki

  4. 保存和關閉/etc/apt/sources.list.d/docker.list文件。

  5. 更新APT包索引。
$ sudo apt-get update
  1. 如果舊的repo存在則清除
$ sudo apt-get purge lxc-docker
  1. 驗證APT是否是從正確的庫中拉取下來的。
$ apt-cache policy docker-engine

從現在開始,當你再運行apt-get upgrade的時候,APT會從最新的庫中拉取出來。

Ubuntu版本的條件

  • Ubuntu Xenial 16.04 (LTS)
  • Ubuntu Wily 15.10
  • Ubuntu Trusty 14.04 (LTS)

對於Ubuntu Trusty,Wily和Xenial來說,我們推薦您安裝linux-image-extra內核包。linux-image-extra包允許你使用aufs存儲驅動。

爲了給您的內核版本安裝linux-image-extra包:

  1. 在你的Ubuntu系統中打開一個終端。
  2. 更新你的包管理器。
$ sudo apt-get update
  1. 安裝推薦的包
$ sudo apt-get install linux-image-extra-$(uname -r)
  1. 繼續安裝Docker

如果你正在Ubuntu 14.04或12.04中安裝,apparmor是需要的。你可以使用apt-get install apparmor來安裝它。

Ubuntu Precise 12.04 (LTS)

對於Ubuntu Precise來說,Docker需要3.13的內核版本。如果你的內核版本必3.13低,你必須更新它。查看這個表格來看對於你的環境需要哪些包。

這裏寫圖片描述

爲了更新你的內核和安裝額外的包,做下列操作:

  1. 打開一個終端。
  2. 更新包管理器
$ sudo apt-get update
  1. 必須的和可選的包都要安裝
$ sudo apt-get install linux-image-generic-lts-trusty

依賴於你的環境,你可能需要安裝更多,正如在上述表格中描述的。

  1. 重啓你的宿主機。
  2. 在系統重啓之後,繼續安裝Docker。

安裝

確定你已經安裝了你Ubuntu版本的必要條件。然後,使用下面的命令安裝Docker:

  1. 使用sudo特權作爲一個用戶登陸你的Ubuntu。
  2. 更新你的APT包索引。
$ sudo apt-get update
  1. 安裝Docker。
$ sudo apt-get install docker-engine
  1. 開啓docker
$ sudo service docker start
  1. 驗證docker被正確安裝
$ sudo docker run hello-world

該命令會向容器中下載一個測試鏡像並且運行它。當容器運行成功,就會打印一個信息,然後退出。


bobo@bobo:~$ sudo docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world

03f4658f8b78: Pull complete 
a3ed95caeb02: Pull complete 
Digest: sha256:8be990ef2aeb16dbcb9271ddfe2610fa6658d13f6dfb8bc72074cc1ca36966a7
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 Ubuntu container with:
 $ docker run -it ubuntu 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/userguide/

可選配置

該小節包含可選的過程,用於配置你的Ubuntu更好的運行Docker。

  • 創建docker組
  • 適應內存和交換
  • 使能UFW轉發
  • 配置一個DNS服務器來用
  • 配置Docker開機自啓

創建一個Docker組

docker域是和Unix的一個套接字綁定的,而不是一個TCP端口。默認情況下,Unix套接字是屬於用戶root的,並且其他用戶能夠使用sudo訪問他。處於這個原因,docker域會一直以root用戶運行。

爲了避免在使用docker命令的時候必須要使用sudo,我們需要創建一個Unix組稱作docker,並且向該組中添加用戶。當docker域啓動的時候,Unix套接字的讀寫所有權由docker組擁有。

警告:`docker`組和`root`用戶是平等的。

爲了創建docker組和添加你的用戶:

  1. 使用sudo權限登陸Ubuntu。
  2. 創建docker
$ sudo groupadd docker
  1. docker組中添加你的用戶
$ sudo usermod -aG docker ubuntu
  1. 登出再登入
    這個確保你的用戶以正確的權限運行。
  2. 不使用sudo運行docker來驗證您的工作。
$ docker run hello-world

如果失敗信息和下面類似:

Cannot connect to the Docker daemon. Is 'docker daemon' running on this host?

檢查DOCKER_HOST環境變量是否被設置,如果爲設置,則重新設置。

調整內存和交換分區

當用戶運行Docker的時候,當運行一個鏡像的時候,他們可能會看到下面這些信息:

WARNING: Your kernel does not support cgroup swap limit. WARNING: Your
kernel does not support swap limit capabilities. Limitation discarded.

爲了阻止這些信息,就需要使能你係統上的內存和交換分區(memory and swap accounting)。使能內存和交換分區能夠引起內存開銷和降解性能,即使Docker並沒有在使用。內存開銷大約是所有可用內存的1%。性能大約降解10%。

爲了在使用GNU GRUB的系統上使能內存和交換分區,遵循下面的步驟:

  1. 作爲一個用戶使用sudo特權來登陸Ubuntu。
  2. 編輯/etc/default/grub文件。
  3. 像下面這樣設置GRUB_CMDLINE_LINUX值。
GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"
  1. 保存並關閉文件
  2. 更新GRUB
$ sudo update-grub
  1. 重啓系統

使能UFW轉發

如果在你運行Docker,在同樣的宿主機上使用UFW(Uncomplicated Firewall)的時候,你將需要做額外的配置。Docker使用一個橋來管理容器網絡。默認情況下,UFW丟棄所有的轉發消息。結果是,當UFW被使能了,Docker要想去運行,你必須設置UFW的轉發策略。

UFW的默認設置規則是拒絕所有的進來的消息。如果你想要另一個主機到達你的容器,你需要在Docker端口上允許進入的連接。如果LTS被使能,則Docker的默認端口爲2376,如果沒有,則端口爲2375。如果TLS沒有被使能,通信是未被加密的。默認情況下,Docker是在TLS未被使能的情況下運行的。

爲了配置UFW和在Docker端口上允許進入的連接:

  1. 作爲用戶以sudo 登陸。
  2. 驗證UFW是否被安裝和被使能。
$ sudo ufw status
  1. 打開/etc/default/ufw並編輯。
$ sudo nano /etc/default/ufw
  1. 設置DEFAULT_FORWARD_POLICY策略爲:
DEFAULT_FORWARD_POLICY="ACCEPT"
  1. 保存並關閉文件
  2. 重新加載UFW來使用新的設置。
$ sudo ufw reload
  1. 在Docker端口上允許進入的連接。
$ sudo ufw allow 2375/tcp

配置一個DNS服務器讓Docker使用

在桌面上運行Ubuntu系統或Ubuntu衍生系統,在/etc/resolv.conf文件中,典型的使用127.0.0.1作爲默認的nameserver。網絡管理器也會設置dnsmasq來使用真實的DNS服務器,並且在/etc/resolv.conf中設置nameserver 127.0.0.1

當使用這些配置在桌面機器上開啓容器,Docker用戶將會看到這個警告:

WARNING: Local (127.0.0.1) DNS resolver found in resolv.conf and containers
can't use it. Using default external servers : [8.8.8.8 8.8.4.4]

該警告的出現是因爲Docker容器不能使用本地的DNS域名服務器。Docker默認使用一個外部的域名服務器。

爲了避免這個警告,你可以指定一個DNS服務器讓Docker容器來使用。或者是,你可以在網絡管理器中禁用dnsmasq。不過,禁用dnsmasq可能會導致DNS在一些網絡中變慢。

下面的指令描述瞭如何配置運行在Ubuntu14.10或較低版本的上的Docker域。Ubuntu 15.04和更高版本使用systemd作爲啓動和服務管理器。有關與systemd的配置可以參考這篇文章,control and configure Docker with systemd

爲了指定一個DNS服務器讓Docker使用:

  1. 作爲一個用戶身份以sudo方式登陸系統。
  2. 打開/etc/default/docker文件編輯。
  3. 添加一個設置。
DOCKER_OPTS="--dns 8.8.8.8"

使用本地DNS服務器,例如 192.168.1.1替換8.8.8.8。你也可以指定多個DNS服務器。將他們之間用空格分離。例如:

--dns 8.8.8.8 --dns 192.168.1.1
警告:如果你正在使用連接多個網絡的電腦做這個事情,確定要選擇一個公共DNS服務器。
  1. 保存並關閉文件
  2. 重啓Docker域。
$ sudo restart docker

或者是,對之前的操作作爲一個可選的選項,就是在網絡管理器中禁用dnsmasq

  1. 打開/etc/NetworkManager/NetworkManager.conf文件。
  2. 註釋掉dns=dnsmasq這一行。
  3. 保存並且關閉文件。
  4. 重啓網絡管理器和Docker.
$ sudo restart network-manager
$ sudo restart docker

配置Docker開機自啓動

Ubuntu 15.04及以上系統使用systemd作爲它的啓動和服務管理器,Ubuntu 14.10及其低版本使用upstart

對於15.04及其以上版本來說,爲了配置docker域開機自啓,運行:

$ sudo systemctl enable docker

對於14.10及其較低版本,上述的安裝方法自動配置upstart開使docker域開機的時候自動啓動。

更新Docker

安裝最新版本的Docker使用apt-get:

$ sudo apt-get upgrade docker-engine

卸載

卸載Docker包:

$ sudo apt-get purge docker-engine

卸載Docker包及其以來不再需要使用下面的命令:

$ sudo apt-get autoremove --purge docker-engine

上面的命令不會移除鏡像,容器,卷或者是用戶創建的配置文件。如果你想刪除所有的鏡像,容器和卷,運行下面的命令:

$ rm -rf /var/lib/docker

你必須手動刪除用戶創建的配置文件。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章