最简单的dockerfile使用教程 - 创建一个支持SSL的Nginx镜像

什么是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 上有很多高质量的官方镜像,主要分为以下三大类:

  1. 开箱即用的服务类的镜像,比如网络服务器nginx ,也有数据库服务器诸如redis 、 mongo 、mysql 等;
  2. 方便开发、构建、运行各种语言应用的镜像,如 node 、 openjdk 、 python 等。
  3. 相对前两大类更为基础的操作系统镜像,如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协议访问没有问题:

http://localhost:1082

基于https访问也能正常工作:

https://localhost:443

要获取更多Jerry的原创文章,请关注公众号"汪子熙":

原文地址:https://www.cnblogs.com/sap-jerry/p/10029823.html

时间: 2024-08-18 03:08:37

最简单的dockerfile使用教程 - 创建一个支持SSL的Nginx镜像的相关文章

「四」创建一个带 apache 服务的镜像

Apache 是世界使用排名第一的 Web 服务器软件.它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的 Web 服务器端软件.同时 Apache 音译为阿帕奇,是北美印第安人的一个部落,叫阿帕奇族,在美国的西南部.也是一个基金会的名称.一种武装直升机等等. 下面是使用 Dockerfile 来创建带 apache 服务的镜像的过程. 创建 apache 文件夹 首先,创建一个叫做 apache_ubuntu 的文件夹,用于存放我们的 Dockerfile

创建一个支持 sshd 服务的 docker 镜像

前言 当我们运行容器后,第一件会想到的事情,就是如何连接容器.一般来说,连接容器的方式大概有四种.分别是attach.exec.ssh 和 nsenter. attach 和 exec 都是 docker 自带的命令,不需要做任何配置. 这篇文章,主要尝试配置一个实现 sshd 服务的镜像.并用这个镜像生成容器,然后验证 ssh 登录的功能. 操作过程 环境说明 宿主机 : ubunt:16.04 用 Dockerfile 文件建立一个镜像 hell[email protected]:~/mys

弄了一个支持SSL的TCP客户端

近日需要做一些TCP的收发的调试,到网上去找TCP调试工具,找了好几款,发现不是功能不全就是不支持HEX,更重要的SSL也不支持,于是动手写了一款,叫TCPRunner,有以下特性: 使用异步IO方式 支持HEX显示/编辑 支持SSL连接 简单易用界面友好 整个程序才40KB大小 基于.net framework 4.5 下载:TCPRunner.7z 看看有没有人用,有必要的话我就公开代码:)

使用Windows Service Wrapper快速创建一个Windows Service 如nginx

前言 今天介绍一个小工具的使用.我们都知道Windows Service是一种特殊的应用程序,它的好处是可以一直在后台运行,相对来说,比较适合一些需要一直运行同时不需要过多用户干预的应用程序,这一类我们称之为"服务"吧 编写Windows Service其实是不难的,尤其是如果有Visual Studio的话.但是仍然是有不少童鞋觉得略显繁琐,同时,如果有一些其他的程序,我们只拿到一个exe,或者一个bat,但又想让他象服务一样运行,怎么办呢 答案就是可以使用如下的一个工具,它的名称就

Python做一个简单的web服务器,外接一个支持wsgi协议框架显示动态数据

import socket import re import sys import mini_frame # 通过外部传端口号给套接字 # tcp_port = sys.argv[1] class Mini_Wsgi(object): def __init__(self): self.tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.tcp_socket.setsockopt(socket.SOL_SOCKET

创建一个成功的App前要考虑的5个要点

在智能机时代,相比浏览网页而言,人们一般更喜欢喜欢使用手机应用.这种趋势就导致了成千上万的APP在Google Play 和 Apple Store 平台的诞生.有一些企业想要通过创建APP去提升他们的业务,其他人比如兄弟连学编程的学员也想要通过创建APP去获得收益. 移动应用的热潮激发人们都想要去开发一个自己的APP.你是不是也是其中一员呢? 你是不是想要创建一个APP但是却又不知道如何开始呢?如果是,兄弟连的小编整理的这篇文章可以指导你创建一个APP的流程. 1. 计划阶段 开始构建应用程序

【Head First Servlets and JSP】笔记7:如何创建一个全局的dog?

重定向与请求分派 “局部”参数——ServletConfig——servlet初始化参数 “全局”参数——ServletContext——上下文初始化参数 Web app的“构造器”——ServletContextListener 实战:如何创建一个全局的dog? 1.重定向与请求分派. resp.sendRedirect("http://www.cnblogs.com/xkxf/"); RequestDispatcher view = req.getRequestDispatcher

「六」创建一个带 weblogic 服务的基础镜像

Weblogic Weblogic 简介以及其在 Docker 环境下的特殊应用 WebLogic是美国Oracle公司出品的一个application server确切的说是一个基于JAVAEE架构的中间件,BEA WebLogic是用于开发.集成.部署和管理大型分布式Web应用.网络应用和数据库应用的Java应用服务器.是商业市场上主要的Java(J2EE)应用服务器软件(application server)之一,是世界上第一个成功商业化的J2EE应用服务器.目前weblogic在世界ap

转:maven2创建一个eclipse工程,设置M2_REPO

from: http://tonychanhoho.iteye.com/blog/1584324 M2_REPO是一个用来定义 maven 2仓库在硬盘中的存储位置,windows默认是C:\Users\机器名\.m2\repository.按道理安装了m2eclipse插件就会在eclipse有了相应的设置. 用maven创建一个支持eclipse的工程非常简单,在mvn的项目目录下(进入文件夹   Shift+右键进入cmd):mvn eclipse:eclipse即可. 再打开eclips