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 复制代码
相关文章
相关标签/搜索