Docker - 小李飛刀般的虛擬化解決方案

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

Docker - 小李飛刀般的虛擬化解決方案

Docker 介紹

Docker 是一個可以讓開發人員、系統管理員建立、分發並最終運行應用程式的開放平台。它使用 Google 的 Go 語言開發,並在 Github 上開源。作為輕量級的作業系統虛擬化解決方案,Docker 現在受到了越來越多的關注和使用,特別是RedHat,Ubuntu以及Google 都宣布官方支援 Docker,更讓 Docker 走上了快車道,吸引了非常多的開發人員。

Docker 和 傳統的虛擬機器解決方案相比有哪些優勢呢,可以看看官網的一張:

Docker 是基於 LXC 的,使用作業系統上的容器,所以提高了作業系統的複用程度,甚至可以在一台物理機上部署成百上千個 Docker 容器。當然,由於運行依賴於作業系統,Docker 本身也受當前作業系統的限制。具體可以看看 知乎的一個討論。

Docker 基本概念

Docker 鏡像(Image)

Docker 鏡像是用來建立 Docker 容器的唯讀模板。Docker 官方倉庫提供了非常多從 作業系統 到 各種程式設計語言環境 的官方鏡像,我們可以基於這些鏡像建立我們自己的鏡像,也可以使用 “docker build” 命令配合 dockerfile 產生新的鏡像。Docker 鏡像發行就緒到公用倉庫(比如 Docker 官方維護的 Docker Hub),也可以存放在自己的私人倉庫。通過建立 Docker 鏡像可以非常方便地分享和部署應用。

Docker 容器(Container)

Docker 容器是基於 Docker 鏡像建立的 Docker 運行執行個體。同一系統之上的容器相互隔離,互不影響,各自有獨立的進程空間和網路空間。在一個容器退出後,我們可以基於該容器建立新的 Docker 鏡像。

Docker 倉庫(Repository)

Docker 倉庫是存放各種 Docker 鏡像的庫。比如 Ubuntu 系統的倉庫提供了不同版本的 Docker 鏡像。

安裝 Docker

Docker 支援 Mac OS 和很多主流的 Linux 作業系統,官方文檔介紹得很詳細,這裡只提一下在 Ubuntu14.04 64bit上的安裝:

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

如果安裝完成後使用 docker 時出現下面的錯誤:

Cannot connect to the Docker daemon. Is ‘docker -d’ running on this host?

那麼參考這裡的內容,我們需要執行下面的命令來安裝 apparmor:

sudo apt-get install apparmor

Docker 基本操作

查看本地 Docker 鏡像

sudo docker images

擷取 Docker 鏡像

sudo docker pull ubuntu:14.04

上面的命令從 Docker 官方倉庫註冊伺服器下載 Ubuntu 1404,這條命令等價於:

sudo docker pull registry.hub.docker.com/ubuntu:14.04

可以更清楚得看到下載地址是 Docker Hub 的 registry 下 ubuntu 倉庫中 tag 為 14.04 的鏡像。

建立鏡像

前面提到過我們可以通過修改現有鏡像來建立新鏡像,也可以通過建立命令和設定檔來從頭建立新鏡像,下面分別介紹。

  • 通過修改已有鏡像方式建立新鏡像
# 基於 tag 為 14.04 的 ubuntu 鏡像建立一個容器,並在容器中運行 /bin/bash# -t 表示在容器中開啟一個偽終端# -i 表示串連到容器的標準輸入rwang@ubuntu140464:~$ sudo docker run -i -t ubuntu:14.04 /bin/bash# 更新軟體源root@cd2107af89ae:/# apt-get update# 安裝 python 開發環境root@cd2107af89ae:/# apt-get install -y build-essential python-dev libevent-dev python-pip liblzma-dev# 退出容器root@cd2107af89ae:/# exit# 查看當前鏡像資訊rwang@ubuntu140464:~$ sudo docker images# 基於剛才的容器建立新鏡像rwang@ubuntu140464:~$ sudo docker commit -m "Ubuntu1404 Python2.7 Env" -a "xhrwang@gmail.com" cd2107af89ae ubuntu-python27:v1# 再次查看本地鏡像資訊,會發現多了一條下面的資訊:# REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE# ubuntu-python27     v1                  a6c20de08034        7 minutes ago       392.7 MB# 基於新建立的鏡像建立容器rwang@ubuntu140464:~$ sudo docker run -it ubuntu-python27:v1 /bin/bash# python 開發環境已就緒root@ef66d647855b:/# python# Python 2.7.6 (default, Mar 22 2014, 22:59:56) # [GCC 4.8.2] on linux2# Type "help", "copyright", "credits" or "license" for more information.# >>>
  • 通過建立命令和設定檔建立新鏡像

Docker 鏡像設定檔內容執行個體如下:

# 注釋的形式是這樣的。# This is a comment# Docker 建立鏡像的時候基於哪一個鏡像FROM ubuntu:14.04# 鏡像維護者的資訊MAINTAINER Docker Newbee <newbee@docker.com># 建立過程中執行的命令,每條 RUN 命令就是鏡像的一個 layer RUN apt-get -qq updateRUN apt-get -qqy install ruby ruby-devRUN gem install sinatra

使用下面的命令進行 build

rwang@ubuntu140464:~$ sudo docker build -t="IMAGENAME:IMAGETAG" DockerfilePath

結束後我們就可以通過 “Docker images” 來查看本地鏡像列表。

匯出和載入鏡像

使用 “docker save” 可以把本地鏡像到處為一個tarball,使用方法如下:

$ sudo docker imagesREPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZEubuntu              14.04               c4ff7513909d        5 weeks ago         225.4 MB...$sudo docker save -o ubuntu_14.04.tar ubuntu:14.04

使用 “docker load” 可以將之前置出的tarball匯入到本地鏡像庫,使用方法如下:

$ sudo docker load --input ubuntu_14.04.tar

或者:

$ sudo docker load < ubuntu_14.04.tar

移除鏡像

刪除一個鏡像之前,需要先使用下面的命令刪除基於這個鏡像的所有容器

$ sudo docker rm ubuntu:14.04

使用 “docker rmi” 可以將從本地鏡像庫中刪除一個鏡像,使用方法如下:

$ sudo docker rmi ubuntu:14.04

容器

建立一個容器並啟動

在不需要和容器進行互動,只執行某個操作的時候,使用下面的命令基於一個鏡像建立並啟動一個容器:

$ sudo docker run ubuntu:14.04 /bin/echo 'Hello world'

如果需要和容器進行互動,可以讓 Docker 給容器分配一個偽終端,並將當前 shell 和容器的標準輸入進行綁定,我們之前使用過類似的用法:

$ sudo docker run -t -i ubuntu:14.04 /bin/bash

然後就可以在容器的環境中進行操作了。

使用 “docker run” 時,發生了下面這些事情:

  1. 檢查本地是否存在指定的鏡像,不存在就從公有倉庫下載
  2. 利用鏡像建立並啟動一個容器
  3. 分配一個檔案系統,並在唯讀鏡像層外面掛載一層可讀寫層
  4. 從宿主主機配置的橋接器介面中橋接一個虛擬介面到容器中去
  5. 從位址集區配置一個 ip 地址給容器
  6. 執行使用者指定的應用程式
  7. 執行完畢後容器被終止

啟動一個已經終止的容器

$ sudo docker start CONTAINERID

重新啟動一個正在啟動並執行容器,對於後面馬上說到的 daemon 方式啟動並執行容器很有用

$ sudo docker restart CONTAINERID

後台運行容器

$ sudo docker run -d ubuntu:14.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"

使用 “docker ps” 可以看到正在啟動並執行容器資訊

如果需要關注後台容器的運行狀態,可以使用 “docker logs” 來查看作業記錄

終止容器運行

如果 shell 串連到容器的標準輸入,可以使用 exit 命令或者 Ctrl + D 來終止容器運行。對於後台啟動並執行容器,可以使用 “docker stop” 命令來做同樣的事情。

串連容器

對於開啟了偽終端的後台容器來說,可以通過下面的命令建立並運行:

$ sudo docker -idt ubuntu:14.04

然後,可以通過下面的命令串連到這個容器:

$ sudo docker psCONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES243c32535da7        ubuntu:latest       "/bin/bash"         18 seconds ago      Up 17 seconds                           nostalgic_hypatia$sudo docker attach nostalgic_hypatiaroot@243c32535da7:/#

匯出和載入容器

$ sudo docker ps -aCONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                    PORTS               NAMES7691a814370e        ubuntu:14.04        "/bin/bash"         36 hours ago        Exited (0) 21 hours ago                       test$ sudo docker export 7691a814370e > ubuntu.tar
$ cat ubuntu.tar | sudo docker import - test/buntu:v1.0$ sudo docker imagesREPOSITORY          TAG                 IMAGE ID            CREATED              VIRTUAL SIZEtest/ubuntu         v1.0                9d37a6082e97        About a minute ago   171.3 MB

匯出的容器只是容器目前狀態的快照,不包含該容器之前的記錄和中繼資料資訊。

倉庫

我們可以把允許公開的鏡像上傳到 Docker 官方維護的 Docker Hub 來共用,也可以下載安裝 docker-registry 建立私人倉庫來儲存自己的鏡像,具體的文檔可以參考這裡

Docker 資源

-- EOF --

  • Android 下載列表執行個體→
  • ← 爬樓梯和斐波拉契數列

聲明: 本文採用 BY-NC-SA 協議進行授權. 轉載請註明轉自: Docker - 小李飛刀般的虛擬化解決方案

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.