阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

使用Dockerfile构建Nginx镜像

430次阅读
没有评论

共计 4573 个字符,预计需要花费 12 分钟才能阅读完成。

docker 构建镜像的方法:commit、dockerfile

1、使用 commit 来构建镜像:

commit 是基于原有镜像基础上构建的镜像,使用此方法构建镜像的目的:保存镜像里的一些配置信息和修改的信息。相当于一个镜像的快照。

2、使用 dockerfile 来构建镜像:

dockerfile 是快速构建所需(自定义)镜像。

——————————————————————————–

dockerfile 的指令:

FROM:指定基础镜像(FROM 是必备的指令,并且必须为第一条指令)。

RUN: 用来执行命令行命令。其基本格式:

shell 格式:RUN  < 命令 >,输入在 bash 环境中的命令即可,一个 dockerfile 允许使用 RUN 不得超过 127 层,所以,使用一次 RUN,使用‘\’换行,使用‘&&’执行下一条命令。一般使用此种格式;

exec 格式:RUN  <“ 可执行文件 ”, “ 参数 1 ”, “ 参数 2 ”>,此种方式像是函数调用中的格式;

COPY:  复制文件。其基本格式:

格式 1:COPY < 源路径 >…< 目标路径 >

格式 2:COPY [“< 源路径 1 >”,…..”< 目标路径 >”]

ADD: 更高级的复制文件,在 COPY 的基础上增加了一些功能,如果复制的是压缩包的话,会直接解压,而不需要在使用 RUN 解压;

CMD:容器启动命令。其基本格式:

shell 格式:CMD < 命令 >

exec 格式:CMD [“ 可执行文件 ”, “ 参数 1 ”, “ 参数 2 ″…]

参数列表格式:CMD [“参数 1”,“参数 2”…],在指定了 ENTRYPOINT 指令后,用 CMD 指定具体的参数

ENTRYPOINT: 入口点。其基本格式分为 exec 和 shell,

ENTRYPOINT 的目的和 CMD 一样,都是在指定容器启动程序及参数。ENTRYPOINT 在运行中可以替代,不过比 CMD 繁琐,需要通过 docker run 的参数 –entrypoint 来指定。当指定了 ENTRYPOINT 后,CMD 的含义就发生了改变,不在是直接运行其命令,而是将 CMD 的内容作为参数传递给 ENTRYPOINT 指令。其执行时就变成了:<ENTRYPOINT> “<CMD>”

ENV:设置环境变量。(都可以使用这里使用的变量)其基本格式:

格式 1:ENV <key> <value>

格式 2:ENV <key1>=<value1> <key2>=<value>…

ARG: 构建参数。构建参数和 ENV 的效果一样,都是设置环境变量,所不同的是 ARG 所构建的环境变量在将来容器运行时是不存在的。其基本格式:

格式 1:ARG < 参数名 > [=< 默认值 >]

格式 2:该默认值可以在构建命令 docker build  中用 –build-arg < 参数名 >=< 值 > 来覆盖

VOLUME: 定义匿名卷。其基本格式:

格式 1:VOLUME [“< 路径 1 >”, “< 路径 2 >”…]

格式 2:VOLUME < 路径 >

EXPOSE:  暴露端口。EXPOSE 指令是声明运行时容器所提供的端口,在启动容器时不会在因为这个声明而开启端口。其基本格式:

格式 1:EXPOSE < 端口 1 > [< 端口 2 >…]

WORKDIR:指定工作目录。其基本格式:

格式 1:WORKDIR < 工作目录路径 >

USER:指定当前用户。USER 是帮助你切换到指定用户。其基本格式:

格式 1:USER < 用户名 >

HEALTCHECK:健康检查,判断容器的状态是否正常。其基本格式:

格式 1:HEALTCHECK [选项] CMD < 命令 >:设置检查容器健康状况的命令

格式 2:HEALTCHECK NONE:如果基础镜像有健康检查指令,使用此格式可以屏蔽掉其健康检查指令

——————————————————————————–

构建 Nginx 镜像:

创建一个目录,在该目录里编写 dockerfile:

1

2

3

4

5

[root@docker ~]# mkdir mynginx

[root@docker ~]# cd mynginx/

[root@docker mynginx]# pwd

/root/mynginx

[root@docker mynginx]#

下载 nginx 源码包到创建的目录下(mynginx 目录下):

1

[root@docker ~]# wget -P /root/mynginx/  http://nginx.org/download/nginx-1.15.2.tar.gz

编写 Dockerfile:

[root@docker mynginx]# vi Dockerfile

其内容如下:

+ View Code

运行 docker 命令构建镜像:

[root@docker mynginx]# docker build -t nginx:v3 .
Sending build context to Docker daemon  1.029MB
Step 1/7 : FROM CentOS
 —> 5182e96772bf
Step 2/7 : RUN ping -c 1 www.baidu.com
 —> Using cache
 —> 2f70f8abaf2a
Step 3/7 : RUN yum -y install gcc make pcre-devel zlib-devel tar zlib
 —> Using cache
 —> dbdda4b7ae6f
Step 4/7 : ADD nginx-1.15.2.tar.gz /usr/src/
 —> Using cache
 —> 18ace6285668
Step 5/7 : RUN cd /usr/src/nginx-1.15.2    && mkdir /usr/local/nginx    && ./configure –prefix=/usr/local/nginx && make && make install    && ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/    && nginx
 —> Using cache
 —> 99629488ede9
Step 6/7 : RUN rm -rf /usr/src/nginx-1.15.2
 —> Using cache
 —> 869fbad71879
Step 7/7 : EXPOSE 80
 —> Using cache
 —> 384bed72ea6f
Successfully built 384bed72ea6f
Successfully tagged nginx:v3

输出两个 Successfully 即为构建成功!

启动自定义镜像:

使用 docker images 查看构建的镜像:

使用 Dockerfile 构建 Nginx 镜像

启动自定义的镜像:

[root@docker ~]# docker run -d -p 80:80 –name nginx nginx:v3
4ac935e955b1c3ac49eed68f3372f3e96a8934fd8ccf4614afa3d7c29eb96c08
[root@docker ~]# docker ps -a
CONTAINER ID        IMAGE              COMMAND            CREATED            STATUS                    PORTS              NAMES
4ac935e955b1        nginx:v3            “/bin/bash”        3 seconds ago      Exited (0) 2 seconds ago                      nginx

注:这时,你无论怎么启动这个容器,它还是一直处于 exited 状态。

经过各种解决,最终,终于知道问题出在了哪。原来容器启动时,它是在后台对应着一个线程启动的,它在启动时是已经启动了,但它执行完命令后,就退出了,并没有在后台运行着,所以使用 -dit 参数让它在后台运行即可。

[root@docker ~]# docker run -dit -p 80:80 –name nginx nginx:v3
ecaafe1190447878b98dfb0198e92439db60ff7dab57a1674e0e9e7282a9c858
[root@docker ~]# docker ps -a
CONTAINER ID        IMAGE              COMMAND            CREATED            STATUS              PORTS                NAMES
ecaafe119044        nginx:v3            “/bin/bash”        3 seconds ago      Up 2 seconds        0.0.0.0:80->80/tcp  nginx

然而 …….

此时又出现了问题,它虽然起来了,但 nginx 的 web 网页界面访问不了,显示拒绝连接!!!!

[root@docker ~]# curl 192.168.100.22
curl: (7) Failed connect to 192.168.100.22:80; 拒绝连接
[root@docker ~]# elinks –dump 192.168.100.22
ELinks: 拒绝连接

然后,又经过问百度,FQ 看谷歌,终于找到了问题的所在。原来只要使用 exec 进入到容器里启动 nginx 就可以了。

[root@docker ~]# docker exec -it nginx bash
[root@ecaafe119044 /]# nginx
[root@ecaafe119044 /]# exit
exit

[root@docker ~]# curl 192.168.100.22
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href=”http://nginx.org/”>nginx.org</a>.<br/>
Commercial support is available at
<a href=”http://nginx.com/”>nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

这样!Nginx 镜像就构建成功了!

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计4573字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19351
评论数
4
阅读量
7993401
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
升级自动部署更新SSL证书系统、申请godaddy的APIKEY

升级自动部署更新SSL证书系统、申请godaddy的APIKEY

升级自动部署更新 SSL 证书系统、申请 godaddy 的 APIKEY 公司之前花钱购买的 ssl 证书快...
小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比 星哥玩云,带你从小白到上云高手。今天咱们就来聊聊——什...
每天一个好玩的网站-手机博物馆-CHAZ 3D Experience

每天一个好玩的网站-手机博物馆-CHAZ 3D Experience

每天一个好玩的网站 - 手机博物馆 -CHAZ 3D Experience 一句话介绍:一个用 3D 方式重温...
一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸 前言 作为天天跟架构图、拓扑图死磕的...
星哥带你玩飞牛NAS-16:不再错过公众号更新,飞牛NAS搭建RSS

星哥带你玩飞牛NAS-16:不再错过公众号更新,飞牛NAS搭建RSS

  星哥带你玩飞牛 NAS-16:不再错过公众号更新,飞牛 NAS 搭建 RSS 对于经常关注多个微...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
每天一个好玩的网站-手机博物馆-CHAZ 3D Experience

每天一个好玩的网站-手机博物馆-CHAZ 3D Experience

每天一个好玩的网站 - 手机博物馆 -CHAZ 3D Experience 一句话介绍:一个用 3D 方式重温...
把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地

把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地

把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地 大家好,我是星哥,今天教大家在飞牛 NA...
开源MoneyPrinterTurbo 利用AI大模型,一键生成高清短视频!

开源MoneyPrinterTurbo 利用AI大模型,一键生成高清短视频!

  开源 MoneyPrinterTurbo 利用 AI 大模型,一键生成高清短视频! 在短视频内容...
三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

  三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Andr...
你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你 为什么要用宝塔跑分? 宝塔跑分其实就是对 CPU、内存、磁盘、IO 做...