使用Dockerfile文件制作docker镜像
Dockerfile是使用源代码构建docker的镜像,编辑一个Dockerfile,而后根据此文件制作;
docker可以自动通过读取Dockerfile中的指令,自动构建镜像。
Dockerfile是一个文本文档包含所有用户的命令,可以在命令行上调用组建一个镜像。
使用docker build命令的用户可以读取docker file中的连续指令,自动构建一个镜像。
示例使用dockerfile文件制作nginx的镜像:
#创建工作目录
#进入nginx目录,创建nginx测试页,创建dockerfile文件
1 2
| cd nginx/ vim index.html
|
首页内容
1
| <h1>docker build nginx </h1>
|
vim dockerfile
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| FROM centos:latest #基准镜像 MAINTAINER "bxw" #作者信息 WORKDIR /usr/local/src/ #工作目录 ENV NG_VERSION nginx-1.16.0 #定义环境变量 RUN yum -y install epel-release #安装epel仓库 RUN yum -y install wget && wget http://nginx.org/download/$NG_VERSION.tar.gz && tar xzvf $NG_VERSION.tar.gz #下载nginx文件并解压 #安装编译依赖包 RUN yum install -y gcc gcc-c++ glibc make autoconf openssl openssl-devel && yum install -y pcre-devel libxslt-devel gd-devel GeoIP GeoIP-devel GeoIP-data RUN yum clean all #清理仓库 RUN useradd -M -s /sbin/nologin nginx #创建nginx用户 WORKDIR /usr/local/src/$NG_VERSION #切换工作目录 #编译安装nginx RUN ./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-file-aio --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_xslt_module --with-http_image_filter_module --with-http_geoip_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_auth_request_module --with-http_random_index_module --with-http_secure_link_module --with-http_degradation_module --with-http_stub_status_module --add-module=ngx_image_thumb-master && make && make install ADD index.html /usr/local/nginx/html #复制测试页面到容器中 VOLUME /usr/local/nginx/html #设置容器中要挂在到宿主机的目录 ENV PATH /usr/local/nginx/sbin:$PATH #设置sbin环境变量 EXPOSE 80/tcp #暴露80端口 ENTRYPOINT ["nginx"] CMD ["-g","daemon off;"] #当ENTRYPOINT和CMD连用时,CMD的命令是ENTRYPOINT命令的参数,两者连用相当于nginx -g "daemon off;"而当一起连用的时候命令格式最好一致(这里选择的都是json格式的是成功的,如果都是sh模式可以试一下)
|
#dockerfile 文件内容结束
#构建镜像
1
| docker build ./ -t mynginx
|
#指明构建的根目录,有dockerfile的就是构建根目录,-t指明tag标签,执行该命令后程序会读取并执行dockerfile文件内的所有命令。下图为执行成功的结果截图。
查看镜像
#根据构建的镜像运行容器
1
| docker run --name mynginx -d -p 8123:80 mynginx
|