使用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源

RUN rm -rf /etc/yum.repos.d/*
COPY Centos-8.repo /etc/yum.repos.d
RUN yum clean all
RUN yum makecache
posted @ 2021-03-29 17:57  wanglai  阅读(194)  评论(0编辑  收藏  举报