什么是dockerfile?简单的说就是一个文本格式的脚本文件,其内包含了一条条的指令(Instruction),每一条指令负责描述镜像的当前层(Layer)如何构建。
下面通过一个具体的例子来学习dockerfile的写法。
新建一个dbuild文件夹,创建一个自定义的Nginx首页,逻辑很简单,显示一个自定义的图片文件train.jpg.
我想基于标准的Nginx镜像做一些修改,让Nginx支持SSL。SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层对网络连接进行加密。
为此我首先需要创建一个针对SSL的配置文件。
cat << '__EOF' > ssl.conf
server {
listen 443 ssl;
server_name localhost;
ssl_certificate /etc/nginx/ssl/nginx.crt;
ssl_certificate_key /etc/nginx/ssl/nginx.key;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}
__EOF
使用如下命令创建nginx.key和nginx.crt文件:
openssl req -x509 -nodes -newkey rsa:4096 -keyout nginx.key -out nginx.crt -days 365 -subj "/CN=$(hostname)"
一切就绪之后,下面就应该创建dockerfile了:
FROM nginx:stable
# copy the custom website into the image
COPY train.jpg /usr/share/nginx/html/
COPY index.html /usr/share/nginx/html/
# copy the SSL configuration file into the image
COPY ssl.conf /etc/nginx/conf.d/ssl.conf
# download the SSL key and certificate into the image
COPY nginx.key /etc/nginx/ssl/nginx.key
COPY nginx.crt /etc/nginx/ssl/nginx.crt
# expose the https port
EXPOSE 443
所有dockerfile第一行指令必定是FROM XXXX。
FROM的作用是指定基准镜像。该dockerfile以FROM后面指定的镜像为基础,在其上进行定制。
在 Docker Store 上有很多高质量的官方镜像,主要分为以下三大类:
-
开箱即用的服务类的镜像,比如网络服务器nginx ,也有数据库服务器诸如redis 、 mongo 、mysql 等;
-
方便开发、构建、运行各种语言应用的镜像,如 node 、 openjdk 、 python 等。
-
相对前两大类更为基础的操作系统镜像,如ubuntu 、 debian 、 centos 等
当然您如果不愿意基于这些官方已有镜像开始镜像构建,而是想从头开始,这也是可以的。Docker存在一个特殊的镜像,名为 scratch 。它是一个虚拟的概念,
表示一个空白的镜像。
直接使用FROM scratch 会让镜像体积更加小巧。
接下来的一系列copy指令都很好理解。
dockerfile开发完毕之后,执行命令:
docker build -t jerry-nginx:1.0 .
意思是基于当前目录开始构建镜像,注意末尾的.必不可少,代表“当前目录”。
通过docker build执行输出的日志可以观察到里面每一行的指令被逐行执行:
最后一行日志提示标签为jerry-nginx:1.0的景象被成功构建。
用下面的命令基于刚刚制作好的镜像运行一个容器:
docker run -d -p 443:443 -p 1082:80 jerry-nginx:1.0
基于http协议访问没有问题:
基于https访问也能正常工作:
要获取更多Jerry的原创文章,请关注公众号"汪子熙":
相关推荐
Dockerfile实战---构建SSH、Tomcat、MySQL、Nginx镜像
通过Dockerfile创建 基于Centos7.8.2003基础镜像搭建nginx-rtmp-ffmpeg流服务镜像
ingress-nginx-controller 是 Kubernetes 社区维护的一个项目,它提供了对 Ingress 资源的实现,使得可以通过定义简单的 YAML 文件来管理对外暴露的服务路由。Nginx 作为业界广泛使用的高性能反向代理服务器,其稳定...
使用docker pull命令可以将镜像拉取到本地,然后使用docker run命令创建一个容器,并在容器中安装nginx服务。在容器中,我们可以使用yum命令安装需要的依赖项,例如gcc、openssl-devel、zlib-devel等,然后上传nginx...
资源包含Dockerfile文件,可以直接构建自己的nginx镜像
nginx-ingress镜像
而nginx-rtmp-module则是一个额外的Nginx模块,它增加了对Real-Time Messaging Protocol (RTMP)的支持,使Nginx能够作为RTMP服务器接收并分发直播流。 1. **HTTP FLV 模块详解** HTTP FLV模块使得Nginx可以处理FLV...
ingress-nginx-controller-v1.2.0_daemonset用到的镜像,免费下载
arm 架构 docker运行nginx镜像包,arm 架构 docker运行nginx镜像包,arm 架构 docker运行nginx镜像包,arm 架构 docker运行nginx镜像包,arm 架构 docker运行nginx镜像包,arm 架构 docker运行nginx镜像包,arm 架构...
2. nginx-rtmp-module是一个扩展模块,使Nginx支持RTMP协议,用于处理实时流媒体。 3. RTMP是一种实时通信协议,常用于视频直播和点播服务。 4. Windows 7和Visual Studio 2015是开发和编译Nginx的平台和工具,适合...
-创建dockerfile编写tomcat - 使用dockerfile使用yum安装apache - 使用dockerfile安装nginx - 使用dockerfile安装mysql
已编译好的nginx-http-flv-molule(windows...在网上查找半天都只有教程,没有可免费下载的版本,深知没有积分遍地找资源的痛苦,无奈之下只好自己按照教程一步一个坑编译出来的,供大家免费下载使用。(无毒放心使用)
创建一个新的 Nginx 源代码目录,然后进入该目录: ```bash mkdir nginx-source cd nginx-source ``` 下载 Nginx 的最新稳定版源码,并解压: ```bash wget http://nginx.org/download/nginx-1.21.x.tar.gz tar -...
nginx-php-composer Dockerfile使用PHP,Composer以及最新版本的NGINX和PHP构建映像。 该Docker容器正在开发中。学分此图像在很大程度上受图像的影响。 它不是分支的主要原因是可能在我们的用例中引入了特定的更改。
运行容器 docker run --name nginx-test -p 8080:80 -d nginx 参数说明: --name nginx-test:容器名称。 -p 8080:80: 端口进行映射,将本地 8080 端口映射到容器内部的 80 端口。 -d nginx: 设置容器在在后台...
nginx-gunicorn-flask, 用于 Nginx Gunicorn Flask的Dockerfile nginx-gunicorn-flask这个库包含构建 Nginx Gunicorn Flask的Docker 图像所必需的文件。基本 Docker 映像ubuntu: 12.04安装安装 Docker 。从 D
什么是NGINX开源? NGINX(发音为“ engine-x”)是用于HTTP,HTTPS,SMTP,POP3和IMAP协议的开源反向代理服务器,以及负载平衡器,HTTP缓存和Web服务器(原始服务器)。 TL; DR $ docker run --name nginx ...
kubernetes的quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.20.0镜像包,版本为v0.20.0。文件先解压,之后得到nginx-ingress-controller.0.20.0.tar
通过dockerfile将nginx、前端和后端封装成一个镜像文章所需要的nginx压缩包
nginx_1.16.1镜像