本文已参加 [新人创作礼] 活动,一起开启掘金创作之旅。
本篇继续介绍在面试中常遇见的docker类型的面试题。
我们怎么使用docker部署自己的应用
- 可以使用dockerfile把自己的项目构建成一个docker镜像,这样我们就可以使用docker部署了。
-
docker从基础镜像运行一个容器
-
执行一条指令并对容器作出修改
-
执行类似docker commit的操作提交一个新的镜像层
-
docker再基于刚提交的镜像运行一个新容器
-
执行dockerfile中的下一条指令直到所有指令都执行完成
-
dockerfile 中 RUN 指令 和 CMD 指令的区别是什么?
-
RUN
- 将在当前镜像之上的新层中执行命令,在 docker build时运行。
- 可以使用 \(反斜杠)将单个 RUN 指令延续到下一行RUN 在下一次构建期间,指令缓存不会自动失效。可以使用 --no-cache 标志使指令缓存无效Dockerfile 的指令每执行一次都会在 Docker 上新建一层。所以过多无意义的层,会造成镜像膨胀过大,可以使用 && 符号连接命令,这样执行后,只会创建 1 层镜像
-
CMD
-
运行程序,在 docker run 时运行,但是和 run 命令不同,RUN 是在 docker build 时运行。
-
指定启动容器时执行的命令,每个 Dockerfile 只能有一条 CMD 命令。如果指定了多条命令,只有最后一条会被执行。如果用户启动容器时候指定了运行的命令,则会覆盖掉 CMD 指定的命令。
-
dockerfile 中 ENV 指令 和 ARG 指令的区别是什么?请概述!
-
ENV
- 设置的环境变量将持续存在,您可以使用 docker inspect 来查看
- 如果环境变量只在构建期间需要,请考虑为单个命令设置一个值
-
ARG
- 定义变量,与 ENV 作用相同,不过 ARG 变量不会像 ENV 变量那样持久化到构建好的镜像中。
- Docker 有一组预定义的 ARG 变量,可以在 Dockerfile 中没有相应指令的情况下使用这些变量。
- 要使用这些,请使用 --build-arg 标志在命令行上传递它们。