首先以下是一些环境信息
[root@dockertest opt]# docker info
Server Version: 19.03.13
Storage Driver: overlay2
Backing Filesystem: xfs
Kernel Version: 3.10.0-957.el7.x86_64
Operating System: CentOS Linux 7 (Core)
OSType: linux
Architecture: x86_64
CPUs: 4
Total Memory: 1.777GiB
我的Dockerfile和niginx源码包都在/opt目录下
[root@dockertest opt]# ls
containerd Dockerfile nginx-1.12.2.tar.gz rh
以下是Dockerfile内容
[root@dockertest opt]# vim Dockerfile
FROM centos:7 #基于centos7系统构建
LABEL MAINTAINER='s******e' #指定元数据,作者、版本等
RUN yum install -y pcre-devel wget net-tools gcc zlib zlib-devel make openssl-devel #nginx和make需要的一些依赖包
RUN useradd -r -M -s /sbin/nologin nginx #创建系统用户nginx,-r表示创建系统用户,限制uid和gid范围
ADD nginx-1.12.2.tar.gz /opt #解压缩源码包到/opt下
WORKDIR /opt/nginx-1.12.2 #切换工作目录为/opt/nginx-1.12.2
RUN ./configure --prefix=/usr/local/nginx --with-http_ssl_module #配置nginx,这里指定安装目录和ssl模块,模块根据具体需求
RUN make&&make install #编译安装
WORKDIR /usr/local/nginx #指定容器的默认工作目录/usr/local/nginx,其实又切换了一次目录
EXPOSE 80 #声明容器端口为80,这里只是声明,启动容器的时候需要指定具体暴露端口
CMD ["/usr/local/nginx/sbin/nginx","-g","daemon off;"]
这里重点说下CMD这里
对于nginx来说,如果仅仅安装完之后执行/usr/local/nginx/sbin/nginx让他启动,他启动完之后就退出,容器不会运行,加了-g daemon off;之后就是不让他在后台运行,那么容器就不会退出,注意off后不要少了分号
如果一定要写CMD ["/usr/local/nginx/sbin/nginx"]
可以用以下方式启动容器
docker run -p 80:80 -d nginx:3.0 /usr/local/nginx/sbin/nginx -g "daemon off;"
开始构建(注意最后有个.,省略一大段构建过程,成功会有successfully)
[root@dockertest opt]# docker build -t nginx:3.0 .
查看镜像
[root@dockertest opt]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx 3.0 f6fc2bb76200 27 minutes ago 438MB
centos 7 8652b9f0cb4c 7 months ago 204MB
运行容器
[root@dockertest opt]# docker run -p 80:80 -d nginx:3.0
0f146fe7989561e11ab35ce8a8082136ed971dfbb8c342252252558345e409b8
查看容器运行状态
[root@dockertest opt]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0f146fe79895 nginx:3.0 "/usr/local/nginx/sb…" About a minute ago Up About a minute 0.0.0.0:80->80/tcp
宿主机访问主页