什么是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镜像
ingress-nginx-controller-v1.2.0_daemonset用到的镜像,免费下载
而nginx-rtmp-module则是一个额外的Nginx模块,它增加了对Real-Time Messaging Protocol (RTMP)的支持,使Nginx能够作为RTMP服务器接收并分发直播流。 1. **HTTP FLV 模块详解** HTTP FLV模块使得Nginx可以处理FLV...
nginx_1.16.1镜像
2. nginx-rtmp-module是一个扩展模块,使Nginx支持RTMP协议,用于处理实时流媒体。 3. RTMP是一种实时通信协议,常用于视频直播和点播服务。 4. Windows 7和Visual Studio 2015是开发和编译Nginx的平台和工具,适合...
-创建dockerfile编写tomcat - 使用dockerfile使用yum安装apache - 使用dockerfile安装nginx - 使用dockerfile安装mysql
arm 架构 docker运行nginx镜像包,arm 架构 docker运行nginx镜像包,arm 架构 docker运行nginx镜像包,arm 架构 docker运行nginx镜像包,arm 架构 docker运行nginx镜像包,arm 架构 docker运行nginx镜像包,arm 架构...
已编译好的nginx-http-flv-molule(windows...在网上查找半天都只有教程,没有可免费下载的版本,深知没有积分遍地找资源的痛苦,无奈之下只好自己按照教程一步一个坑编译出来的,供大家免费下载使用。(无毒放心使用)
nginx-php-composer Dockerfile使用PHP,Composer以及最新版本的NGINX和PHP构建映像。 该Docker容器正在开发中。学分此图像在很大程度上受图像的影响。 它不是分支的主要原因是可能在我们的用例中引入了特定的更改。
创建一个新的 Nginx 源代码目录,然后进入该目录: ```bash mkdir nginx-source cd nginx-source ``` 下载 Nginx 的最新稳定版源码,并解压: ```bash wget http://nginx.org/download/nginx-1.21.x.tar.gz tar -...
nginx-gunicorn-flask, 用于 Nginx Gunicorn Flask的Dockerfile nginx-gunicorn-flask这个库包含构建 Nginx Gunicorn Flask的Docker 图像所必需的文件。基本 Docker 映像ubuntu: 12.04安装安装 Docker 。从 D
通过dockerfile将nginx、前端和后端封装成一个镜像文章所需要的nginx压缩包
nginx.tar-Nginx镜像,导入docker直接使用
Nginx-RTMP是Nginx的一个扩展模块,由Adobe Systems开发,用于支持Real-Time Messaging Protocol (RTMP)。RTMP是一种协议,常用于在线流媒体传输,如视频直播服务。Nginx-RTMP模块允许Nginx接收来自Flash Player或...
`nginx-http-flv-module`是Nginx的一个第三方模块,由张洪君开发,用于处理FLV格式的流媒体数据。通过这个模块,Nginx可以支持RTMP协议,实现实时流媒体的推拉流,为Flash Player和其他支持RTMP的客户端提供服务。...