通过Dockerfile 构建自己的镜像
1. 基本语法
每行一个指令,区分大小写。
指令一般以关键字开头,后接参数。
2. 常用指令
FROM #指定镜像
MAINTAINER #维护者的信息
RUN #在临时容器里执行的操作系统命令
ADD file /path/ #把物理机file 拷贝至 镜像的指定目录 /path ADD 与 COPY 类似 但提供了更多高级功能 如解压归档文件和从 URL 下载内容
COPY file /path/ #把物理机file 复制到镜像的指定目录
ENV #指定变量
USER #指定容器内部以那个用户运行进程 指定前需要先创建用户
VOLUME #指定数据卷
EXPOSE #指定镜像容器所使用的端口,
CMD #指定镜像创建出来的容器运行什么进程
ADD 与 COPY 的对比
功能 | ADD | COPY |
---|---|---|
复制本地文件或目录 | ✅ | ✅ |
自动解压归档文件 | ✅ | ❌ |
支持从 URL 下载文件 | ✅ | ❌(需要用 RUN curl/wget 实现) |
操作更明确和简单 | ❌ | ✅ |
建议:
如果只是复制文件,推荐使用 COPY,因为它语义更明确,功能更简洁。
如果需要解压归档文件或下载外部资源,可使用 ADD
实例
自定义一个镜像
[root@master ~]# cat Dockerfile
FROM centos:latest
MAINTAINER zhen
RUN yum install -y vim
CMD ["/bin/bash"]
#使用 docker build 构建镜像
#语法如下:
docker build -t <新的镜像名> -f <指定Dockerfile文件名> <构建的目录>
[root@master ~]# docker build -t centos:7.9 -f Dockerfile .
#这里构建的新镜像名 为centos:7.9 -f 指定Dockerfile文件 . 表示当前目录
#配置内部的yum源的方法
网络源可以直接将repo文件传输至 容器内的 /etc/yum.repos.d/ 下
[root@master ~]# tar zcf repo.tar.gz /etc/yum.repos.d/*
#然后 Dockerfile 里为
RUN rm -rf /etcyum.repos.d/*
ADD repo.tar.gz /etc/yum.repos.d/
#本地源 配置
还有就是先将本地源传输至容器内部
然后写 本地源文件 repo 在传输至容器里
如下:
RUN rm -rf /etcyum.repos.d/*
COPY yum /root/
COPY local.repo /etc/yum.repos.d/
baseurl=file:///root/yum
#USER 的使用
[root@master ~]# cat Dockerfile
FROM centos:latest
MAINTAINER zhen
RUN useradd zhen #先创建
USER zhen #在进行指定
CMD ["/bin/bash"]
# ENV 指定变量
[root@master ~]# cat Dockerfile
FROM centos:latest
MAINTAINER zhen
ENV myenv=/aa #指定变量
CMD ["/bin/bash"]
# 数据卷 使用此镜像创建出来的容器会创建一个目录 /data 绑定物理机随机一个目录
[root@master ~]# cat Dockerfile
FROM centos:latest
MAINTAINER zhen
VOLUME ["/data"] #如果是多个为: ["/data1","/data2"]
CMD ["/bin/bash"]