前言
本文假設讀者都是開發者,並熟悉 Linux 環境,所以就不介紹基礎的技術概念了。命令列環境以 Linux 示例。
內容概要
本文包括以下內容:
- 在 CentOS7 下安裝 Docker
- 製作 Docker 映象
- 通過 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(社群版)為例。
-
OS 前提條件
要安裝 Docker CE,你需要一個正在維護版本的 CentOS 7。歸檔版本沒有得到測試以及支援。
centos-extras
倉庫需要被啟用。預設情況下是啟用的。overlay2
儲存驅動是推薦使用的。 -
刪除舊版本
舊版本的 Docker 被稱為
docker
或docker-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
。 -
安裝 Docker CE
安裝 Docker CE 通常有3中方法:
-
通過包管理工具倉庫安裝
4.1 配置軟體源倉庫
- 需要預先安裝依賴包。
yum-utils
提供yum-config-manager
工具,然後device-mapper-persistent-data
和lvm2
被devicemapper
儲存驅動依賴。(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(有中文版)。
-
搜尋可用的docker映象
使用docker最簡單的方式莫過於從現有的容器映象開始。Docker官方網站專門有一個頁面來儲存所有可用的映象,網址是: index.docker.io。你可以通過瀏覽這個網頁來查詢你想要使用的映象,或者使用命令列的工具來檢索。
-
拉取映象
(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 複製程式碼
-
製作 Docker 映象
語法:
docker build [OPTIONS] PATH | URL | -
docker build
命令從Dockerfile
和一個"上下文"製作映象。一個build
的上下文是一個特定位置下的檔案的集合,這個位置可以通過PATH
或URL
來指定。 換句話說,你可以通過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
複製程式碼