练习一下,发现几个问题。
首先是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
访问一下,没有问题