这是我参与「第五届青训营 」伴学笔记创作活动的第 7 天
前言
在day6中我们介绍了容器的概念:
容器就是将软件打包成标准化单元,以用于开发、交付和部署。 是轻量的、可执行的独立软件包 ,包含软件运行所需的所有内容:代码、运行时环境、系统工具、系统库和设置.
介绍了docker的三个重要组成: 镜像, 容器, 仓库. 以及对应的docker命令行操作.
富 Web 时代,应用变得越来越强大,与此同时也越来越复杂。集群部署、隔离环境、灰度发布以及动态扩容缺一不可,而容器化则成为中间的必要桥梁。
Dockerfile
Dockerfile 是自动构建 Docker 镜像的配置文件, 利用docker build即可自动利用本目录下的dockerfile构建镜像
一般来说,我们可以将 Dockerfile 分为四个部分:
- 基础镜像(父镜像)信息指令 FROM。
- 维护者信息指令 MAINTAINER。
- 镜像操作指令 RUN 、EVN 、ADD 和 WORKDIR 等。
- 容器启动指令 CMD 、ENTRYPOINT 和 USER 等。
FROM python:2.7
MAINTAINER ffif <test@gmail.com>
COPY . /app
WORKDIR /app
RUN pip install -r requirements.txt
EXPOSE 5000
ENTRYPOINT ["python"]
CMD ["app.py"]
基础命令
FROM: 指定基础镜像
FROM tomcat:8
LABLE/MAINTAINER: 注释 / 维护者
MAINTAINER zhaoce
LABLE version="1.0"
# maintainer已被废弃, 建议用LABLE后加MAINTAINER
WORKDIR: 工作目录, 如果不存在会自动创建COPY/ADD: 拷贝本地文件到镜像
# copy和add都支持Go语言风格的通配符
COPY abc* /testdir/
# ADD会自动解压文件
ADD test.tar.gz /home/work/test
ENV: 设置环境常量
ENV JAVA_HOME /usr/local/jdk1.8
# 引用上面的常量
RUN ${JAVA_HOME}/bin/java -jar xxx.jar
运行命令
RUN: 在构建镜像时运行,在构建时能修改镜像内部的文件(通常可以利用curl或者apt等工具下载一些依赖)。
# SHELL模式, 会创建子进程
RUN yum -y install vim
# EXEC模式, 用EXEC进程替换当前进程
RUN ["yum","-y","install","vim"]
每次执行RUN指令都会在docker上新建一层镜像, 所以多个RUN指令可以合并:
RUN apt install update && apt install vim
CMD: 容器启动时执行, 如果容器启动的时候有其他额外的附加指令,则CMD指令不生效
CMD ["echo", "container starting..."]
- ENTRYPOINT: 容器创建pull时执行(而非构建build) , Dockerfile中只有最后一个ENTRYPOINT会被执行