使用Dockerfile编写源码安装Nginx镜像

简介: 使用Dockerfile编写源码安装Nginx镜像

 其实在Docker仓库中,存在nginx容器镜像,但是我们为什么还有自己来编写呢,是因为有的时候仓库中的版本,并非我们在需要的版本镜像,还有一点就因为安全问题,毕竟别人家的东西哪有自己家的东西用着安心呢。

       Dockerfile是使用源代码构建docker的镜像,编辑一个Dockerfile,而后根据此文件制作;docker可以自动通过读取Dockerfile中的指令,自动构建镜像。Dockerfile是一个文本文档包含所有用户的命令,可以在命令行上调用组建一个镜像。使用docker build命令的用户可以读取docker file中的连续指令,自动构建一个镜像。

一,构建nginx镜像

创建目录存放相关文件

1. mkdir nginxdockerfile
2. cd nginxdockerfile
3. echo "docker nginx build successful" > index.html

创建dockerfile文件

1. vi Dockerfile
2. FROM centos:7
3. LABEL version="nginx v1"
4. LABEL "emill"="243254384@qq.com"
5. RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
6. WORKDIR /usr/local/src
7. ENV NG_VERSION=nginx-1.25.1
8. RUN yum -y install epel-release
9. RUN yum -y install wget
10. RUN wget http://nginx.org/download/$NG_VERSION.tar.gz && tar xzvf $NG_VERSION.tar.gz 
11. RUN yum install -y gcc gcc-c++ glibc make autoconf openssl openssl-devel && yum install -y pcre-devel libxslt-devel gd-devel GeoIP GeoIP-devel GeoIP-data
12. RUN yum clean all 
13. RUN useradd -M -s /sbin/nologin nginx 
14. WORKDIR /usr/local/src/$NG_VERSION
15. RUN ./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-file-aio --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_xslt_module --with-http_image_filter_module --with-http_geoip_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_auth_request_module --with-http_random_index_module --with-http_secure_link_module --with-http_degradation_module --with-http_stub_status_module && make && make install
16. ADD index.html /usr/local/nginx/html 
17. VOLUME /usr/local/nginx/html 
18. ENV PATH /usr/local/nginx/sbin:$PATH
19. EXPOSE 80/tcp 
20. ENTRYPOINT ["nginx"]
21. CMD ["-g","daemon off;"]

构建镜像

docker build -t centos7:nginx .

运行容器

docker run -d --name nginx -p 8080:80 centos7:nginx

访问即可

http://IP:8080

二,详细介绍使用的模块

1. #基准镜像
2. FROM centos:7
3. #作者信息
4. LABEL version="nginx v1"
5. LABEL "emill"="243254384@qq.com"
6. #调整系统时间差
7. RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
8. #工作目录
9. WORKDIR /usr/local/src/ 
10. #定义环境变量
11. ENV NG_VERSION nginx-1.21.0 
12. #安装epel仓库
13. RUN yum -y install epel-release 
14. #安装wget
15. RUN yum -y install wget 
16. #下载nginx文件并解压
17. RUN wget http://nginx.org/download/$NG_VERSION.tar.gz && tar xzvf $NG_VERSION.tar.gz 
18. #安装编译依赖包
19. RUN yum install -y gcc gcc-c++ glibc make autoconf openssl openssl-devel && yum install -y pcre-devel libxslt-devel gd-devel GeoIP GeoIP-devel GeoIP-data
20. #清理仓库
21. RUN yum clean all 
22. #创建nginx用户
23. RUN useradd -M -s /sbin/nologin nginx 
24. #切换工作目录
25. WORKDIR /usr/local/src/$NG_VERSION
26. #编译安装nginx
27. RUN ./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-file-aio --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_xslt_module --with-http_image_filter_module --with-http_geoip_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_auth_request_module --with-http_random_index_module --with-http_secure_link_module --with-http_degradation_module --with-http_stub_status_module && make && make install
28. #复制测试页面到容器中
29. ADD index.html /usr/local/nginx/html 
30. #设置容器中要挂在到宿主机的目录
31. VOLUME /usr/local/nginx/html 
32. #设置sbin环境变量
33. ENV PATH /usr/local/nginx/sbin:$PATH
34. #暴露80端口
35. EXPOSE 80/tcp 
36. ENTRYPOINT ["nginx"]
37. CMD ["-g","daemon off;"]
38. #当ENTRYPOINT和CMD连用时,CMD的命令是ENTRYPOINT命令的参数,两者连用相当于nginx -g "daemon off;"而当一起连用的时候命令格式最好一致(这里选择的都是json格式的是成功的,如果都是sh模式可以试一下)
1.FROM

功能为指定基础镜像,并且必须是第一条指令。 如果不以任何镜像为基础,那么写法为:FROM scratch。 同 时意味着接下来所写的指令将作为镜像的第一层开始

2.RUN

功能为运行指定的命令

注意:多行命令不要写多个RUN,原因是Dockerfile中每一个指令都会建立一层. 多少个RUN就构建了多 少层镜像,会造成镜像的臃肿、多层,不仅仅增加了构件部署的时间,还容易出错。 RUN书写时的换行 符是\

3.CMD

功能为容器启动时要运行的命令

注意:补充细节:这里边包括参数的一定要用双引号,就是",不能是单引号。千万不能写成单引号。 原因是参数传递后,docker解析的是一个JSON array

4.RUN和CMD的区别

不要把RUN和CMD搞混了。 RUN是构件容器时就运行的命令以及提交运行结果 CMD是容器启动时执行的命 令,在构件时并不运行,构件时紧紧指定了这个命令到底是个什么样子

5.LABEL

功能是为镜像指定标签,为镜像写一些注释信息

但是并不建议这样写,最好就写成一行,如太长需要换行的话则使用\符号 如下:

注意:LABEL会继承基础镜像种的LABEL,如遇到key相同,则值覆盖

6.EXPOSE

功能为暴漏容器运行时的监听端口给外部 但是EXPOSE并不会vim 使容器访问主机的端口 如果想使得容器与主 机的端口有映射关系,必须在容器启动的时候加上 -P参数

注意:如果在端口号后面加/tcp,默认为tcp协议,如果需要UDP端口需要添加/udp

7.ENV

功能为设置环境变量

8.ADD

一个复制命令,把文件复制到镜象中。 如果把虚拟机与容器想象成两台linux服务器的话,那么这个命令就类似 于scp,只是scp需要加用户名和密码的权限验证,而ADD不用。

注意:尽量不要把写成一个文件夹,如果是一个文件夹了,复制整个目录的内容,包括文件系统元数据

9.WORKDIR

设置工作目录,对RUN,CMD,ENTRYPOINT,COPY,ADD生效。如果不存在则会创建,也可以设置多次

10.VOLUME

可实现挂载功能,可以将内部文件夹挂载到外部

11.ENTRYPOINT

该命令与CMD类似,用于执行命令使用,还可以与CMD命令一起拼合使用

它与CMD的区别:  相同点:只能写一条,如果写多条,那么只有最后一条生效

不同点:CMD在创建容器时,在后面添加其他的CMD指令,CMD会被覆盖,但是ENTRYPOINT不会被覆盖,如果两个同时使用,CMD会变成ENTRYPOINT的参数

目录
相关文章
|
2月前
|
应用服务中间件 Linux nginx
Docker镜像-手动制作yum版nginx镜像
这篇文章介绍了如何手动制作一个基于CentOS 7.6的Docker镜像,其中包括下载指定版本的CentOS镜像,创建容器,配置阿里云软件源,安装并配置nginx,自定义nginx日志格式和web页面,最后提交镜像并基于该镜像启动新容器的详细步骤。
161 21
Docker镜像-手动制作yum版nginx镜像
|
1月前
|
前端开发 应用服务中间件 nginx
docker运行nginx镜像
这篇文章详细说明了如何在Docker中部署并运行Nginx服务,包括拉取镜像、配置文件的挂载以及容器的启动配置。
228 0
docker运行nginx镜像
|
2月前
|
应用服务中间件 nginx Docker
Docker镜像-基于DockerFile制作编译版nginx镜像
这篇文章介绍了如何基于Dockerfile制作一个编译版的nginx镜像,并提供了详细的步骤和命令。
417 17
Docker镜像-基于DockerFile制作编译版nginx镜像
|
2月前
|
应用服务中间件 Linux nginx
Docker镜像-基于DockerFile制作yum版nginx镜像
本文介绍了如何使用Dockerfile制作一个基于CentOS 7.6.1810的yum版nginx镜像,并提供了详细的步骤和命令。
134 20
|
3月前
|
应用服务中间件 Linux 网络安全
2022年超详细在CentOS 7上安装Nginx方法(源码安装)
这篇文章提供了在CentOS 7系统上通过源码安装Nginx的详细步骤,包括从官网下载Nginx源码包、上传至虚拟机、解压、删除压缩包、编译安装前的配置、安装PCRE库(因为Nginx使用PCRE库解析正则表达式)、安装zlib和OpenSSL库(用于支持HTTPS协议)、重新编译Nginx、安装后启动Nginx服务、关闭服务、修改默认端口、以及重启服务测试等步骤。文章还提供了相关命令和操作截图,帮助用户更好地理解和执行安装过程。
2022年超详细在CentOS 7上安装Nginx方法(源码安装)
|
2月前
|
应用服务中间件 Linux nginx
Nginx镜像支持哪些版本?
Nginx镜像支持哪些版本?
266 1
|
6月前
|
应用服务中间件 nginx
蓝易云 - 编写Dockerfile制作Web应用系统nginx镜像
这是一个基本的例子,你可能需要根据自己的应用进行调整。例如,你可能需要添加更多的配置,或者使用不同的Nginx版本。
88 2
|
6月前
|
JavaScript Docker 容器
vue打Docker镜像动态获取IP-nginx做的web服务
vue打Docker镜像动态获取IP-nginx做的web服务
55 0
|
25天前
|
应用服务中间件 BI nginx
Nginx的location配置详解
【10月更文挑战第16天】Nginx的location配置详解