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命令,可以查看是否启动成功并运行正常。如下,则运行正常。

全部评论

相关推荐

头像
不愿透露姓名的神秘牛友
03-20 10:18
点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务