赞
踩
####################### #1. pull ubuntu image## ####################### FROM ubuntu:20.04 LABEL maintainer="Tengine docker admin <youjiu_linux@qq.com>" author="oldboylidao996" ####################### ####ENV vars########### ####################### ENV Web_User="nginx" ENV Web_Server="tengine" ENV Web_Version="2.3.2" ENV Server_Dir="/app/tools/tengine-2.3.2" ENV Server_Dir_Soft="/app/tools/tengine" ####################### #2. ge zhong run ###### ####################### RUN sed -ri 's#archive.ubuntu.com|security.ubuntu.com#mirrors.aliyun.com#g' /etc/apt/sources.list \ && apt-get update \ && apt-get install -y wget libssl-dev make gcc pcre2-utils libpcre3-dev zlib1g-dev \ && wget -P /tmp/http://tengine.taobao.org/download/${Web_Server}-${Web_Version}.tar.gz \ && cd /tmp \ && tar xf ${Web_Server}-${Web_Version}.tar.gz \ && cd ${Web_Server}-${Web_Version} \ && ./configure --prefix=${Server_Dir} \ --user=${Web_User} \ --group=${Web_User} \ --with-http_ssl_module \ --with-http_v2_module \ --with-http_realip_module \ --with-http_stub_status_module \ --with-http_mp4_module \ --with-stream \ --with-stream_ssl_module \ --with-stream_realip_module \ --add-module=modules/ngx_http_upstream_check_module/ \ --add-module=modules/ngx_http_upstream_session_sticky_module \ && make \ && make install \ && groupadd ${Web_User} \ && useradd -g ${Web_User} ${Web_User} \ && ln -s ${Server_Dir} ${Server_Dir_Soft} \ && ln -s ${Server_Dir_Soft}/sbin/nginx /sbin/ ####################### ##3. clean ############ ####################### RUN rm -fr /tmp/* \ && rm -fr /var/cache/* ####################### ##4. copy index.html### ####################### COPY index.html ${Server_Dir_Soft}/html/index.html ####################### ##5. PORT 80########### ####################### EXPOSE 80 443 ####################### ##6. CMD############### ####################### CMD ["nginx","-g","daemon off;"]
流程:
Dockerfile
FROM centos:7 #1.vars ENV WEB_USER=nginx #2.传输软件包nginx+php ADD ngx-php.tar.gz /tmp/ COPY entrypoint.sh / #3.安装软件包 RUN curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo \ && curl -o /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo \ && sed -i 's#keepcache=0#keepcache=l#g' /etc/yum.conf \ && yum localinstall -y /tmp/*.rpm \ && sed -i "s#apache#${WEB USER}#g" /etc/php-fpm.d/www.conf #4.端口 EXPOSE 80 9000 #5.入口命令 CMD ["/entrypoint.sh"]
cat entrypoint.sh
#!/bin/bash
php-fpm
nginx -g "daemon off;"
docker build -t web:nginx_php_v3 .
目前使用多节点提交实现:
在1个dockerfile中使用多个FROM,以减小最终镜像大小
tengine+type项目多阶段提交
[root@docker01 07-multi-image-tengine]# cat Dockerfile #1. 基本信息 FROM ubuntu:20.04 AS TEMP LABEL author="lidao996" \ url="www.oldboyedu.com" #2. vars ENV WEB_SERVER=tengine-2.3.3 ENV INSTALL_DIR=/app/tools/${WEB_SERVER} ENV NGX_USER=nginx ENV CPU_CORES=1 #2. 传输软件包 ADD tengine-2.3.3.tar.gz /tmp/ #3. 环境准备 RUN sed -ri 's#archive.ubuntu.com|security.ubuntu.com#mirrors.aliyun.com#g' /etc/apt/sources.list RUN apt update RUN apt install -y libssl-dev make gcc pcre2-utils libpcre3-dev zlib1g-dev RUN cd /tmp/tengine-2.3.3/ \ && ./configure --prefix=${INSTALL_DIR} \ --user=${NGX_USER} \ --group=${NGX_USER} \ --with-http_ssl_module \ --with-http_v2_module \ --with-http_realip_module \ --with-http_stub_status_module \ --with-http_mp4_module \ --with-stream \ --with-stream_ssl_module \ --with-stream_realip_module \ --add-module=modules/ngx_http_upstream_check_module/ \ --add-module=modules/ngx_http_upstream_session_sticky_module \ && make -j ${CPU_CORES} \ && make install #编译安装结束生成命令 源码目录/tmp/tengine-2.3.3/objs/nginx # 下面待整理, 创建软连接,添加用户 # 到此为止第1个镜像的任务已经完成了. # FROM ubuntu:20.04 ENV NGX_USER=nginx COPY --from=TEMP /app/ /app/ RUN sed -ri 's#archive.ubuntu.com|security.ubuntu.com#mirrors.aliyun.com#g' /etc/apt/sources.list RUN apt update RUN apt install -y libssl-dev make gcc pcre2-utils libpcre3-dev zlib1g-dev RUN ln -s /app/tools/tengine-2.3.3/ /app/tools/tengine RUN ln -s /app/tools/tengine/sbin/nginx /sbin/nginx RUN useradd -s /sbin/nologin \${NGX_USER} RUN rm -fr /tmp/* /var/cache/* EXPOSE 80 CMD [ "nginx","-g","daemon off;" ]
多阶段提交(FROM)小结
应用场景:
FROM ubuntu:20.04 AS base
FROM ubuntu:20.04
ADD --from
COPY --from
CMD与ENTRYPOINT,目前大部分使用CMD即可
dockerfile2个指令 | CMD | ENTRYPOINT |
---|---|---|
共同点 | 用于设置容器入口命令 容器启动后默认运行什么指令什么参数 | 用于设置容器入口命令 容器启动后默认运行什么指令什么参数 |
共同点 | CMD [“命令”,“参数1”,“参数2”] | ENTRYPOINT [“命令”,“参数1”,“参数2”] |
区别(非同时时间) | 用户通过docker run/exec启动进入容 器的时候,指定了命令. 这个命令会替代CMD命令和参数 | 用户通过docker run/exec启动进入容器的时候,指定了命令. 指定的命令,选项会成为ENTRYPOINT命令的选项 |
区别(一起使用学完SHELL) | CMD写的入口命令和命令的选项.(可以被 替换) | 入口的指令不可替换. 一般指定脚本,脚本用于判断用户docker run/exec的时候是否输入了命令. 如果没加 docker run -d nginx:1.20.2,直接运行CMD 如果加了,则运行对应的命令和选项 |
生产环境应用建议 | 说明 |
---|---|
尽量保证每个镜像功能单一 | 尽量避免多个服务运行在同一个镜像中 |
选择合适的基础镜像 | 不一定都要从头做(系统,ngx,tengine,tomcat,jdk…) |
注释与说明 | 添加一定的注释和镜像属性信息(LABEL) |
指定版本号 | 使用镜像的时候指定版本,nginx:latest php:latest nginx:1.20.2-alpine |
减少镜像层数/步骤 | 尽可能合并RUN,ADD,COPY |
记得收尾 | 清理垃圾,记得清理缓存,临时文件,压缩包… |
合理使用.dockerignore | 构建的忽略的文件(了解),少传输些文件 |
未来应用的时候,镜像做好后存放在镜像仓库中。
–link是用于容器连接其他容器的选项,其他容器要运行中才行
nginx:1.22.1-alpine
php:7-fpm #php:7-fpm-alpine /usr/local/etc/php-fpm.d/www.conf
修改配置,挂载配置
挂载代码
1. 代码与配置文件目录 mkdir -p kodexp/{conf,code,data} 2. /app/docker/kodexp ─ app │ ├── ChangeLog.md │ ├── config │ ├── data │ ├── index.php │ ├── plugins │ ├── README.MD │ └── static 3. 下载nginx和php镜像 nginx:1.20.2-alpine php:7-fpm 5. 启动php www.conf [www] user = www-data group = www-data listen = 0.0.0.0:9000 pm = dynamic pm.max_children = 5 pm.start_servers = 2 pm.min_spare_servers = 1 pm.max_spare_servers = 3 docker run -d --name "kodexp_php" \ -v `pwd` /conf/www.conf:/usr/local/etc/php-fpm.d/www.conf \ -v `pwd`/code:/app/code/kodexp \ php:7-fpm-alpine nginx与php,代码目录一致.php解析代码的时候也要找这个代码目录,如果不指定/var/www/html/目录.(php工作目录) 4. 启动nginx docker run -d --name "kodexp_nginx" -p 10086:80 \ Վʔlink kodexp_php:php \ -v `pwd`/conf/nginx.conf:/etc/nginx/nginx.conf \ -v `pwd`/conf/kodexp.conf:/etc/nginx/conf.d/kodexp.conf \ -v `pwd`/code:/app/code/kodexp/ \ nginx:1.22.1-alpine #--link 容器名字:别名 5. 修改代码权限 chmod -R 777 code
php环境缺少依赖 gd
#debian系统
FROM php:7.4-fpm
RUN apt-get update ՎҐ apt-get install -y \
libfreetype6-dev \
libjpeg62-turbo-dev \
libpng-dev \
&& docker-php-ext-configure gd Վʔwith-freetype --with-jpeg \
&& docker-php-ext-install -j$(nproc) gd
小结:link用于容器之间连接nginx–>php , php–>db
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。