Kubernetes 實踐 第一篇: 程序容器化

此係列文章爲團隊內部的實踐總結和培訓資料, 去除敏感信息保留公共部分與你們共享. 首先須要你們對Docker和Kubernetes有必定的基礎瞭解, 文章再也不對容器集羣是什麼的問題進行論述. 着重於怎麼作爲何. 目標是讓有容器相關基礎概念的讀者參考此係列文章, 可以將手上的程序在Kubernetes中以符合雲原生的方式運行起來.php

目錄:html

  1. Kubernetes 實踐 第一篇: 程序容器化
  2. Kubernetes 實踐 第二篇: 部署應用到集羣上
  3. Kubernetes 實踐 第三篇: 基於Gitlab的CI/CD
  4. Kubernetes 實踐 第四篇: 存儲
  5. Kubernetes 實踐 第五篇: 配置管理
  6. Kubernetes 實踐 第六篇: 日誌管理
  7. Kubernetes 實踐 第七篇: 微服務鏈路追蹤
  8. Kubernetes 實踐 第八篇: Golang 程序完整實現和 Demo
  9. Kubernetes 實踐 第九篇: PHP 程序的完整實現和 Demo

Golang 程序容器化

得益於 Golang 編譯成單進程的二進制程序的特性, Golang 程序封裝爲 Docker 鏡像很是簡單. 只需以下加單的 Dockerfile 便可完成. 有兩點須要說明的:linux

  • 這裏使用了 docker 的 multi-stage 特性, 分開了編譯和運行環境, 運行環境中只包含最終的二進制文件, 不須要包含Golang的環境.
  • 使用 ARG 傳入了 golang 程序基於GOAPTH的路徑和程序的二進制文件名.
FROM golang:1.12
ARG APP_ROOT
ARG APP_NAME
WORKDIR ${APP_ROOT} COPY ./ ${APP_ROOT} RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o ${APP_NAME} . 
FROMalpine:v3.8
ARG APP_ROOT
ARG APP_NAME
WORKDIR /app/ RUN mkdir -p ./conf/dev && touch ./conf/dev/app.conf COPY --from=0 ${APP_ROOT}/conf/app.conf ./conf/app.conf COPY --from=0 ${APP_ROOT}/${APP_NAME} . ENV APP_NAME ${APP_NAME}
ENTRYPOINT /app/${APP_NAME} 複製代碼

執行編譯命令, 生成鏡像.nginx

docker build --build-arg APP_ROOT=$APP_ROOT --build-arg APP_NAME=$APP_NAME -t $IMAGE_NAME -f docker/Dockerfile .
複製代碼

PHP 程序容器化

PHP 的容器化比較特殊, 生產環境中PHP並非一個單進程的程序, 他須要 fpm 和 nginx 共同運行, 把他們打包在一個鏡像中作成一個胖容器不是一個好主意. 後面的部署階段咱們使用 Kubernetes 提供的 Pod 編排特性把他們放在一塊兒運行, 而 PHP 鏡像自己只需包含 PHP代碼和 fpm 便可.golang

具體如何將多個容器編排在一塊兒運行請參考 :matthewpalmer.net/kubernetes-…docker

後續部署的章節也會有專門內容講解.bash

PHP程序的Dockerfile:app

FROM php:7.2-fpm
RUN mkdir /app COPY hello.php /app 複製代碼
相關文章
相關標籤/搜索