1. 程式人生 > >Docker基礎之三: 安裝docker+HelloWorld

Docker基礎之三: 安裝docker+HelloWorld

摘要: 安裝Docker Docker最核心的程式是Docker Engine,根據引數,它既可以作為後臺daemon執行,也可以作為命令列工具使用。 1 Linux上安裝 Docker本身是基於linux核心的,因此只要核心版本足夠新,一般大於3.10左右,就可以執行。各種系統的安裝方式基本相同,只

安裝Docker

(提示:對Docker感興趣的朋友可以加我的微信ghostcloud2016,然後我把你加到我們的一個Docker愛好者社群裡面。)

Docker最核心的程式是Docker Engine,根據引數,它既可以作為後臺daemon執行,也可以作為命令列工具使用。

1 Linux上安裝

Docker本身是基於linux核心的,因此只要核心版本足夠新,一般大於3.10左右,就可以執行。各種系統的安裝方式基本相同,只是針對各系統的程序管理或者目錄結構略有不同。下面是docker在linux系統下的物理邏輯結構: alt text

2 Ubuntu上安裝Docker

在所有系統中,Docker對ubuntu的支援是最好的,因此如果使用docker,我推薦都適用ubuntu系統。Ubuntu系統的視覺化、安裝以及核心的更新,我認為都是最好的。Docker支援的Ubuntu系統:

  • Ubuntu Wily 15.10
  • Ubuntu Vivid 15.04
  • Ubuntu Trusty 14.04 (LTS)
  • Ubuntu Precise 12.04 (LTS) 環境要求:
  • 64位系統
  • 3.10以上linux核心,具體可以根據uname –r進行檢視
  • 作為一個開發者,有一個學習的氛圍跟一個交流圈子特別重要這是一個我的QQ群架構華山論劍:836442475,不管你是小白還是大牛歡迎入駐 ,分享BAT,阿里面試題、面試經驗,討論技術, 大家一起交流學習成長!
     

具體安裝步驟:

  1. 更新apt源
    #新增gpg key
    sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
    
    #增加/etc/apt/sources.list.d/docker.list
    
    #增加下面一行(選擇你的具體版本)
    Ubuntu precise 12.04: deb https://apt.dockerproject.org/repo ubuntu-precise main
    Ubuntu trustry 14.04: deb https://apt.dockerproject.org/repo ubuntu-trusty main
    Ubuntu trustry 15.04: deb https://apt.dockerproject.org/repo ubuntu-vivid main
    Ubuntu trustry 15.10: deb https://apt.dockerproject.org/repo ubuntu-wily main
    
    #執行apt-get update,更新源
    
  2. 刪除舊版本Docker
    apt-get purge lxc-docker
    
  3. 檢查Docker的apt源是否正常
    apt-cache policy docker-engine
    
  4. 不同版本的處理
    #Ubuntu Wily 15.10, Ubuntu Vivid 15.04, Ubuntu Trusty 14.04 (LTS)
    $ sudo apt-get install linux-image-extra-$(uname -r)
    linux-image-extra核心包安裝後,可以使用aufs
    
    #Ubuntu Precise 12.04(LTS)
    對於這個版本的ubuntu,需要3.13核心及一些相關的包,執行下面的命令進行安裝:
    $ sudo apt-get install linux-image-generic-lts-trusty
    
  5. 重啟系統(如果沒有安裝核心包,忽略本條)
    reboot -nf
    
  6. 安裝docker-engine
    $ sudo apt-get update
    $ sudo apt-get install docker-engine
    $ sudo service docker start
    $ sudo docker run hello-world #驗證是否安裝成功
    
  7. 其他配置

    1. 建立docker使用者

      docker daemon預設繫結在unix socket上,而不是tcp的埠。而unix socket預設是屬於root使用者,所以其他使用者要訪問該 socket需要通過sudo命令。如果想避免使用sudo,你需要將當前使用者新增到docker 使用者組。具體步驟:

      $ sudo usermod -aG docker ubuntu
      
      #退出當前使用者,並登入當前使用者
      $ docker run hello-world#驗證是否成功
      
      #如果失敗會報錯:
      Cannot connect to the Docker daemon. Is 'docker daemon' running on this host?
      
    2. 調整Memory和Swap的配額

      有時候你在啟動時會出現:

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

      這個提示說明,你當前的核心不支援cgroup對swap的控制。如果需要支援,會使用大約1%的系統總記憶體,同時會有10%左右的效能損失。具體步驟如下:

      #以root使用者編輯/etc/default/grub
      
      #新增GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"
      
      #儲存檔案,並執行sudo update-grub
      
      #sync
      
      #reboot系統
      
    3. 同UFW一起使用

      如果你使用了UFW(Uncomplicated Firewall),你需要做額外的配置,因為UFW預設會遮蔽所有的Forwarding流量,所以你需要zuo如下配置:

      $ sudo ufw status
      
      $ sudo vi /etc/default/ufw
      DEFAULT_FORWARD_POLICY="ACCEPT"
      
      $ sudo ufw reload
      $ sudo ufw allow 2375/tcp
      
    4. 配置docker的DNS

      Ubuntu系統預設使用127.0.0.1作為DNS伺服器,具體配置檔案為/etc/resolv.conf。同時,還使用dnsmasq作為DNS的快取。當你啟動容器的時候,可能會遇到下面的警告:

      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,因此使用外部的預設DNS(8.8.8.8,8.8.4.4)這兩個地址都是google的免費DNS地址。如果想自己指定 DNS,具體步驟如下:

      $ sudo vi /etc/default/docker
      DOCKER_OPTS="--dns 8.8.8.8 192.168.1.1"
      $ sudo restart docker
      
      #或者修改dnsmasq
      sudo vi /etc/NetworkManager/NetworkManager.conf
      #註釋掉這一行
      dns=dnsmasq
      
      # 重啟網路
      $ sudo restart network-manager
      
      # 重啟docker
      $ sudo restart docker
      
    5. 讓Docker隨系統啟動

      首先需要了解你所使用的系統用的什麼啟動管理工具,在ubuntu 15.04及其以上版本使用的是systemd,在14.10及其以下使用的是upstart。在15.04及以上版本需要執行:

      $ sudo systemctl enable docker
      

      在14.10以下,安裝程式會自動將docker加入到upstart中。

    6. 升級docker
      $ apt-get upgrade docker-engine
      
    7. 解除安裝docker

      $ sudo apt-get purge docker-engine
      $ sudo apt-get autoremove --purge docker-engine
      
      #刪除 docker的映象及工作目錄
      $ rm -rf /var/lib/docker
      

3 CentOS上安裝 docker

3.1 環境要求

  • CentOS 7.X及其以後版本
  • 3.10以後版本

3.2 通過指令碼安裝

更新yum源:

$ sudo yum update

下載指令碼並安裝:

$ curl -sSL https://get.docker.com/ | sh

啟動服務:

$ sudo service docker start

驗證docker:

$ sudo docker run hello-world

3.3 通過yum安裝

更新源:

$ sudo yum update

新增源及gpg key:

$ sudo tee /etc/yum.repos.d/docker.repo
<<-'EOF'
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/$releasever/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
EOF

安裝docker-engine:

$ sudo yum install docker-engine

啟動docker daemon:

$ sudo service docker start

驗證docker:

$ sudo docker run hello-world

3.4 新增docker使用者組(同ubuntu)

$ sudo usermod -aG docker your_username

3.5 隨系統啟動

$ sudo chkconfig docker on`

3.6 解除安裝

#檢查是否安裝
$ yum list installed | grep docker
yum list installed | grep docker
docker-engine.x86_64   1.7.1-1.el7 @/docker-engine-1.7.1-1.el7.x86_64.rpm

#刪除包
$ sudo yum -y remove docker-engine.x86_64

#刪除docker映象及中間檔案
$ rm -rf /var/lib/docker

4 Mac上安裝

  1. 背景

    Mac OSX下Docker通過Docker Toolbox來進行安裝,Docker Toolbox是Docker公司的一個工具包,裡面包括:

    • Docker Machine: 執行docker-machine程式
    • Docker Engine: Docker可執行程式
    • Docker Compose: docker-compose程式
    • Kitematic: Docker GUI
    • 包含預定義的shell指令碼,用於命令列執行環境
    • Oracle VM VirtualBox

    由於Docker Daemon 使用了linux kernel的眾多特性,我們不能在OS X本地執行Docker,所以我們必須使用docker-machine來建立並關聯到一個虛擬機器。這個虛擬機器就是Docker的實際執行環境。下面是docker在mac或windows下的物理邏輯結構 alt text

  2. 環境要求: OS X 10.8及其以上版本

  3. 安裝Toolbox

    地址是https://www.docker.com/toolbox, 下載完成後根據提示進行安裝。預設情況,Docker Toolbox安裝在/usr/local/bin,每個使用者都可以使用這些可執行程式,同時會安裝帶有Docker執行環境的Virtual Box。

  4. 啟動Docker Machine 通過Launchpad啟動程式: 
    執行程式後,會自動執行一段shell指令碼啟動虛擬機器並進入一個shell終端。

  5. Hello World, Docker

    我們先來執行一個最簡單的docker容器:

    <span style="color:#333333"><span style="color:#f8f8f2"><code class="language-Bash">docker run hello-world
    </code></span></span>

    這個命令包含三部分:

    • docker - 所有docker命令的可執行程式,預設在/usr/local/bin/docker
    • run - docker 的子命令,該命令首先檢視本地是否有相應的映象,如果沒有將預設從Docker Hub進行拉取,之後再執行該映象
    • hello-world - 映象名稱,這個映象就是echo一句hello world
      容器本身是一個簡化的經過裁減的linux系統,容器可以執行一個簡單命令,就像上例一樣;也可以執行比較複雜的應用程式,比如:資料庫,web後臺等。那hello-world映象是由誰生成的呢?是Docker官方生成的,通過docker容器,你可以在任何系統容器中執行映象。
  6. 查詢Image

    你可以在docker hub主頁,或者本機通過命令列進行搜尋,一般我喜歡通過命令列進行搜尋。例如,搜尋ubuntu:

    <span style="color:#333333"><span style="color:#f8f8f2"><code class="language-Bash"> [email protected]:~<span style="color:#8e908c"><span style="color:#75715e"># docker search ubuntu</span></span>
     NAME                             DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
     ubuntu                           Ubuntu is a Debian-based Linux operating s...   <span style="color:#f5871f">2761</span>      [OK]
     ubuntu-upstart                   Upstart is an event-based replacement <span style="color:#8959a8"><span style="color:#f92672">for</span></span> ...   <span style="color:#f5871f">48</span>        [OK]
     dorowu/ubuntu-desktop-lxde-vnc   Ubuntu with openssh-server and NoVNC on po...   <span style="color:#f5871f">28</span>                   [OK]
     torusware/speedus-ubuntu         Always updated official Ubuntu docker imag...   <span style="color:#f5871f">25</span>                   [OK]
     sequenceiq/hadoop-ubuntu         An easy way to try Hadoop on Ubuntu             <span style="color:#f5871f">24</span>                   [OK]
     ubuntu-debootstrap               debootstrap --variant=minbase --components...   <span style="color:#f5871f">20</span>        [OK]
     tleyden5iwx/ubuntu-cuda          Ubuntu <span style="color:#f5871f">14.04</span> with CUDA drivers pre-installed    <span style="color:#f5871f">18</span>                   [OK]
     neurodebian                      NeuroDebian provides neuroscience research...   <span style="color:#f5871f">15</span>        [OK]
     rastasheep/ubuntu-sshd           Dockerized SSH service, built on top of of...   <span style="color:#f5871f">15</span>                   [OK]
     consol/ubuntu-xfce-vnc           Ubuntu container with <span style="color:#718c00"><span style="color:#e6db74">"headless"</span></span> VNC sessi...   <span style="color:#f5871f">7</span>                    [OK]
     n3ziniuka5/ubuntu-oracle-jdk     Ubuntu with Oracle JDK. Check tags <span style="color:#8959a8"><span style="color:#f92672">for</span></span> ver...   <span style="color:#f5871f">5</span>                    [OK]
     nuagebec/ubuntu                  Simple always updated Ubuntu docker images...   <span style="color:#f5871f">4</span>                    [OK]
     ioft/armhf-ubuntu                [ABR] Ubuntu Docker images <span style="color:#8959a8"><span style="color:#f92672">for</span></span> the ARMv7(a...   <span style="color:#f5871f">4</span>                    [OK]
     nimmis/ubuntu                    This is a docker images different LTS vers...   <span style="color:#f5871f">3</span>                    [OK]
     maxexcloo/ubuntu                 Docker base image built on Ubuntu with Sup...   <span style="color:#f5871f">2</span>                    [OK]
     sylvainlasnier/ubuntu            Ubuntu <span style="color:#f5871f">15.04</span> root docker images with commo...   <span style="color:#f5871f">1</span>                    [OK]
     densuke/ubuntu-jp-remix          Ubuntu Linuxの日本語remix風味です                       <span style="color:#f5871f">1</span>                    [OK]
     seetheprogress/ubuntu            Ubuntu image provided by seetheprogress us...   <span style="color:#f5871f">1</span>                    [OK]
     rallias/ubuntu                   Ubuntu with the needful                         <span style="color:#f5871f">0</span>                    [OK]
     tvaughan/ubuntu                  https://github.com/tvaughan/docker-ubuntu       <span style="color:#f5871f">0</span>                    [OK]
     zoni/ubuntu                                                                      <span style="color:#f5871f">0</span>                    [OK]
     partlab/ubuntu                   Simple Ubuntu docker images.                    <span style="color:#f5871f">0</span>                    [OK]
     teamrock/ubuntu                  TeamRock<span style="color:#718c00"><span style="color:#e6db74">'s Ubuntu image configured with AW...   0                    [OK]
     konstruktoid/ubuntu              Ubuntu base image                               0                    [OK]
     esycat/ubuntu                    Ubuntu LTS                                      0                    [OK]
    </span></span></code></span></span>

    在搜尋結果中,你可以看到有的是通過"/"劃分的,有的沒有。凡是沒有"/"分級的就是Docker Hub自帶的映象;否則該映象就出自於某個Docker Hub使用者,從這裡你也可以看到,Docker Hub是一個Public倉庫,你的任何映象,別人都可以搜尋到。因此,一定要注意安全,不要把敏感資訊放上去了。

  7. 拉取映象

    我們嘗試拉取一個centos映象:

    <span style="color:#333333"><span style="color:#f8f8f2"><code class="language-Bash"> [email protected]:~<span style="color:#8e908c"><span style="color:#75715e"># docker pull centos</span></span>
    </code></span></span>
    Using default tag: latest
    Pulling repository docker.io/library/centos
    ce20c473cd8a: Pulling dependent layers
    47d44cb6f252: Pulling metadata
    ce20c473cd8a: Download complete
    168a69b62202: Download complete
    812e9d9d677f: Download complete
    4234bfdd88f8: Pulling fs layer
    4234bfdd88f8: Download complete
    Status: Downloaded newer image for centos:latest
    [email protected]:~# docker images
    REPOSITORY                 TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
    ghostcloud.cn:5000/gcali   1.5                 6ff13e5ab907        29 hours ago        213.9 MB
    centos                     latest              ce20c473cd8a        7 weeks ago         172.3 MB
    
  8. 編譯Image 除了拉取官方的Image,也可以自己編譯Image,編譯的方法和Makefile類似。
    1. 建立Dockerfile
      <span style="color:#333333"><span style="color:#f8f8f2"><code class="language-Bash">[email protected]:~<span style="color:#8e908c"><span style="color:#75715e"># mkdir myimage</span></span>
      [email protected]:~<span style="color:#8e908c"><span style="color:#75715e"># cd myimage/</span></span>
      [email protected]:~/myimage<span style="color:#8e908c"><span style="color:#75715e"># vi Dockerfile</span></span>
      [email protected]:~/myimage<span style="color:#8e908c"><span style="color:#75715e"># cat Dockerfile</span></span>
      FROM centos:latest
      CMD <span style="color:#f5871f"><span style="color:#e6db74">echo</span></span> <span style="color:#718c00"><span style="color:#e6db74">"Hello myimage"</span></span>
      </code></span></span>
    2. 編譯Image
      <span style="color:#333333"><span style="color:#f8f8f2"><code class="language-Bash">[email protected]:~/myimage<span style="color:#8e908c"><span style="color:#75715e"># docker build -t myimage .</span></span>
      </code></span></span>
      Sending build context to Docker daemon 2.048 kB
      Step 1 : FROM centos:latest
      ---> ce20c473cd8a
      Step 2 : CMD echo "Hello myimage"
      ---> Running in 1421c66fa1a6
      ---> 2408b71c40c0
      Removing intermediate container 1421c66fa1a6
      Successfully built 2408b71c40c0
      
      <span style="color:#333333"><span style="color:#f8f8f2"><code class="language-Bash">[email protected]:~/myimage<span style="color:#8e908c"><span style="color:#75715e"># docker images</span></span>
      </code></span></span>
      REPOSITORY                 TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
      myimage                    latest              2408b71c40c0        6 seconds ago       172.3 MB
      ghostcloud.cn:5000/gcali   1.5                 6ff13e5ab907        30 hours ago        213.9 MB
      centos                     latest              ce20c473cd8a        7 weeks ago         172.3 MB
      
    3. 執行自己的Image
      <span style="color:#333333"><span style="color:#f8f8f2"><code class="language-Bash">[email protected]:~/myimage<span style="color:#8e908c"><span style="color:#75715e"># docker run myimage</span></span>
      Hello myimage</code></span></span>

 

歡迎加入QQ群架構華山論劍:836442475

我們提供免費的架構資料 以及免費的解答

不懂得問題都可以來問我們老師,之後還會有職業生涯規劃,以及面試指導

我們每天晚上八點也有公開課免費學習:

10年架構師分享經驗,Dubbo、Redis、Netty、zookeeper、Spring cloud、分散式、高併發等架構技術