DockerFile概述

DockerFile概述

DockerFile规则

格式

  • #为注释
  • 指令(大写) 内容(小写)
  • 尽管指令是大小写不敏感的,但是,还是强烈建议指令使用大写,内容使用小写。

DockerFile是按顺序执行指令集合的(从上到下依次执行)。

每一个DockerFile的第一个非注释指令,必须是“FROM”指令,用于为镜像构建过程中,指定基准镜像,后续的指令运行于此基准镜像所提供的运行环境中。

  • 实践中,基准镜像可以是任何可用镜像文件,默认情况下,docker build会在docker主机(本地)上查找指定的镜像文件,当本地不存在时,则会从Docker registry(远端)上拉取所需的镜像文件。

4组核心的DockerFile指令:

  • USER/WORKDIR指令
  • ADD/EXPOSE指令
  • RUN/ENV指令
  • CMD/ENTERPOINT指令

USER/WORKDIR指令


创建Dockerfile文件:

vim /data/docker/Dockerfile

Dockerfile文件内容:

# 基础镜像
FROM nginx:1.12.2
# 指定在docker中使用nginx用户启动进程,默认:root
USER nginx
# 默认的工作目录,也就是使用`docker exec -it nginx /bin/bash`命令进入容器后,直接进入的目录,默认:/
WORKDIR /usr/share/nginx/html

执行构建命令:

docker build . -t nginx:1.12.2_with_user_workdir

运行镜像:

docker run --rm -it --name nginx-test nginx:1.12.2_with_user_workdir /bin/bash

image-20201123172918024

ADD/EXPOSE指令


注意:

  1. 如果源路径是个文件,且目标路径是以 / 结尾, 则docker会把目标路径当作一个目录,会把源文件拷贝到该目录下。如果目标路径不存在,则会自动创建目标路径。
  2. 如果源路径是个文件,且目标路径是不是以 / 结尾,则docker会把目标路径当作一个文件。
    1. 如果目标路径不存在,会以目标路径为名创建一个文件,内容同源文件;
    2. 如果目标文件是个存在的文件,会用源文件覆盖它,当然只是内容覆盖,文件名还是目标文件名。
    3. 如果目标文件实际是个存在的目录,则会源文件拷贝到该目录下。
    4. 注意,这种情况下,最好显示的以 / 结尾,以避免混淆。
  3. 如果源路径是个目录,且目标路径不存在,则docker会自动以目标路径创建一个目录,把源路径目录下的文件拷贝进来。如果目标路径是个已经存在的目录,则docker会把源路径目录下的文件拷贝到该目录下。
  4. 如果源文件是个归档文件(压缩文件,比如 .tar文件),则docker会自动帮解压。但是.tar.gz文件是不会自动解压的。

创建Dockerfile文件:

vim /data/docker/Dockerfile

Dockerfile文件内容:

# 基础镜像
FROM nginx:1.12.2
# 添加本地文件到镜像中
ADD index.html /usr/share/nginx/html/index.html
# 指定容器端口,可以通过`docker run -P`实现容器端口随机映射到宿主机的某个端口
# EXPOSE只有和`-P`配合使用才生效,如果使用`-p`指定端口映射,则EXPOSE指令无意义
EXPOSE 80

执行构建命令:

docker build . -t nginx:1.12.2_with_add_expose

运行镜像:

docker run --rm -d --name nginx-test -P nginx:1.12.2_with_add_expose

image-20201123173921694

RUN/ENV指令


创建Dockerfile文件:

vim /data/docker/Dockerfile

Dockerfile文件内容:

# 基础镜像
FROM centos:centos7
# 环境变量
ENV VER v9.11.4
# 在构建镜像时,执行一些可执行命令
RUN echo $VER

执行构建命令:

docker build . -t centos:centos7_with_env_run

image-20201124093319361

CMD/ENTERPOINT指令


CMD指令

创建Dockerfile文件:

vim /data/docker/Dockerfile

Dockerfile文件内容:

# 基础镜像
FROM centos:centos7
# 在构建镜像时,执行一些可执行命令
RUN yum install -y httpd
# 指定启动容器时执行的命令,每个 Dockerfile 只能有一条 CMD 命令。如果指定了多条命令,只有最后一条会被执行。
# 如果用户启动容器时候指定了运行的命令,则会覆盖掉 CMD 指定的命令。
CMD ["httpd","-D","FOREGROUND"]

执行构建命令:

docker build . -t centos:centos7_with_run_cmd

运行镜像:

docker run --rm -d --name centos-test -p 83:80 centos:centos7_with_run_cmd

image-20201124094735742

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DCCajmfc-1620439574079)(https://gitee.com/tanyongqiang/images/raw/master/img/image-20201124094803480.png)]

ENTRYPOINT指令

创建Dockerfile文件:

vim /data/docker/Dockerfile

Dockerfile文件内容:

# 基础镜像
FROM centos:centos7
# 添加本地文件到镜像中
ADD entrypoint.sh /entrypoint.sh
# 在构建镜像时,执行一些可执行命令
RUN yum install epel-release -q -y && yum install -y nginx
# 配置容器启动后执行的命令,并且不可被 docker run 提供的参数覆盖。
ENTRYPOINT /entrypoint.sh

entrypoint.sh内容:

#! /bin/bash
/sbin/nginx -g "daemon off;"

注意:记得在本地给entrypoint.sh授权。

授权命令:

chmod 777 entrypoint.sh

执行构建命令:

docker build . -t centos:centos7_with_run_entrypoint

运行镜像:

docker run --rm -d --name centos-test -p 83:80 centos:centos7_with_run_entrypoint

使用Docker容器化封装应用程序的意义(好处)

  • Docker引擎统一了基础设施环境–docker环境

    硬件配置、操作系统的版本、运行时环境的差异。

  • Docker引擎统一了程序打包(装箱)方式–docker镜像

    java程序、python程序、nodejs程序。

  • Docker引擎统一了程序部署(运行)方式–docker容器

    java -jar --> docker run

    npm run dev --> docker run

使用Docker容器化封装应用程序的缺点

  • 单机使用,无法有效集群。(虽然可以搭建集群,但是很繁琐,非常不便利)
  • 随着容器数量的上升,管理成本攀升。
  • 没有有效的容灾/自愈机制。
  • 没有预设编排模版,无法实现快速、大规模容器调度。
  • 没有统一的配置管理中心工具。
  • 没有容器生命周期的管理工具。
  • 没有图形化运维工具。

总结

综上所述,我们需要一套容器编排的工具!

基于Docker容器引擎的开源容器编排工具目前市场上主要有:

  • docekr compose、docker swarm
  • Mesosphere + Marathon
  • Kubernetes(k8s)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值