Dokcer创建镜像

Docker面试经常被问到的问题,一直困扰自己。希望可以帮助到你,望君面试顺利。

Docker创建镜像

    • dockerfile文件
      • 常用参数:
    • 构建镜像:
    • 运行镜像
    • 实例:基于alpine构建镜像

dockerfile文件

dockerfile:构建docker镜像的配置文件,包含了一条条的指令,来告知如何去创建docker镜像。

常用参数:

参数 含义
FROM(*) 指定基础镜像,是dockerfile中最重要的参数。
WORKDIR(*) 指定shell语句执行到哪个目录下,不存在则自动创建
COPY(*) 将当前主机上的文件拷贝到容器某目录下(推荐)
ADD 和COPY类似,除了本机目录外,也可以是url资源
RUN(*) 构建时运行shell语句
CMD(*) 运行时运行shell语句(推荐)
ENTRYPOINT 和CMD类似,不过优先级比CMD高
EXPOSE 指定暴露端口
VOLUME 数据卷
ENV 参数,作用域为构建镜像到容器运行结束
ARG 参数,作用域为构建镜像的过程
LABEL 指定元数据信息,对镜像没有影响。做标识
ONBUILD 当基于此镜像进行构建镜像时,会被继承。
STOPSIGNAL 指定信号来终止容器(不常用)
HEALTHCHECK 检查容器健康状态
SHELL 指定文件使用的shell类型

CMD的json格式可参考:博客
注意:

RUN是构建镜像时运行的脚本,CMD是容器运行时运行的脚本,脚本运行结束之后容
器的生命周期结束。

当文件中同时存在CMD和ENTRYPOINT时,如果ENTRYPOINT是非json格式时,则按
照ENTRYPOINT执行。如果二者都是json格式,则将二者拼接成shell。

EXPOSE:如nginx暴露端口为80,可以使用docker inspect nginx查看详细信息。
这样做的好处是,可以在运行镜像时通过P参数来端口映射

构建镜像:

docker build -t [name]:[version] /path/to/dockerfile

举例:docker build -t test:1.0 /root/docker

运行镜像

docker run [name]:[version]

实例:基于alpine构建镜像

1.先编写简单的Dockerfile文件
[root@localhost ~]# cat Dockerfile 
FROM alpine		
WORKDIR /app
COPY ./test.txt /app/
run echo "world!" >>test.txt
cmd cat test.txt
2.构建镜像以及运行镜像。
[root@localhost ~]# docker build -t test .
Sending build context to Docker daemon   16.9kB
Step 1/5 : FROM alpine
Step 2/5 : WORKDIR /app
Step 3/5 : COPY ./test.txt /app/
Step 4/5 : run echo "world!" >>test.txt
Step 5/5 : cmd cat test.txt
[root@localhost ~]# docker run test
hello
world!

更好的理解参数ENV和ARG:

3.1在Dcokerfile文件中添加参数
ENV A=10
CMD echo $A
3.2构建镜像以及运行镜像。
[root@localhost ~]# docker run test
10
4.1在Dcokerfile文件中添加参数
ARG B=11
CMD echo $B
4.2构建镜像以及运行镜像
[root@localhost ~]# docker run test
              

另外需要注意的是,Dockerfile文件中定义的ARG参数是默认值,我们在运行镜像时,可以通过–build-arg B=12进行重新赋值。

你可能感兴趣的:(Linux)