此係列文章爲團隊內部的實踐總結和培訓資料, 去除敏感信息保留公共部分與你們共享. 首先須要你們對Docker和Kubernetes有必定的基礎瞭解, 文章再也不對容器集羣是什麼的問題進行論述. 着重於怎麼作和爲何. 目標是讓有容器相關基礎概念的讀者參考此係列文章, 可以將手上的程序在Kubernetes中以符合雲原生的方式運行起來.php
目錄:html
得益於 Golang 編譯成單進程的二進制程序的特性, Golang 程序封裝爲 Docker 鏡像很是簡單. 只需以下加單的 Dockerfile
便可完成. 有兩點須要說明的:linux
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並非一個單進程的程序, 他須要 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 複製代碼