對於kubernetes(k8s)入門需要了解的docker基礎

gself發表於2019-04-08

前言

本文假設讀者都是開發者,並熟悉 Linux 環境,所以就不介紹基礎的技術概念了。命令列環境以 Linux 示例。

內容概要

本文包括以下內容:

  1. 在 CentOS7 下安裝 Docker
  2. 製作 Docker 映象
  3. 通過 Docker 部署服務

擴充套件閱讀

對於已經熟悉的 Docker 的朋友,推薦閱讀使用 Docker + Jenkins 構建 CI/CD 環境。 閱讀完這篇文章,你將可以達到以下的效果:

| 只通過一個 commit(GitHub),將應用通過 Docker 容器部署出來。

這其中包括以下操作:

  • 檢出程式碼
  • 執行測試
  • 編譯程式碼
  • 對程式碼進行 SonarQube (程式碼質量管理工具)分析
  • 建立 Docker 映象
  • 推送映象到Docker Hub
  • 拉取並執行映象

簡單地說,就是大概時神兵結合平安CaaS後臺所做的事情。

正文

通過 Docker 啟動一個簡單的 web 應用

在 CentOS7 下安裝 Docker

Docker 現在有2個版本,分別是 Docker CE 和 Docker EE。這2個版本都是由官方維護的,EE 是商業版,由官方提供認證了的OS、雲平臺層的技術支援,並提供 LDAP、Active Directory之類的認證(鑑權)系統技術支援以及映象認證等安全方面的支援。 本文以 Docker CE(社群版)為例。

  1. OS 前提條件

    要安裝 Docker CE,你需要一個正在維護版本的 CentOS 7。歸檔版本沒有得到測試以及支援。

    centos-extras 倉庫需要被啟用。預設情況下是啟用的。

    overlay2 儲存驅動是推薦使用的。

  2. 刪除舊版本

    舊版本的 Docker 被稱為 dockerdocker-engine。如果它們有被安裝,先刪除它們,包括相關聯的依賴組建。

    (sudo) yum remove docker \
    docker-client \
    docker-client-latest \
    docker-common \
    docker-latest \
    docker-latest-logrotate \
    docker-logrotate \
    docker-engine
    複製程式碼

    如果 yum報告說沒有安裝這些,也是OK的。

    /var/lib/docker當中的內容包括映象、容器、卷、網路等預設內容。Docker CE 安裝包現在被稱為 docker-ce

  3. 安裝 Docker CE

    安裝 Docker CE 通常有3中方法:

    • 大多數人使用通過包管理工具倉庫。由於步驟簡單並易於管理版本,官方推薦使用這種方法。
    • 有些人下載 RPM 包並手動安裝,並且完全手動管理版本。在與網際網路隔絕的環境,這種方法比較有用。
    • 在測試以及開發環境,有些人通過自動化指令碼來安裝Docker。
  4. 通過包管理工具倉庫安裝

    4.1 配置軟體源倉庫

    • 需要預先安裝依賴包。yum-utils提供yum-config-manager工具,然後device-mapper-persistent-datalvm2devicemapper儲存驅動依賴。
    (sudo) yum install -y yum-utils \
    device-mapper-persistent-data \
    lvm2
    複製程式碼
    • 使用下列命令配置穩定倉庫源。
    (sudo) yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
    複製程式碼

    4.2 安裝 Docker CE (sudo) yum install docker-ce docker-ce-cli containerd.io 如果命令列提示說需要接受GPG key,確認fingerprint與下列相同。 060A 61C5 1B55 8A7F 742B 77AA C52F EB6B 621E 9F35,如果相同,接受它。

    4.3 (可選項)安裝指定版本的Docker CE。

    • 排序列出倉庫源中的可用版本 例如:
    $ yum list docker-ce --showduplicates | sort -r
    
    docker-ce.x86_64  3:18.09.1-3.el7                     docker-ce-stable
    docker-ce.x86_64  3:18.09.0-3.el7                     docker-ce-stable
    docker-ce.x86_64  18.06.1.ce-3.el7                    docker-ce-stable
    docker-ce.x86_64  18.06.0.ce-3.el7                    docker-ce-stable
    複製程式碼
    • 通過有效的軟體包全名來安裝制定版本 包的全名由2部分組成。分別是 (1)包名 (docker-ce)加上從第1個冒號(:)後開頭,直到第1個連字元(-)結束的 (2)版本字串 (第2列),中間由連字元(-)相連。例如: docker-ce-18.09.1(sudo) yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io 完成以上步驟之後,Docker已經安裝,系統中建立了一個docker組,但沒有使用者被新增到這個組。 4.4 啟動 Docker (sudo) systemctl start docker 4.5 驗證 Docker CE 安裝正常,通過執行hello-world映象。 (sudo) docker run hello-world

製作 Docker 映象

關於docker命令可以參考網友分享的docker cheat sheet(有中文版)。

  1. 搜尋可用的docker映象

    使用docker最簡單的方式莫過於從現有的容器映象開始。Docker官方網站專門有一個頁面來儲存所有可用的映象,網址是: index.docker.io。你可以通過瀏覽這個網頁來查詢你想要使用的映象,或者使用命令列的工具來檢索。

    搜尋映象

  2. 拉取映象 (sudo) docker pull <IMAGE_NAME/IMAGE_ID>

    $ docker images
    REPOSITORY                                 TAG                 IMAGE ID            CREATED             SIZE
    hello-world                                latest              fce289e99eb9        3 months ago        1.84kB
    kindest/node                               v1.12.2             58eadc0ca522        5 months ago        1.5GB
    k8s.gcr.io/kube-proxy-amd64                v1.11.3             be5a6e1ecfa6        7 months ago        97.8MB
    k8s.gcr.io/kube-controller-manager-amd64   v1.11.3             a710d6a92519        7 months ago        155MB
    k8s.gcr.io/kube-apiserver-amd64            v1.11.3             3de571b6587b        7 months ago        187MB
    k8s.gcr.io/kube-scheduler-amd64            v1.11.3             ca1f38854f74        7 months ago        56.8MB
    k8s.gcr.io/coredns                         1.1.3               b3b94275d97c        10 months ago       45.6MB
    k8s.gcr.io/etcd-amd64                      3.2.18              b8df3b177be2        12 months ago       219MB
    k8s.gcr.io/pause                           3.1                 da86e6ba6ca1        15 months ago       742kB
    $ docker pull busybox
    Using default tag: latest
    latest: Pulling from library/busybox
    fc1a6b909f82: Pull complete
    Digest: sha256:954e1f01e80ce09d0887ff6ea10b13a812cb01932a0781d6b0cc23f743a874fd
    Status: Downloaded newer image for busybox:latest
    $ docker images
    REPOSITORY                                 TAG                 IMAGE ID            CREATED             SIZE
    busybox                                    latest              af2f74c517aa        5 days ago          1.2MB
    hello-world                                latest              fce289e99eb9        3 months ago        1.84kB
    kindest/node                               v1.12.2             58eadc0ca522        5 months ago        1.5GB
    k8s.gcr.io/kube-proxy-amd64                v1.11.3             be5a6e1ecfa6        7 months ago        97.8MB
    k8s.gcr.io/kube-scheduler-amd64            v1.11.3             ca1f38854f74        7 months ago        56.8MB
    k8s.gcr.io/kube-apiserver-amd64            v1.11.3             3de571b6587b        7 months ago        187MB
    k8s.gcr.io/kube-controller-manager-amd64   v1.11.3             a710d6a92519        7 months ago        155MB
    k8s.gcr.io/coredns                         1.1.3               b3b94275d97c        10 months ago       45.6MB
    k8s.gcr.io/etcd-amd64                      3.2.18              b8df3b177be2        12 months ago       219MB
    k8s.gcr.io/pause                           3.1                 da86e6ba6ca1        15 months ago       742kB
    複製程式碼
  3. 製作 Docker 映象

    語法: docker build [OPTIONS] PATH | URL | -

    docker build命令從Dockerfile和一個"上下文"製作映象。一個build的上下文是一個特定位置下的檔案的集合,這個位置可以通過PATHURL來指定。 換句話說,你可以通過git倉庫指定"上下文"。

    3.1 編寫 Dockerfile

    我用go語言寫了一個簡單的web應用。 現在我基於基礎映象busybox來製作我自己的web應用映象,取名為"go-server-9860"。

    • 編寫 Dockerfile Dockerfile可以參照此處

    3.2 建立映象

    使用docker build命令通過指定URL來建立映象。

    例子: docker build -t go-server-9860 https://github.com/aruruka/hello-world.git#master:docker_basis

    3.3 執行映象

    以後臺方式啟動一個容器:

    docker run -d --name go-server-9860 -p 127.0.0.1:9860:9860/tcp --rm go-server

    進入一個容器並分配一個終端:

    docker exec -it go-server-9860 sh

    給一個容器傳送SIGKILL訊號:

    docker kill go-server-9860

訪問剛剛部署的web服務

# 檢視正在雲從的容器:
docker ps | sed -n '1p;/go-server/Ip
# 測試埠是否在宿主機上監聽
telnet 127.0.0.1 9860
# 訪問服務
curl http://127.0.0.1:9860/world
複製程式碼

相關文章