下面我们来制作一个Nginx的镜像,通过编译安装方式来完成。
重新制作一个基础镜像
文件内容
# Version: 0.0.1 # 指定使用哪个基础镜像 FROM centos:6.6 # 说明该镜像的制作者和联系方式 MAINTAINER Rex.chen rex.chen@aaa.com #设置标签,不是必须的只是为了说明里面的版本查看起来方便 LABEL Discrition="更换了epel源,并安装了相应库和组件" #备份系统默认的epel源,并设置新的EPEL源 RUN cd /etc/yum.repos.d/ RUN ["mv","/etc/yum.repos.d/CentOS-Base.repo","/etc/yum.repos.d/CentOS-Base.repo.bak"] COPY ./Centos-6.repo /etc/yum.repos.d/CentOS-Base.repo RUN yum makecache # 安装必要库和组件 RUN yum update -y && yum groupinstall -y 'Development Tools' && yum -y install wget \ libmcrypt-devel mhash-devel libxslt-devel \ libjpeg libjpeg-devel libpng libpng-devel \ freetype freetype-devel libxml2 libxml2-devel \ zlib zlib-devel glibc glibc-devel glib2 glib2-devel \ bzip2 bzip2-devel ncurses ncurses-devel \ curl curl-devel e2fsprogs e2fsprogs-devel \ krb5 krb5-devel libidn libidn-devel openssl \ openssl-devel openldap-devel # RUN yum clean all
运行下面的命令制作镜像
我这里使用了-f来指定dockerfile
docker p_w_picpath build -t mycentos6:1.0 -f ./buildProImange .
制作Nginx镜像
基于上面的基础镜像来制作一个Nginx的基础镜像,我们通过编译安装的方式来完成。
看一下制作Nginx镜像的Dockerfile怎么写的:
# Version: 0.0.1 # 指定使用哪个基础镜像 FROM mycentos6:1.0 # 说明该镜像的制作者和联系方式 MAINTAINER Rex.chen rex.chen@aaa.com #设置标签,不是必须的只是为了说明里面的版本查看起来方便 LABEL Nginx="1.10.2" # 建立用户和组 RUN ["groupadd","-r","nginx"] RUN ["useradd","-r","-g","nginx","-s","/sbin/nologin","nginx"] # 复制安装程序到指定目录,我这里使用COPY命令只是因为我要自行解压缩 ENV SOFT_DEST /usr/local/src ADD nginx/nginx-1.10.2.tar.gz $SOFT_DEST ADD nginx/openssl-1.1.0c.tar.gz $SOFT_DEST ADD nginx/zlib-1.2.11.tar.gz $SOFT_DEST ADD nginx/pcre-8.39.tar.gz $SOFT_DEST # 设置工作目录,这步可以不要 WORKDIR $SOFT_DEST # 创建必要目录 RUN ["mkdir","/var/tmp/nginx","-p"] RUN ["mkdir","/var/run/nginx","-p"] RUN ["mkdir","/var/log/nginx","-p"] RUN ["mkdir","/var/lock/nginx","-p"] # 执行编译安装,这里一定要把进入目录和./configure以及后面的make和make install写在 #一起,否则会提示找不到,因为每一个命令都是一层镜像 RUN cd ./nginx-1.10.2 && ./configure \ --prefix=/usr/nginx/ \ --sbin-path=/usr/sbin/nginx \ --conf-path=/etc/nginx/nginx.conf \ --error-log-path=/var/log/nginx/error.log \ --http-log-path=/var/log/nginx/access.log \ --pid-path=/var/run/nginx/nginx.pid \ --lock-path=/var/lock/nginx/nginx.lock \ --user=nginx --group=nginx \ --with-file-aio --with-threads \ --with-http_ssl_module \ --with-http_flv_module \ --with-http_stub_status_module \ --with-http_gzip_static_module \ --with-http_v2_module \ --with-http_realip_module \ --http-client-body-temp-path=/var/tmp/nginx/client/ \ --http-proxy-temp-path=/var/tmp/nginx/proxy/ \ --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ \ --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi/ \ --http-scgi-temp-path=/var/tmp/nginx/scgi/ \ --with-openssl=/usr/local/src/openssl-1.1.0c \ --with-zlib=/usr/local/src/zlib-1.2.11 \ --with-pcre=/usr/local/src/pcre-8.39 && make && make install EXPOSE 80
制作Nginx镜像
docker p_w_picpath build -t nginx:1.0 -f ./nginxDockerfile .
上面是制作Nginx的基础镜像,下面我们就基于这个镜像来制作服务容器,因为Nginx镜像是可以重复使用的,个性化的东西要单独来做,Nginx在容器中通常是作为WEB服务器来运行的而不是反向代理。
# Version: 0.0.1 # 指定使用哪个基础镜像 FROM nginx:1.0 # 说明该镜像的制作者和联系方式 MAINTAINER Rex.chen rex.chen@aaa.com #设置标签,不是必须的只是为了说明里面的版本查看起来方便 LABEL Nginx="1.10.2" # 在容器中建立挂载点,主要用于日志文件和网页文件 VOLUME ["/var/nginx"] # 设置工作目录,不是必须的 WORKDIR /var/nginx # 拷贝nginx配置文件到容器中 ADD nginx/nginx.conf /etc/nginx/nginx.conf # 指定在容器启动时执行的命令 CMD ["/usr/sbin/nginx"]
然后你需要在宿主机上的/var/nginx中建立2个目录一个是log一个是www,www目录存放页面文件
另外Nginx需要非守护进程方式启动,你只需在配置文件中加入daemon off;即可,如下图:
下面是Nginx的日志和网页文件的配置
制作镜像
docker p_w_picpath build -t webservices:1.0 -f ./nginxSrv .
运行容器
docker run --name webSrv01 -d -p 80 -v /var/nginx/:/var/nginx/ webservices:1.0
测试连接
从本地看一下是否有日志文件呢:
我们这里用了一个新的参数就是-v,这个参数的作用就是把本地目录挂载到容器中,使用方法如下:
-v /PATH本地路径:/PATH容器路径:<ro|rw> #后面的<ro|rw>是设置读写权限,默认是可读写
这个参数后面只能挂载一个目录到容器,通过docker inspect查看,默认是读写权限
如果以后要修改网页内容,那么你只需修改/var/nginx/www目录下修改就好。
转载于:https://blog.51cto.com/littledevil/1916292