在 【3.2】服务器安装 Docker中 仓库搭建中已经介绍了仓库相关的搭建,
【6.1】docker基础知识 镜像中也介绍了镜像相关的使用,包括从仓库中查询拉取镜像,推送新镜像的相关操作。
接下来看下构建镜像
构建Docker镜像有以下两种方法:
使用docker commit命令。
使用docker build命令和 Dockerfile 文件。
docker commit 在 【3.12】服务器安装 Docker中安装与配置 Solr中介绍到 使用solr镜像启动容器然后修改ik,mysql和一些配置文件最后commit 制作成新的镜像文件。说白了就是执行中的容器经过一些修改,为了保留这些修改,将容器实例化为镜像的过程。docker commit 就是将这些修改操作变成镜像的一部分,如果使用新的镜像启动容器,那么这些修改依然是生效的。
docker build 是构建容器的一种方法,搭配Dockerfile可以快速完成镜像的修改创建。使用docker build 必须要会Dockerfile的编写,这里参照https://www.cnblogs.com/panwenbin-logs/p/8007348.html讲解,以下是一个完整的例子
# This my first nginx Dockerfile
# Version 1.0
# Base images 基础镜像
FROM centos
#MAINTAINER 维护者信息
MAINTAINER wang
#ENV 设置环境变量
ENV PATH /usr/local/nginx/sbin:$PATH
#ADD 文件放在当前目录下,拷过去会自动解压
ADD nginx-1.21.6.tar.gz /usr/local/
ADD epel-release-latest-7.noarch.rpm /usr/local/
#RUN 执行以下命令
RUN rpm -ivh /usr/local/epel-release-latest-7.noarch.rpm
RUN yum install -y wget lftp gcc gcc-c++ make openssl-devel pcre-devel pcre && yum clean all
RUN useradd -s /sbin/nologin -M www
#WORKDIR 相当于cd
WORKDIR /usr/local/nginx-1.8.0
RUN ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-pcre && make && make install
RUN echo "daemon off;" >> /etc/nginx.conf
#EXPOSE 映射端口
EXPOSE 80
#CMD 运行以下命令
CMD ["nginx"]
按照顺序讲解下
FROM
基于那个镜像修改的,必须位于第一位置出现
MAINTAINER
是进行描写维护者信息的。一般出现在第二位置。
ENV
设置环境变量,
ADD
下载文件,如果文件时tar压缩格式,会自动解压缩。
COPY
和ADD类似 ,COPY仅能从主机上复制文件或文件夹。
WORKDIR
工作目录,相当于cd。之后的命令都会在这个目录下执行。
RUN
执行命令,RUN有两种写法,一种是 RUM a b
一种是 RUN ["a","b"]
参照:https://blog.csdn.net/wuce_bai/article/details/88997725
CMD
执行命令,与RUN类似都是执行命令,区别在于CMD是容器正常启动时运行的命令,所以CMD 一般在最后出现,且只有最后一个CMD生效。docker run 的时候可以被替换掉。
支持三种格式
CMD ["executable","param1","param2"] 使用 exec 执行,推荐方式;
CMD command param1 param2 在 /bin/sh 中执行,提供给需要交互的应用;
CMD ["param1","param2"] 提供给 ENTRYPOINT 的默认参数;
ENTRYPOINT
与CMD类似,在容器启动时运行,只能有一条命令生效,区别在于不能被替换掉可以传递参数,可以搭配CMD使用
两种格式:
ENTRYPOINT ["executable", "param1", "param2"]
ENTRYPOINT command param1 param2(shell中执行)。
LABEL
用于为镜像添加元数据,例如LABEL key=value key1=value1
推荐所有的数据写在一条
EXPOSE
对外暴露端口通过-P 或-p
EXPOSE 80 443
EXPOSE 8080
EXPOSE 11211/tcp 11211/udp
VOLUME
用于指定持久化目录 格式VOLUME ["/path/to/dir"]
USER
指定运行容器时的用户名或 UID
ARG
用于指定传递给构建运行时的变量,格式ARG <name>[=<default value>]
ONBUILD
用于设置镜像触发器。当所构建的镜像被用做其它镜像的基础镜像,该镜像中的触发器将会被触发。ONBUILD 本次不会被触发。
编写完Dockerfile 使用build就可以构建新镜像了
docker build -t image-name:image-version DockerfilePath
例如 docker build -t solr-ik-mysql:0.0.1 .
点波关注 系统搭建(docker)
网友评论