centos7中dockerfile方式安装nginx镜像 + 解决报错

记录一下我曲折的安装镜像之旅(扶额哭),报错5秒钟,改错三小时。看了很多网上的教程,但我用了 都或多或少有些问题,所以顺便总结记录一个避坑的步骤。

我使用的是centos7,已经装好了docker,使用dockerfile安装nginx 1.17.1镜像

目录

安装和启动步骤

1.安装centos基础镜像(或Ubuntu)(可略过)

2.编辑Dockerfile内容,找一个位置,创建并编辑Dockerfile,内容如下。

3.在终端中,进入Dockerfile所在的目录,运行如下命令,利用Dockerfile构建镜像

4.运行镜像的对应容器。

nginx配置启动

1.进入容器内

2.启动nginx。


安装和启动步骤

  • 1.安装centos基础镜像(或Ubuntu)(可略过)

先解释一下,为啥本来在centos里,却还要在docker里安装个centos镜像;因为①要使nginx在操作系统的基础下运行,②且在使用dockerfile方式时,文件内容中开头通常包含一句“FROM 基础镜像”,所以这里就需要再有一个镜像。

两种方式,

一种是可以直接拉取centos(命令如下),

或者,现在先不加,等会运行Dockerfile文件内容时,令其自动下载(那么本步骤跳过)

docker pull centos:latest
#冒号后是版本,不写默认则为最新版本
  • 2.编辑Dockerfile内容,找一个位置,创建并编辑Dockerfile,内容如下。

# 文件名Dockerfile,将以下内容直接写到Dockerfile里。(没有后缀名,注意名字不可以改)

# 如果你前面建立了centos的基础镜像,那么使用FROM 基础镜像名
# 刚才跳过了第一步,还没有对应基础镜像
# 可以直接使用FROM centos(但这种方式是从官网下载内容,太慢了,动不动就timeout)
# 如果这样还是timeout,可以使用 FROM docker.io/centos
# 当然我是前面两种写法都timeout了,所以我用了网易的源,如下
FROM hub.c.163.com/public/centos:latest

# 维护人信息
MAINTAINER newbie <newbie-w@qq.com>

#给基础镜像centos安装必备的环境
# 加上“rpm --rebuilddb &&”是为了防止数据库损坏而影响yum安装。
# 注意,比较保险的做法是有多少个yum命令,就加多少个“rpm --rebuilddb &&”在yum前面。
# 另外yum install一定要安装的是pcre,zlib,net-tools,make,gcc,wget,tar及其相关内容
RUN rpm --rebuilddb && yum install -y autoconf automake make wget proc-devel net-tools zlib zlib-devel make gcc  g++ openssl-devel pcre pcre-devel tar

# 在线获取nginx压缩包(也可以在本地系统(centos)里先下载压缩包,再ADD命令将包加入到基础镜像/usr/src目录中)
RUN wget http://nginx.org/download/nginx-1.17.1.tar.gz

# 解压到当前目录
RUN tar -zxvf nginx-1.17.1.tar.gz

# 设置环境
WORKDIR nginx-1.17.1

# 配置nginx
RUN ./configure --prefix=/usr/local/nginx && make && make install
# RUN rm -rf /usr/src/nginx

# 设置环境
WORKDIR /usr/local/nginx

#http
EXPOSE 80           

#https
EXPOSE 443              

CMD ["nginx", "-g", "daemon off;"]
  • 3.在终端中,进入Dockerfile所在的目录,运行如下命令,利用Dockerfile构建镜像

docker build -t 镜像名(自己起):标记号(通常即版本号,也可随便起)

如果每行都运行成功,出现如下successfully的语句,那么恭喜,镜像已成功安装。此时可以通过docker images命令,查看构建好的docker。

  • 4.运行镜像的对应容器。

docker run -p 8081:80 --name test_nginx -it 124:1.17 /bin/bash
# -p 将对应的8081端口映射成80端口,通过在本机centos访问8081端口,则会自动映射到基础镜像centos的80端口。
#--name 后面加给容器的名字
#-it 后面加上对应的镜像
#另外注意加上/bin/bash

一般来说到这一步,再通过本机系统浏览器访问localhost:8081即可。(如果不行,可尝试使用 http://本机centos ip:8081)。

注意,如果此时仍无法访问,有可能是nginx未启动(本来我以为自己安装还是有问题,对代码命令改改改,这块花了不少时间TAT。后来排除了安装错误的可能,一顿操作无效后,想到问题可以被简化为 centos下配置启动nginx或nginx安装的问题),如果直接输入nginx无法访问,解决步骤见nginx配置启动

curl: (7) Failed to connect to ::1: Network is unreachable

(运行命令curl localhost:8081的报错)

nginx配置启动

  • 1.进入容器内

首先通过刚才前面的步骤,容器已运行,下面为我的运行命令情况,在[]内能看到,当前系统名变为了6d7278eb8589(我的容器id)。

[root@6d7278eb8589 /]# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  nginx-1.17.1  nginx-1.17.1.tar.gz  opt  proc  root  sbin  selinux  srv  sys  tmp  usr  var
[root@6d7278eb8589 /]# cd nginx-1.17.1
[root@6d7278eb8589 nginx-1.17.1]# ls
CHANGES  CHANGES.ru  LICENSE  Makefile  README  auto  conf  configure  contrib  html  man  objs  src
[root@6d7278eb8589 nginx-1.17.1]# ./configure

如果没进入容器内,使用如下命令

# 首先看一下构建的容器id,刚才启动了,直接docker ps即可查看。
docker ps

# 然后进入容器
docker attach 容器id

#上面这句也可以替换为
docker exec -it 容器名 /bin/bash

进入容器,会发现终端的[]中系统名变为容器id。进入nginx所在目录。找到configure文件。终端中运行 ./configure。此时会出现一串组件的审查检测,找到not found的,看一看,是否是必要的pcre、zlib等,如果是,需要yum install 或是apt-get install安装一下;不是很重要的组件的话,可以先忽略。

  • 2.启动nginx。

根据如下指令,找到nginx文件夹(前面Dockerfile设置的环境),进入/sbin文件夹,运行./nginx,启动nginx。

[root@6d7278eb8589 nginx-1.17.1]# cd /usr/local/nginx
[root@6d7278eb8589 nginx]# ls
conf  html  logs  sbin
[root@6d7278eb8589 nginx]# cd sbin
[root@6d7278eb8589 sbin]# ls
nginx  nginx.old
[root@6d7278eb8589 sbin]# ./nginx

通过curl http://localhost命令,可以查看是否启动成功并运行正常。如下,则运行正常。

全部评论

相关推荐

咦哟,从去年八月份开始长跑,两处实习转正都失败了,风雨飘摇,终于拿到offer了更新一下面试记录:秋招:多部门反复面试然后挂掉然后复活,具体问了啥已经忘了,只是被反复煎炸,直至焦香😋春招:base北京抖音hr打来电话说再次复活,准备面试,gogogo北京抖音一面:六道笔试题:1.promise顺序2.定义域问题3.flat展开4.并发请求5.岛屿数量算法(力扣)深度,广度都写6.忘记了,好像也是算法,难度中等其他问题多是框架底层设计,实习项目重难点~~~秒过😇北京抖音二面:三道笔试题:(为什么只有三道是因为第三道没做出来,卡住了)1.中等难度算法(忘记啥题了,应该是个数组的)2.认识js的继承本质(手写继承模式,深入js的面相对象开发)3.手写vue的响应式(卡在了watch,导致挂掉)---后知后觉是我的注册副作用函数写得有问题,有点紧张了其他题目多是项目拷打,项目亮点,对实习项目的贡献~~~第二天,挂,but立马复活转战深圳客服当天约面深圳客服一面:六道笔试题,由于面过太多次字节,面试官叫我直接写,不用讲,快些写完😋,具体都是些继承,深拷贝(注意对数组对象分开处理,深层次对象,循环引用),加中等难度算法题~~~秒过深圳客服二面:口诉八股大战:大概囊括网络,浏览器渲染原理,动画优化,时间循环,任务队列等等(你能想到的简单八股通通拉出来鞭尸😋)算法题:笔试题6道:1:找出数组内重复的数,arr[0]-arr[n]内的数大小为[1-n],例如[1,2,2,3,3]返回[2,3],要求o(n),且不使用任何额外空间(做到了o(n),空间方面欠佳,给面试官说进入下一题,做不来了)2:原滋原味的继承(所以继承真滴很重要)3:力扣股票购买时机难度中等其他滴也忘记了,因为拿到offer后鼠鼠一下子就落地了,脑子自动过滤掉可能会攻击鼠鼠的记忆😷~~~秒过深圳客服三面:项目大战参与战斗的人员有:成员1:表单封装及其底层原理,使用成本的优化,声明式表单成员2:公司内部库生命周期管理成员3:第三方库和内部库冲突如何源码断点调试并打补丁解决成员4:埋点的艺术成员5:线上项目捷报频传如何查出内鬼成员6:大文件分片的风流趣事成员7:设计模式对对碰成员8:我构建hooks应对经理的新增的小需求的故事可能项目回答的比较流利,笔试题3道,都很简单,相信大家应该都可以手拿把掐😇~~~过过过无hr面后续煎熬等待几天直接hr打电话发offer了,希望大家也可以拿到自己心仪的offer
法力无边年:牛哇,你真是准备得充分,我对你没有嫉妒,都是实打实付出
查看19道真题和解析
点赞 评论 收藏
分享
MGlory:我当初有一个老师告诉我简历要写的简单,最好只一面,项目可以写核心的,进面了自然会问你的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务