Docker 入門詳情:了解Docker的三大核心

Docker 的前世今生

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

從前,我們在伺服器設定一個應用程式的運作環境,要安裝各種元件,就拿JavaWeb 的環境來說吧,要安裝Tomcat、 等。安裝和配置這些東西有多麻煩就不說了,它還不能跨平台。假如我們是Windows 上安裝的這些環境,到了 又得重新裝。況且就算不跨作業系統,換另一台同樣作業系統的伺服器,要移植應用程式也是非常麻煩的。

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

Docker 的安裝配置

這裡我主要介紹一下Docker 在Ubuntu 和Windows 的安裝。其他的作業系統可自行搜尋安裝教學。

由於Docker 官網在國內的存取速度不好,所以這裡推薦去 DaoCloud 下載鏡像,速度非常快:

https://get.daocloud.io/

Windows

先進入到Docker 的下載頁面:

https://get.daocloud.io/

如果是 系統就直接下載 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

如果裝錯版本了可以卸載了重新裝
$ sudo apt-get remove --purge docker.io
$ rm -rf /var/lib/docker

Docker 核心概念

Docker 有三大核心概念:

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

Docker 利用倉庫管理映像的設計與Git 非常相似。我們要配置的應用程式運行環境就是鏡像,如 鏡像,當我們本地沒有該鏡像的時候,就需要從遠端倉庫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 指令。若要退出容器可輸入

注意:有的映像像是沒有帶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 自己的鏡像到遠端倉庫。

1/5 - (1 vote)

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *