docker介绍
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中。
然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口。
docker的应用场景
- Web 应用的自动化打包和发布。
- 自动化测试和持续集成、发布。
- 在服务型环境中部署和调整数据库或其他的后台应用。
-
从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境。
docker的安装
- 安装docker的所需条件: 需要64位架构系统和Linux3.10以上内核,推荐在Ubantu下安装,docker是基于Ubantu开发的
- 添加docker官方apt软件源
/etc/apt/sources.list.d/docker.list deb deb https://apt.dockerproject.org/repo ubuntu-trusty main
- 添加成功后更新apt软件包缓存
$ sudo apt-get update
- 安装docker
$ sudo apt-get install –y docker-engine
- 启动docker后执行
docker run ubuntu:15.10 /bin/echo “Hello world“
查看是否成功安装
docker的构成
- Docker 镜像(Images)
Docker 镜像是用于创建 Docker 容器的模板。
- Docker 容器(Container)
容器是独立运行的一个或一组应用。
- Docker 客户端(Client)
Docker 客户端通过命令行或者其他工具使用 Docker API (https://docs.docker.com/reference/api/docker_remote_api) 与 Docker 的守护进程通信。
- Docker 主机(Host)
一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。
- Docker 仓库(Registry)
Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。
Docker Hub(https://hub.docker.com) 提供了庞大的镜像集合供使用。
- Docker Machine
Docker Machine是一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure。
如何创建docker镜像
现在docker官方共有仓库里面有大量的镜像,所以最基础的镜像,我们可以在共有仓库直接拉取,因为这些镜像都是原厂维护,可以得到即使的更新和修护。
- 编写Dockerfile
我们如果想去定制这些镜像,我们可以去编写Dockerfile,然后重新bulid,最后把它打包成一个镜像.
- Commit镜像
当然还有另外一种方式,就是通过镜像启动一个容器,然后进行操作,最终通过commit这个命令commit一个镜像,但是不推荐这种方式.
首先,如果在安装软件,编译构建,那会有大量的无关内容被添加进来,如果不小心清理,将会导致镜像及其臃肿。
此外,使用docker commit 意味着所有对镜像的操作都是黑箱操作,生成的镜像也被称为黑箱镜像。
而且,任何修改的结果仅仅是在当前层进行标记,添加,修改,而不会改动上一层。
如果使用docker commit制作镜像,以及后期修改的话,每一次修改都会让镜像更加臃肿一次,所删除的上一层的东西并不会丢失,会一直如影随形的跟着这个镜像,即使根本无法访问到,这会使镜像更加臃肿。
Dockerfile
Dockerfile是一个包含用于组合映像的命令的文本文档。
可以使用在命令行中调用任何命令。
Docker通过读取Dockerfile中的指令自动生成映像。
docker build命令用于从Dockerfile构建映像。
可以在docker build命令中使用-f 标志指向文件系统中任何位置的Dockerfile。
Dockerfile 一般分为四部分:
- 基础镜像信息
- 维护者信息
- 镜像操作指令
- 容器启动时执行指令
docker的分层概念
image.png这是一个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 | 镜像创建者 |
网友评论