dockerfile创建镜像的流程如下:
(1)手动制作 docker 镜像,记录历史命令
(2)根据历史命令编写dockerfile文件
(3)docker image build 生成镜像
(4)测试镜像功能
常用的dockerfile指令(都要大写)
from:指定自动化构建的基础镜像,该指令必须指定基于哪个镜像
run: 制作镜像中需要执行的命令
cmd:容器默认启动执行的命令,如果 run 里卖弄指定了执行命令,将覆盖 cmd 的命令
一个dockerfile至多只能有一个cmd,如果有多个,只有最后一个生效。
entrypoint:容器启动以后的执行,不会被覆盖。
copy:拷贝dockerfile当前目录下的文件到容器指定目录,注意,目录应该有 / ,否则Copy指令会理解为一个文件。不会自动解压 tar 包
add:拷贝dockerfile当前目录下的文件到容器指定目录,会自动解压 tar 包
workdir :指定工作目录
expose:指定镜像对外暴露的端口
volume:指定随机持久卷
env:设置环境变量
label:为镜像打标签
mkdir -pv dockerfile/{nginx,tomcat,httpd} #同时创建多个目录,-v 显示版本信息,在当前root目录下
cd dockerfile/nginx && yum -y install vim #装一个 vim 的包
pwd && vim Dockerfile #查看当前路径建立一个Dockerfile文件
FROM centos:7
RUN mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup && \ # 把官方的源mv改名作为备份
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo && \ #下载阿里云源
sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo && \ #把阿里内网源删除
curl -o /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo #下载阿里的epel源
RUN yum -y install nginx && rm -rf /var/cache/yum # &&表示同时进行,\表示换行符,都是一行命令,可以有多个RUN,#删除缓存,减小镜像大小
CMD nginx -g "daemon off;"
docker image build --help #查看创建镜像的相关信息
docker image build -t 镜像名 . #在当前路径下创建镜像并指定名称
在创建镜像时,会生成临时镜像,不要清除临时镜像(有可能后面的镜像依赖前面的临时镜像)
docker container ps -l #查看最近的容器的状况
docker 镜像的优化思路
(1)利用缓存提高编译速度—利用缓存,将不经常变更的指令放在靠前的位置;合并多条命令减小镜像层数
(2)减小镜像体积—删除无用的缓存、使用较小的基础镜像