Update title style

Signed-off-by: Kang HuaiShuai <khs1994@khs1994.com>
This commit is contained in:
Kang HuaiShuai
2019-11-06 14:53:09 +08:00
parent 99e470eb2a
commit 5cb92f63cf
60 changed files with 224 additions and 232 deletions

View File

@@ -1,10 +1,10 @@
## 多阶段构建
# 多阶段构建
### 之前的做法
## 之前的做法
Docker 17.05 版本之前我们构建 Docker 镜像时通常会采用两种方式
#### 全部放入一个 Dockerfile
### 全部放入一个 Dockerfile
一种方式是将所有的构建过程编包含在一个 `Dockerfile` 包括项目及其依赖库的编译测试打包等流程这里可能会带来的一些问题
@@ -50,7 +50,7 @@ CMD ["./app"]
$ docker build -t go/helloworld:1 -f Dockerfile.one .
```
#### 分散到多个 Dockerfile
### 分散到多个 Dockerfile
另一种方式就是我们事先在一个 `Dockerfile` 将项目及其依赖库编译测试打包好后再将其拷贝到运行环境中这种方式需要我们编写两个 `Dockerfile` 和一些编译脚本才能将其两个阶段自动整合起来这种方式虽然可以很好地规避第一种方式存在的风险但明显部署过程较复杂
@@ -119,7 +119,7 @@ go/helloworld 2 f7cf3465432c 22 seconds ago 6.47MB
go/helloworld 1 f55d3e16affc 2 minutes ago 295MB
```
### 使用多阶段构建
## 使用多阶段构建
为解决以上问题Docker v17.05 开始支持多阶段构建 (`multistage builds`)使用多阶段构建我们就可以很容易解决前面提到的问题并且只需要编写一个 `Dockerfile`
@@ -168,7 +168,7 @@ go/helloworld 1 f55d3e16affc 2 minutes ago 295MB
很明显使用多阶段构建的镜像体积小同时也完美解决了上边提到的问题
#### 只构建某一阶段的镜像
### 只构建某一阶段的镜像
我们可以使用 `as` 来为某一阶段命名例如
@@ -182,7 +182,7 @@ FROM golang:1.9-alpine as builder
$ docker build --target builder -t username/imagename:tag .
```
#### 构建时从其他镜像复制文件
### 构建时从其他镜像复制文件
上面例子中我们使用 `COPY --from=0 /go/src/github.com/go/helloworld/app .` 从上一阶段的镜像中复制文件我们也可以复制任意镜像中的文件

View File

@@ -1,8 +1,8 @@
## 实战多阶段构建 Laravel 镜像
# 实战多阶段构建 Laravel 镜像
> 本节适用于 PHP 开发者阅读
### 准备
## 准备
新建一个 `Laravel` 项目或在已有的 `Laravel` 项目根目录下新建 `Dockerfile` `.dockerignore` `laravel.conf` 文件
@@ -46,7 +46,7 @@ server {
}
```
### 前端构建
## 前端构建
第一阶段进行前端构建
@@ -65,7 +65,7 @@ RUN cd /app \
&& npm run production
```
### 安装 Composer 依赖
## 安装 Composer 依赖
第二阶段安装 Composer 依赖
@@ -85,7 +85,7 @@ RUN cd /app \
--prefer-dist
```
### 整合以上阶段所生成的文件
## 整合以上阶段所生成的文件
第三阶段对以上阶段生成的文件进行整合
@@ -111,7 +111,7 @@ RUN cd ${LARAVEL_PATH} \
&& chmod -R 777 storage
```
### 最后一个阶段构建 NGINX 镜像
## 最后一个阶段构建 NGINX 镜像
```docker
FROM nginx:alpine as nginx
@@ -122,7 +122,7 @@ COPY laravel.conf /etc/nginx/conf.d/
COPY --from=laravel ${LARAVEL_PATH}/public ${LARAVEL_PATH}/public
```
### 构建 Laravel Nginx 镜像
## 构建 Laravel Nginx 镜像
使用 `docker build` 命令构建镜像
@@ -132,7 +132,7 @@ $ docker build -t my/laravel --target=laravel .
$ docker build -t my/nginx --target=nginx .
```
### 启动容器并测试
## 启动容器并测试
新建 Docker 网络
@@ -156,11 +156,11 @@ $ docker run -it --rm --network=laravel -p 8080:80 my/nginx
> 也许 Laravel 项目依赖其他外部服务例如 redisMySQL请自行启动这些服务之后再进行测试本小节不再赘述
### 生产环境优化
## 生产环境优化
本小节内容为了方便测试将配置文件直接放到了镜像中实际在使用时 **建议** 将配置文件作为 `config` `secret` 挂载到容器中请读者自行学习 `Swarm mode` `Kubernetes` 的相关内容
### 附录
## 附录
完整的 `Dockerfile` 文件如下