docker介绍
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中。
然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口。
docker的应用场景
- Web 应用的自动化打包和发布。
- 自动化测试和持续集成、发布。
- 在服务型环境中部署和调整数据库或其他的后台应用。
-
从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境。
docker的安装
- 安装docker的所需条件: 需要64位架构系统和Linux3.10以上内核,推荐在Ubantu下安装,docker是基于Ubantu开发的
- 添加docker官方apt软件源
- 添加成功后更新apt软件包缓存
- 安装docker
- 启动docker后执行
docker的构成
- Docker 镜像(Images)
- Docker 容器(Container)
- Docker 客户端(Client)
- Docker 主机(Host)
- Docker 仓库(Registry)
- Docker Machine
如何创建docker镜像
- 编写Dockerfile
- Commit镜像
Dockerfile
Dockerfile是一个包含用于组合映像的命令的文本文档。
可以使用在命令行中调用任何命令。
Docker通过读取Dockerfile中的指令自动生成映像。
docker build命令用于从Dockerfile构建映像。
可以在docker build命令中使用-f 标志指向文件系统中任何位置的Dockerfile。
Dockerfile 一般分为四部分:
- 维护者信息
- 镜像操作指令
- 容器启动时执行指令
docker的分层概念
这是一个Ubuntu镜像,可以看到镜像分成很多个layer,都有自己的大小和ID,最终这个镜像是由他们layer组合而成,并且这个镜像它是只读的,它不能往里面写数据,如果想写数据怎么办呢?
我们会在镜像上启一层contain layer,其实就是相当于把镜像启动成一个容器,那么在容器这一层,我们是可写的。
dockerfile指令
指令 | 解释 |
---|---|
FROM | 指定使用哪个镜像源 |
RUN | 执行命令并创建新的镜像层,通常用于安装软件包 |
COPY | 复制文件指令 COPY <源路径>...<目标路径> COPY ["<源路径1>",...<目标路径>] |
ADD | 更高级的复制文件指令 能复制URL 资源,自动解压tar 包 |
CMD | 容器启动命令 只执行最后一条CMD |
ENTRYPOINT | 入口点 指定容器启动程序及参数,将CMD 的内容作为参数传给 ENTRYPOINT |
ENV | 设置环境变量 |
ARG | 构建参数 ARG 所设置的环境变量,在将来容器运行时是不会存在的 |
VOLUME | 定义匿名卷 |
EXPOSE | 声明端口 仅声明容器提供服务端口,并不会与宿主机映射 -p <宿主端口>:<容器端口> |
MAINTAINER | 镜像创建者 |