此系列文章为团队内部的实践总结和培训资料, 去除敏感信息保留公共部分与你们共享. 首先须要你们对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 复制代码