Dockerfile简介和构建

一、Dockerfile简介

  1. Dockerfile 是镜像和容器的关键,并且 Dockerfile 还可以很轻易的去定义镜像内容
  2. Dockerfile 是自动构建 Docker 镜像的配置文件,用户可以使用 Dockerfile 快速创建自定义的镜像。Dockerfile 中的命令非常类似于 Linux 下的 Shell 命令。
  3. Dockerfile 是由一行行命令语句组成,并且支持已 # 开头的注释行。
  4. 一般将 Dockerfile 分为四个部分
  • 基础镜像(父镜像)信息指令 FROM
  • 维护者信息指令 MAINTAINER
  • 镜像操作指令 RUN 、EVN 、ADD 和 WORKDIR 等
  • 容器启动指令 CMD 、ENTRYPOINT 和 USER 等

一个简单的Dockerfile例子

#从 Docker Hub 上 Pull 下 Python 2.7 的基础镜像
FROM python:2.7
#显示维护者的信息
MAINTAINER Pegasus <zhangningkid@gmail.com>
#Copy 当前目录到容器中的 /App 目录下
COPY . /app
#指定工作路径为 /App
WORKDIR /app 
#安装依赖包
RUN pip install -r requirements.txt
#暴露 5000 端口
EXPOSE 5000
#启动 App
ENTRYPOINT ["python"]
CMD ["app.py"]

二、Dockerfile常用指令

a. Dockerfile 中所有的命令都是以下格式:INSTRUCTION argument ,
b. 指令(INSTRUCTION)不分大小写,但是推荐大写。

  1. FROM

a. FROM 是用于指定基础的 images ,一般格式为 FROM <image> or FORM <image>:<tag>
b. 所有的 Dockerfile 都应该以 FROM 开头,FROM 命令指明 Dockerfile 所创建的镜像文件以什么镜像为基础,FROM 以后的所有指令都会在 FROM 的基础上进行创建镜像
c. 可以在同一个 Dockerfile 中多次使用 FROM 命令用于创建多个镜像。

  1. MAINTAINER

MAINTAINER 是用于指定镜像创建者和联系方式,一般格式为 MAINTAINER <name>

  1. COPY

a. 用于复制本地主机的 <src> (为 Dockerfile 所在目录的相对路径)到容器中的 <dest>
b. 当使用本地目录为源目录时,推荐使用 COPY 。一般格式为 COPY <src><dest>
c. 例如我们要拷贝当前目录到容器中的 /app 目录下
COPY . /app

  1. WORKDIR

a. 用于配合 RUN,CMD,ENTRYPOINT 命令设置当前工作路径
b. 可以设置多次,如果是相对路径,则相对前一个 WORKDIR 命令。默认路径为/。一般格式为 WORKDIR /path/to/work/dir
c. 例如我们设置 /app 路径:
WORKDIR /app

  1. RUN

a. 用于容器内部执行命令。每个 RUN 命令相当于在原有的镜像基础上添加了一个改动层,原有的镜像不会有变化。一般格式为 RUN <command>
b. 例如我们要安装 Python 依赖包:RUN pip install -r requirements.txt

  1. EXPOSE
    a. 用来指定对外开放的端口。一般格式为 EXPOSE <port> [<port>…]
    b. 例如开放5000端口EXPOSE 5000
  1. ENTRYPOINT

让容器表现得像一个可执行程序一样。一个 Dockerfile 中只能有一个 ENTRYPOINT,如果有多个,则最后一个生效。格式:ENTRYPOINT [“executable”, “param1”, “param2”]
将 Python 镜像变成可执行的程序:ENTRYPOINT ["python"]

  1. CMD

a. 用于启动容器时默认执行的命令,CMD 命令可以包含可执行文件,也可以不包含可执行文件。不包含可执行文件的情况下就要用 ENTRYPOINT 指定一个,然后 CMD 命令的参数就会作为 ENTRYPOINT 的参数。
b. CMD 命令有三种格式:

  • CMD [“executable”,“param1”,“param2”]:推荐使用的 exec 形式。
  • CMD [“param1”,“param2”]:无可执行程序形式。
  • CMD command param1 param2:Shell 形式。

c. 一个 Dockerfile 中只能有一个 CMD,如果有多个,则最后一个生效。而 CMD 的 Shell 形式默认调用 /bin/sh -c 执行命令。
d. CMD 命令会被 Docker 命令行传入的参数覆盖:docker run busybox /bin/echo Hello Docker 会把 CMD 里的命令覆盖。
e. 例如启动app:CMD ["app.py"]

三、DockerFile的构建

  1. 构建一个简单的Dockerfile:vim Dockerfile
FROM nginx
MAINTAINER Angel_Kitty <pegasus@gmail.com>
RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html
  1. 在 Dockerfile 文件所在目录执行 : docker build -t angelkitty/nginx_web:v1 .
  • t 是为新镜像设置仓库和名称
  • angelkitty 为仓库名
  • nginx_web 为镜像名
  • :v1 为标签(不添加为默认 latest )
  1. 使用docker images命令查看主机中的镜像
  2. 创建镜像的容器并运行
##这条命令会用 Nginx 镜像启动一个容器,命名为 nginx_web ,并且映射了 8080 端口。
docker run --name nginx_web -d -p 8080:80   angelkitty/nginx_web:v1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值