docker
docker

简述

为了便于phpweb项目快速部署,解决环境差异引发不同的问题,我们现在构建一个phpweb应用的基础镜像
其包含:

  • ubuntu:latest版本
  • PHP7.4
  • PHP7.4-fpm
  • nginx

演示为macOS下终端命令行,为了便于操作我们创建一个dockerPro文件夹,后续操作在dockerPro文件夹下完成其目录结构如下:

lisi@lxmacpro dockerPro % ll
total 16
-rw-r–r– 1 lisi staff 384 7 7 22:11 Dockerfile
drwxr-xr-x 3 lisi staff 96 7 7 21:37 dockerConf
drwxr-xr-x 3 lisi staff 96 7 7 22:09 html
-rw-r–r– 1 lisi staff 92 7 7 23:34 start.sh

构建部分

Dockerfile是什么

Dockerfile 是一个用来构建镜像的文本文件,无后缀名,文本内容包含了一条条构建镜像所需的指令和说明。

常用命令说明,更多可点击这里

命令解释说明
FROM基础镜像,来源于哪个镜像定制,制作
RUN用于执行命令行命令两种形式:1:shell格式 等同于命令行 :RUN apt-get update exec格式:RUN [“可执行文件”, “参数1”, “参数2”]
COPY从上下文目录中复制文件或者目录到容器里指定路径
CMD类似于 RUN 指令,用于运行程序,
CMD 在docker run 时运行。
RUN 是在 docker build。

创建Dockerfile文件

Dockerfile 的指令每执行一次都会在 docker 上新建一层。所以过多无意义的层,会造成镜像膨胀过大。我们以 && 符号连接命令,这样执行后,只会创建 1 层镜像。以上也可写为如下:

解释 :命令 ‘sh -c ‘/bin/echo -e “6\n70\n70” | apt-get install -y nginx’
-y 表示安装过程中对ubuntu 安装软件中交互回答是否继续回答 yes 避免安装中断
“6\n70\n70” :表示对安装过程中问题依次回答 6回车70回车70 用来回答人机交互

在html文件夹下创建index.php 探针文件其内容如下

在 dockerConf文件夹下创建nginx 站点默认配置文件 Nginx_default 其内容如下

创建启动脚本文件start.sh其内容如下:

构建镜像命令如下在dockerPro文件夹下运行

lisi@lxmacpro dockerPro % docker build -t ulnpf:20 .
Successfully built c3ed31855929
Successfully tagged ulnpf:20

查看镜像:docker images

lisi@lxmacpro dockerPro % docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ulnpf 20 c3ed31855929 2 minutes ago 300MB
bornfree/ulnpf 1.0 c75749c5e9bc 19 hours ago 302MB

运行创建容器检测

docker run -d -p 2002:80 –name ulnpf20 ulnpf:20

查看容器是否运行创建成功:docker ps

lisi@lxmacpro dockerPro % docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8622ee915280 ulnpf:20 “/var/tmp/start.sh” About a minute ago Up About a minute 0.0.0.0:2002->80/tcp ulnpf20

可以看到我们运行成功,浏览器访问 127.0.0.1:2002 如果能看到phpinfo页则代表我们构建基础镜像成功,并且能成功运行!如下图

此后我们只需用我们PHP项目文件替换掉html内的内容即可完成项目的部署,依据项目的不同我们可以调整nginx配置,PHP-fpm配置,增加PHP模块再次封装即可

解决docker容器启动后马上就退出点击这里

最后修改日期:2020-07-08

作者

留言

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。