centos7中dockerfile方式安装nginx镜像 + 解决报错
记录一下我曲折的安装镜像之旅(扶额哭),报错5秒钟,改错三小时。看了很多网上的教程,但我用了 都或多或少有些问题,所以顺便总结记录一个避坑的步骤。我使用的是centos7,已经装好了docker,使用dockerfile安装nginx 1.17.1镜像目录安装和启动步骤1.安装centos基础镜像(或Ubuntu)(可略过)2.编辑Dockerfile内容,找一个位置,创建并编...
记录一下我曲折的安装镜像之旅(扶额哭),报错5秒钟,改错三小时。看了很多网上的教程,但我用了 都或多或少有些问题,所以顺便总结记录一个避坑的步骤。
我使用的是centos7,已经装好了docker,使用dockerfile安装nginx 1.17.1镜像
目录
2.编辑Dockerfile内容,找一个位置,创建并编辑Dockerfile,内容如下。
3.在终端中,进入Dockerfile所在的目录,运行如下命令,利用Dockerfile构建镜像
安装和启动步骤
-
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命令,可以查看是否启动成功并运行正常。如下,则运行正常。
更多推荐
所有评论(0)