Nginx———Dockerfile

练习一下,发现几个问题。

首先是EXPOSE配置,使用-P引用dockerfile里的端口配置,会随机在本地开启一个端口用来映射,所以我个人感觉这个好像没啥用?每次创建容器还是得手动加上-p参数,是我的用法有问题么。。

然后是CMD里的命令不执行,试了好半天才找到原因,因为我先前创建容器习惯性的在最后加上/bin/bash来启动,bash会覆盖掉CMD配置从而导致nginx的启动命令不生效,我还一直以为是"daemon off;"没生效,容器启动nginx的话必须要加上这个参数的,我这个是仿照别人的例子写的把这行追加进了nginx的配置文件。

如果不使用/bin/bash的话,使用docker attach想进入容器的时候会卡住,可以用docker exec -it containerID /bin/bash方式进入容器,退出使用ctrl + 大写P + 大写Q。

这个我单独又试了下,不使用/bin/bash,哪怕不使用-d参数直接创建以交互模式一样进入不了容器,会卡在那里,只能中断,然后容器就会关闭,要再次启动下再用上面的方法进入。

# This is Nginx Dockerfile
# 镜像
FROM centos:latest
# 维护者信息
MAINTAINER tandabao

# 下载nginx并编译安装
ADD http://nginx.org/download/nginx-1.17.8.tar.gz ./
RUN useradd -M -s /sbin/nologin nginx
RUN yum -y install zlib zlib-devel openssl openssl-devel pcre pcre-devel gcc gcc-c++ make cmake && \
        tar xf nginx-1.17.8.tar.gz -C /usr/local/
WORKDIR /usr/local/nginx-1.17.8

RUN ./configure \
        --user=nginx \
        --group=nginx \
        --prefix=/usr/local/nginx \
        --sbin-path=/usr/local/nginx/bin/nginx \
        --conf-path=/usr/local/nginx/conf/nginx.conf \
        --pid-path=/usr/local/nginx/logs/nginx.pid \
        --lock-path=/usr/local/nginx/run/nginx.lock \
        --error-log-path=/usr/local/nginx/logs/error.log \
        --http-log-path=/usr/local/nginx/logs/access.log \
        --with-http_stub_status_module \
        --with-http_ssl_module
RUN make && \ 
        make install

ENV PATH /usr/local/nginx/bin:$PATH
      
# 把本地已经改好的配置文件替换进去
#COPY nginx.conf  /usr/local/nginx/conf/nginx.conf 
    
# 映射端口
EXPOSE 80
    
RUN echo "daemon off;" >> /usr/local/nginx/conf/nginx.conf
    
#CMD 运行以下命令 
CMD ["nginx"]

生成镜像

# docker build -f nginxfile -t ngx_test:v1.1 .

创建容器

扫描二维码关注公众号,回复: 9949386 查看本文章

# docker run -tid -p80:80 --name nginx ngx_test:v1.1

访问一下,没有问题

发布了60 篇原创文章 · 获赞 9 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_44697035/article/details/104479204