使用Dockerfile构建镜像
Dockerfile文件内容
FROM centos
RUN <命令行命令> # 多个命令之间用&&连接
COPY <源路径> <目标路径> # 从上下文目录中复制文件或目录到容器里制定路径
ADD <源路径> <目标路径> # 功能同ADD类似,官方推荐COPY
CMD <命令行命令> # 类似于RUN,RUN是在docker build时运行,CMD是在docker run时运行。作用是为启动的容器制定默认要运行的程序,如果Dockerfile中有多个CMD指令,仅最后一个生效,同时可被docker run命令行参数中指定要运行的程序所覆盖。
ENTRYPOINT <命令行命令> # 类似于CMD,但是在docker run的时候不会被覆盖。可以搭配CMD使用
ENV <key1>=<value1> <key2>=<value2> # 设置环境变量,例如ENV NODE_VERSION 7.2.0 ,后续指令中可以通过$NODE_VERSION引用,尽量使用环境变量,不使用软连接
ARG # 与 ENV 作用一至。不过作用域不一样。ARG仅针对Dockerfile内有效,镜像内无效
VOLUME ["<路径1>", "<路径2>"] # 定义匿名数据卷,在启动容器时忘记挂载数据卷,会自动挂在口上到匿名卷
EXPOSE <端口> # 仅仅只是声明一下端口,以方便使用人员配置映射
WORKDIR <指定工作目录> # 进去后所在的目录
容器内启动程序及参数
假设已经通过以下dockerfile构建了nginx镜像
FROM nginx
ENTRYPOINT ["nginx", "-c"] # 定参
CMD ["/etc/nginx/nginx.conf"] # 变参
- 不传参运行
docker run nginx
容器内会默认运行以下命令来启动进程nginx -c /etc/nginx/nginx.conf
- 传参运行
docker run nginx -c "/etc/nginx/new.conf"
容器内会默认运行以下命令来启动进程nginx -c /etc/nginx/new.conf
构建命令
docker build -t nginx:v3 .
CMD 一般直接使用命令,不需要加引号,否则会导致文件找不到,可以以下两种方式
CMD /usr/bin/python3 /home/timed_task/xxx.py
CMD ["/usr/bin/python3", "/home/timed_task/xxx.py"]
耗时的操作放在Dockerfile的上面,修改尽量修改下面,因为docker重建的时候会根据文件的先后顺序进行缓存
镜像不支持中文的,需要加全局变量ENV
ENV LANG C.UTF-8
生成镜像后使用 docker run -dti --name=xxx --net=host abc:v1 启动容器,不需要加/bin/bash。
如果需要修改CMD,只需在后面加上命令,如 python3 aaa.py,即可覆盖Dockerfile中的CMD
构建镜像一般会先更换镜像的yum源
- 首先需要下载Centos-8.repo,可以使用wget http://mirrors.aliyun.com/repo/Centos-8.repo 下载
- 将以下几个命令放入Dockerfile 开头的位置即可
RUN rm -rf /etc/yum.repos.d/*
COPY Centos-8.repo /etc/yum.repos.d
RUN yum clean all
RUN yum makecache