Docker 入門(一):理解三大核心

Docker 的前世此生

Docker 的核心理念是 Build, Ship, and Run Any App, Anywher,即一次封裝,處處運行。linux

從前,咱們在服務器配置一個應用的運行環境,要安裝各類組件,就拿 JavaWeb 的環境來講吧,要安裝 Tomcat、MySQL 等。安裝和配置這些東西有多麻煩就不說了,它還不能跨平臺。假如咱們是在 Windows 上安裝的這些環境,到了 Linux 又得從新裝。何況就算不跨操做系統,換另外一臺一樣操做系統的服務器,要移植應用也是很是麻煩的。nginx

Linux 容器技術 的出現就解決了這樣一個問題,而 Docker 就是在它的基礎上發展過來的。將應用運行在 Docker 容器上面,而 Docker 容器在任何操做系統上都是一致的,這就實現了跨平臺、跨服務器。只須要一次配置好環境,換到別的機子上就能夠一鍵部署好,大大簡化了操做。web

Docker 的安裝配置

這裏我主要介紹一下 Docker 在 Ubuntu 和 Windows 中的安裝。其餘的操做系統可自行搜索安裝教程。docker

因爲 Docker 官網在國內的訪問速度很差,因此這裏推薦去 DaoCloud 下載鏡像,速度很是快:segmentfault

https://get.daocloud.io/#inst...windows

Windows

先進入到 Docker 的下載頁面:瀏覽器

https://get.daocloud.io/#inst...bash

若是是 win10 系統就直接下載 Docker for Windows,若是是 win10 以前的系統就下載Docker Toolbox。下載完成以後默認一直點下一步就安裝完成了。服務器

注意:windows 運行 Docker 須要在 BIOS 中開啓 Intel Virtual Technology,若是打不開 Docker 並提示有該類錯誤請自行根據本身電腦型號搜索相關教程。

Ubuntu

  • 能夠用 Ubuntu 自帶的安裝源安裝 Docker,只須要執行如下兩條命令便可:
$ sudo apt-get update
$ sudo apt-get install docker.io
  • 不過用自帶安裝源安裝的 Docker 並非最新版,推薦用如下方式安裝最新版:
$ curl -sSL https://get.daocloud.io/docker | sh
  • 安裝完成以後能夠用 docker version 命令查看 docker 版本信息。

注意:正常狀況下,應該顯示出 Client 和 Server 的信息,若是沒有 Server 的信息,則表明服務沒有啓動。此時須要用 service docker start 命令啓動它。

Ubuntu 卸載 Docker

若是裝錯版本了能夠卸載了從新裝curl

$ sudo apt-get remove --purge docker.io
$ rm -rf /var/lib/docker

Docker 核心概念

Docker 有三大核心概念:

  • 倉庫(repository)
  • 鏡像(image)
  • 容器(container)

Docker 利用倉庫管理鏡像的設計與 Git 很是類似。咱們要配置的應用運行環境就是鏡像,如 nginx 鏡像,當咱們本地沒有該鏡像的時候,就須要從遠程倉庫 pull 下來,當咱們啓動這個鏡像時,就會有一份鏡像被複制並運行在容器中。若是咱們改動了容器裏面的內容,也能夠將其 commit 保存成新的鏡像。

第一個 Docker 實例

這裏以 Nginx 爲例來演示在 docker 中啓動一個應用的過程。

啓動 Nginx 分爲 三步:

  • pull nginx 鏡像
  • 運行 nginx 容器
  • 映射 nginx 端口

pull 鏡像

首先要 Docker 官方倉庫 裏搜索 nginx,找到帶有 official 字樣的,點進去把 pull 命令複製下來。

https://hub.docker.com

執行該條命令就把鏡像 pull 到本地了。執行「docker images」便可查看本地鏡像。

其實 docker pull nginx 這條命令是簡寫形式,完整命令應該是:

$ docker pull registry.hub.docker.com/library/nginx

完整的命令是在 nginx 前面加上了 註冊服務器的地址,因爲 docker pull 的默認地址是這個,因此該地址是能夠不加的。

爲何要說這個呢,由於從官方倉庫下載鏡像實在是很是的慢,有時候還下載不了。若是咱們更改了這個註冊服務器的地址,把它換成國內的,就能夠實現加速。

鏡像加速

國內有很是多的鏡像倉庫,本文介紹使用阿里雲的,後文咱們也會介紹把本身的鏡像上傳到阿里雲,而且該服務是免費的。

訪問這個地址:

https://cr.console.aliyun.com...

若是沒有阿里雲帳號的就本身註冊一個。在上面這個地址的頁面就能夠看到本身的專屬加速地址了,而且有不一樣系統的安裝方法,根據給的教程安裝便可。

運行 nginx 容器

pull 了鏡像以後,執行如下命令就能夠啓動它了。

$ docker run -d nginx

這條命令是後臺啓動 nginx ,不加 -d 就是前臺啓動。啓動了以後咱們暫時仍是沒法訪問帶它的,咱們還須要將容器內的 nginx 端口映射到容器外面,才能夠訪問到。

映射 nginx 端口

$ docker run -d -p 8080:80 nginx

跟上條命令比起來只加了一個 -p 參數,後面跟上端口,這裏我是把本機的 8080 端口映射到 容器內的 80 端口上,瀏覽器訪問 localhost:8080 就能夠看到 nginx 的歡迎頁面了。

鏡像和容器的基本操做

鏡像操做

  • 查看本地鏡像
$ docker images

  • 爲鏡像添加標籤
$ docker tag old-tag new-tag

新的標籤跟原標籤鏡像的 ID 是徹底同樣的,它們實際上都指向同一個鏡像文件,只是別名不一樣而已。
  • 刪除鏡像
$ docker rmi image-id/image-tag

注意:刪除鏡像須要先刪除使用了此鏡像的容器,雖然能夠強制刪除,可是並不推薦這麼作。另外刪除鏡像,能夠用 tag 或 ID 刪除,若是 ID 是同樣的就用 tag 刪除

容器操做

  • 查看正運行的容器
$ docker ps

  • 中止正在運行的容器
$ docker stop container-id

容器的 ID 不須要所有輸完,只要能區分兩個容器就能夠了。
  • 查看全部容器
$ docker ps -a

  • 刪除容器
$ docker rm container-id

刪除容器以前須要先中止它
  • 將正在運行的容器保存爲鏡像
$ docker commit container-id image-tag

特別注意:若是更改了容器後不將它保存爲新的鏡像,在容器被刪除後,全部的更改都不會被保存。下一文會介紹另 Docker 的數據存儲能夠解決這個問題。另外,此命令後面的 tag 能夠不寫只寫名字,默認 latest。
  • 進入容器內部
$ docker exec -it container bash

Docker 容器也有一個類 Linux 的文件系統,還能夠用一些 linux 命令。要退出容器可輸入 exit

注意:有的鏡像是沒有帶 bash 的,好比 docker pull daocloud.io/library/nginx:1.13.8-alpine-perl,這條命令就會報錯,這時就能夠用 sh 創建鏈接:

$ docker exec -it container /bin/sh
  • 複製文件到容器內
$ docker cp file container-id:newfile

  • 複製容器內的文件到容器外
$ docker cp container-id:file newfile

複製容器內的文件到容器外命令是在容器外執行的

導入導出鏡像和容器

導入和導出鏡像

  • 導出鏡像
$ docker save -o name.tar image-tag

  • 導入鏡像
$ docker load --input name.tar

導入和導出容器

  • 導出容器
$ docker export -o name.tar container-id

  • 導入容器(docker import name.tar image-tag)

容器導入實際上是導成了鏡像。

push 本身的鏡像到遠程倉庫

先來了解一下 docker 是如何管理倉庫和鏡像的。

倉庫是放在註冊服務器上的,一個倉庫只管理一個鏡像,一個鏡像能夠有多個版本。

push 鏡像到 Docker Hub

  • 訪問 Docker Hub(註冊服務器):

https://hub.docker.com/

  • 若是沒有帳號的話本身註冊一個,而後點擊 Create Repository ,在以下頁面建立一個倉庫。

  • 例如我起的名字是:web-server,個人倉庫名就是 stormxing/web-server
  • 接着在本地用以下命令登陸 Docker Hub

  • 若是咱們想把鏡像上傳到 Docker Hub,咱們的鏡像名字就得跟倉庫名一致。要作到這一點,咱們能夠用爲鏡像建立一個新的標籤。例如將 nginx 鏡像從新建立一個標籤 stormxing-webserver,若是版本不填寫就默認是 latest。

  • 最後,直接 push 就能夠了,完成以後在倉庫頁面的 tags 選項中能夠看到本身的鏡像。

push 鏡像到阿里雲倉庫

雖然 Docker Hub 能夠 push 鏡像,可是速度太慢了。最好仍是用國內的速度比較快,這裏介紹阿里雲的。

  • 首先登錄這個地址,建立一個倉庫,而後設置下登陸密碼:

https://cr.console.aliyun.com

  • 建立倉庫選擇本地倉庫

  • 最後阿里雲的操做指南很是詳細,跟上面的步驟基本一致,這裏就再也不贅述了。

總結

本篇文章主要介紹了Docker 的做用、Docker 三大核心(倉庫、鏡像、容器)的基本操做,還介紹瞭如何 push 本身的鏡像到遠程倉庫。

下一篇文章 將介紹 Docker 的數據管理和用更高級的方式 Dockerfile 來建立鏡像以及 docker-compose 的簡單使用。

相關文章
相關標籤/搜索