【3.5】docker基础知识 仓库使用/构建镜像

在 【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 [=]
ONBUILD 用于设置镜像触发器。当所构建的镜像被用做其它镜像的基础镜像,该镜像中的触发器将会被触发。ONBUILD 本次不会被触发。

编写完Dockerfile 使用build就可以构建新镜像了
docker build -t image-name:image-version DockerfilePath
例如 docker build -t solr-ik-mysql:0.0.1 .

点波关注 系统搭建(docker)

你可能感兴趣的:(【3.5】docker基础知识 仓库使用/构建镜像)