Docker(五):Dockerfile基础指令

在这里插入图片描述

构建三部曲

  1. 编写 Dockerfile
  2. 使用 docker build 命令从 Dockerfile 构建图像
  3. docker run 镜像

指令

FROM LABEL RUN EXPOSE WORKDIR ENV
USER VOLUME ADD COPY CMD ENTRYPOINT

FROM

基础镜像,基于的镜像

# FROM 镜像:TAG

FROM centos:centos7

LABEL - (MAINTAINER <name> 维护者 已弃用)

标签

# LABEL <key>=<value> <key>=<value> <key>=<value> ...

LABEL "com.example.vendor"="ACME Incorporated"
LABEL com.example.label-with-value="foo"
LABEL version="1.0"
LABEL description="This text illustrates \
that label-values can span multiple lines."

RUN

容器构建的时候执行的命令(分 shellexec 形式)

RUN 指令在 docker build 时运行

# RUN 命令

# shell形式
RUN /bin/bash -c 'source $HOME/.bashrc; \
echo $HOME'

# exec形式
RUN ["/bin/bash", "-c", "echo hello"]

EXPOSE

当前容器对外暴露的端口

# EXPOSE <port> [<port>/<protocol>...]

EXPOSE 80/tcp
EXPOSE 80/udp

WORKDIR

指定创建容器后,终端默认登录进来的工作目录,相当于落脚点

# WORKDIR 路径

WORKDIR /path/to/workdir

ENV

定义环境变量

# ENV <key>=<value> ...

ENV FOO=/bar
WORKDIR ${FOO}   # WORKDIR /bar

USER

指定该镜像以什么样的用户去执行,如果都不指定,默认为root

# USER <user>[:<group>]
# USER <UID>[:<GID>]

FROM microsoft/windowsservercore
RUN net user /add patrick
USER patrick

VOLUME

容器卷,相当于 -v

# VOLUME ["/data"]

VOLUME /var/lib/mysql

ADD

将宿主机目录下的文件拷贝进镜像且会自动处理URL解压tar压缩包,相当于COPY+解压

# ADD [--chown=<user>:<group>] <src>... <dest>
# ADD [--chown=<user>:<group>] ["<src>",... "<dest>"]

ADD hom* /mydir/
ADD hom?.txt /mydir/
ADD --chown=55:mygroup files* /somedir/
ADD --chown=bin files* /somedir/
ADD --chown=1 files* /somedir/
ADD --chown=10:11 files* /somedir/

COPY

类似ADD,拷贝文件和目录到镜像中

# COPY [--chown=<user>:<group>] <src>... <dest>
# COPY [--chown=<user>:<group>] ["<src>",... "<dest>"]

COPY hom* /mydir/
COPY hom?.txt /mydir/
COPY --chown=55:mygroup files* /somedir/
COPY --chown=bin files* /somedir/
COPY --chown=1 files* /somedir/
COPY --chown=10:11 files* /somedir/

CMD - (分 shellexec 形式)

指定容器运行后执行的命令

只能有一条CMD指令Dockerfile。如果列出多个,CMD 则只有最后一个CMD才会生效,其他不会生效

CMD 指令在 docker run 时运行

$ docker run -it image /bin/bash

相当于在dockerfile的最后一行追加了一行CMD指令(CMD ["/bin/bash", "run"]),那么原有的指令便不会执行

如:CMD ["catalina.sh", "run"] CMD ["/bin/bash","run"]

# CMD ["executable","param1","param2"]
# CMD ["param1","param2"]
# CMD command param1 param2

FROM ubuntu
CMD echo "This is a test." | wc -

FROM ubuntu
CMD ["/usr/bin/wc","--help"]

ENTRYPOINT - (分 shellexec 形式)

用来指定一个容器启动时要运行的命令

# ENTRYPOINT ["executable", "param1", "param2"]
# ENTRYPOINT command param1 param2

FROM ubuntu
ENTRYPOINT ["top", "-b"]
CMD ["-c"]
  • 例如:(nginx:test)
    FROM nginx
    ENTRYPOINT ["nginx", "-c"] # 定参
    CMD ["/etc/nginx/nginx.conf"] # 变参
    
docker命令 衍生出的实际命令
docker run nginx:test nginx -c /etc/nginx/nginx.conf
docker run nginx:test -c /etc/nginx/new.conf nginx -c /etc/nginx/new.conf

猜你喜欢

转载自blog.csdn.net/weixin_43526371/article/details/126332507