Docker(五):Dockerfile基础指令

参考地址:https://blog.csdn.net/weixin_43526371/article/details/126332507

 

 

构建三部曲

编写 Dockerfile
使用 docker build 命令从 Dockerfile 构建图像
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
容器构建的时候执行的命令(分 shell 和 exec 形式)

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 - (分 shell 和 exec 形式)
指定容器运行后执行的命令

只能有一条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 - (分 shell 和 exec 形式)
用来指定一个容器启动时要运行的命令

# 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

posted @ 2023-01-07 10:59  嘻嘻哈哈的人生  阅读(54)  评论(0编辑  收藏  举报