dockerfile制作镜像步骤和手动制作一个样, 区别在于dockerfile中使用命令代替手动操作
# 描述性的信息
FROM centos:targe(或FROM centos@序列号) ----> 指定基于哪个镜像
RUN cd /data/xx && mkdir xx.file ----> run后执行bash相关命令,
例: RUN ["mysqld","--initialize-insecure","--user=mysql","...."] ---->执行非bash命令的写法
EXPOSE 22 ----> 用于暴露端口, 多个端口时写多行即可.
EXPOSE 80
COPY 文件名 /目录名 ----> 拷贝dockerfile同级文件到镜像的指定目录, 如文件名处是个目录, 则会把该目录下所有文件都cp到指定目录
ADD file.tar.gz /目录名 ----> 拷贝dkf同级文件到镜像目录, 并可自动解压.tar压缩的文件, 如果目录不存在其也会自动创建(add也可用于普通无压缩文件)
ADD url /目录名 ----> 也能从网络下载文件放到指定目录, 但不会自动处理压缩文件
VOLUME ["目录1", "目录2"] ----> 制作镜像时不执行, 生成容器时自动关联目录1和2, 不能用来关联宿主机和容器
WORKDIR ----> 镜像中的专用cd命令, 全局唯一, 跳到某个目录后就会一直在该目录, 常使用相对路径跳转, 不好用, 不如用run命令执行cd好使
ENV ---->用于在dockfile中i当以变量, a="目录" 调用语法: ${a}或$a
CMD ["/usr/sbin/ssh","-D"] ----> 该命令在制作镜像的时候不会执行, 而是在使用镜像启动容器时才执行
例: CMD ["/bin/bash","bash脚本路径"]
ENTRYPOINT ----> 作用及用法同上面的cmd, 但是如果在起容器时, 命令后指定要执行的命令则会覆盖cmd的任务, 而使用entrypoint指定则不会被覆盖
如: docker run -d 容器id /bin/bash ----> 则/bin/bash任务会覆盖cmd的任务
注: entrypoint高级用法能用来传参数, 具体用法不详
# 使用dockerfile生成镜像
docker image build -t "镜像名" dockerfile路径
dockerfile文件格式架构:
# 描述性的信息
FROM xxxx
RUN xxxx
EXPOSE 22
EXPOSE 80
CMD ["/bin/bash", "脚本路径"]