docker的学习历程-DockerFile自制镜像

DockerFile的指令集

注意:所有的指令都是大写

FROM 指明基础镜像
RUN 在镜像build时运行命令
COPY 复制宿主机文件到相应的容器内目录
ADD 复制宿主机文件到容器内,如果为.gz、.xz等压缩包则会自动解压
CMD 在镜像运行时执行的命令,可以覆盖前多个CMD命令
ENTRYPOINT 在镜像运行时执行的命令,可追加前面多个entrypoint命令
MAINTAINER 指明镜像作者
EXPOSE 指定容器默认暴露端口
ENV 指定镜像的环境变量,build完成后可继续引用
WORKDIR 指定工作目录
VOLUMES 挂载数据卷

Dockerfile 的指令每执行一次都会在 docker 上新建一层。所以过多无意义的层,会造成镜像膨胀过大。所以可以使用&&来节约空间

自己创建一个redis镜像
出错信息
改正后
描述
因为build只能操作上下文路径中包含的文件,所以如果需要把宿主机的文件拷贝到镜像中,需要将目标文件拷贝到上下文路径下才可拷贝到镜像

Dockerfile

FROM centos
# 添加上下文路径中的压缩包到镜像并解压
ADD redis-4.0.0.tar.gz /usr/local/
MAINTAINER <2575437457@qq.com>
#设置环境变量
ENV 	MYDIR /usr/local
# 编译安装redis
RUN cd /usr/local/redis-4.0.0 \
	&& mkdir /usr/local/redis \
	&& yum makecache \
	&& yum -y install gcc gcc-c++ kernel-devel make \
	&& make \
	&& make PREFIX=/usr/local/redis install
# 设置运行镜像后的工作目录
WORKDIR $MYDIR
# 设置镜像的默认数据卷
VOLUME ["myredis"]
# 设置默认暴露的端口号
EXPOSE 6379
CMD echo redis install successfully

开始生成docker镜像

docker build -t redis:01 .
# .代表上下文路径,build时docker会将宿主机该路径下的文件打包供build命令使用,这里使用当前路径

报错信息
报错
没有配置镜像的DNS服务,添加dns解析服务器地址
dns解析服务器地址
完成
至此完成自定义镜像的制作

注意CMD与ENTRYPOINT的区别

CMD后面的shell指令在运行容器时执行,如果运行镜像时自带有指令则会覆盖CMD指令,而ENTRYPOINT后的指令可以和用户输入的参数组成一个指令运行不会被覆盖,需要与docker run启动指令进行搭配,如果需要覆盖ENTRYPOINT指令需要在run的容器的时候接–entrypoint选项,覆盖dockerfile文件中的ENTYRPOINT后的指令。

举例

vim  dockerfile
------------
...
CMD ['/bin/bash']
------------
# 交互启动时就可以不用接参数
docker run -it image
# 如果启动的同时还在后面添加了参数则CMD指令被覆盖
docker run -it image /bin/ps
# 使用entrypoint可以配合run -it 输入的参数使用
vim dockerfile
-----------------
...
ENTRYPOINT ["ls"]
-----------------
docker run -it image -l
# 相当于 docker run -it image ls -l
# 覆盖entrypoint指令
--------------
ENTRYPOINT ["./nginx"]
--------------
docker run  -it --entrypoint="/bin/bash"  --name nginx01 mynginx:new

实例2

** 编写Dockerfile文件自制编译安装nginx的镜像

FROM centos

RUN yum install -y pcre-devel zlib-devel make gcc gcc-c++ openssl-devel \
	&& cd /root \
	&& curl -O http://mirrors.sohu.com/nginx/nginx-1.19.2.tar.gz \
	&& tar -xf nginx-1.19.2.tar.gz \
	&& cd nginx-1.19.2 \
	&& ./configure --prefix=/usr/local/nginx --with-http_realip_module --with-http_ssl_module --with-stream \
	&& make \
	&& make install
ENV MYPATH /usr/local/nginx/sbin
WORKDIR $MYPATH
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Docker是一种开源的容器化平台,它可以帮助开发者将应用程序和服务以容器的形式进行打包、分发和部署。而Gluster是一个分布式存储系统,它可以将多个服务器的存储空间整合在一起,形成一个统一的、可扩展的存储池。 CentOS是一种基于Red Hat Enterprise Linux(RHEL)的开源操作系统,它提供了稳定性和安全性,并且具备广泛的应用支持。 Dockerfile是用于构建Docker镜像的脚本文件,它可以定义容器的运行环境、设置启动命令等。 那么,docker-gluster-centos Dockerfile是指在CentOS系统上构建一个包含Gluster分布式存储系统的Docker镜像的脚本文件。 在docker-gluster-centos Dockerfile中,我们可以使用CentOS的官方镜像作为基础镜像,并在此基础上安装和配置Gluster分布式存储系统。可以通过使用适当的软件包管理工具(如yum)来安装Gluster软件包和依赖项。然后,可以使用Dockerfile中的指令来启动和配置Gluster节点、创建Gluster卷以及设置其他必要的参数和选项。 通过构建docker-gluster-centos Docker镜像,我们可以在任何支持Docker的环境中快速部署和运行Gluster分布式存储系统,而无需手动安装和配置。这样可以大大简化Gluster的部署过程,提高运维效率,并且能够实现更加轻量级、可移植和可扩展的存储解决方案。 总而言之,docker-gluster-centos Dockerfile是用于在CentOS系统上构建包含Gluster分布式存储系统的Docker镜像的脚本文件,使得Gluster的部署和运行变得更加简单、可靠和可扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值