Docker
让开发者创建的应用脱离底层物理硬件的限制;能很方便通过网络进行传播,做到快速分发和部署。通过对应用的封装(Packaging)、分发(Distribution)、部署(Deployment)、运行(Runtime)生命周期进行管理,达到应用组件级别的"一次封装,到处运行"。解决了一旦需要服务器迁移,往往需要对每个应用都进行重新部署和调试的问题。
基本概念
镜像
可以将它理解为一个只读的模板,描述一个镜像需要包括"名称+标签"
信息。镜像自身是只读的。常用命令:
拉取镜像:docker pull IamgeName[:TAG]。#如果不显式指定TAG,则默认会选择latest标签
列出本地镜像:docker images
获取某镜像详细信息:docker inspect
搜索镜像:docker search
删除镜像:docker rmi
清理镜像:docker image prune # 使用Docker一段时间后,系统中可能会遗留一些临时的镜像文件,以及一些没有被使用的镜像
上传镜像:docker push
使用Dockerfile
创建镜像
Dockerfile是一个文本格式的配置文件,用户可以使用Dockerfile来快速创建自定义的镜像。
一般而言,Dockerfile主体内容分为四部分:基础镜像信息、维护者信息、镜像操作指令(配置镜像信息)和容器启动时执行指令(具体执行操作)。编写完成Dockerfile之后,可以通过docker [image] build命令来创建镜像。
基本的格式为docker build [OPTIONS] PATH | URL | -。
该命令将读取指定路径下(包括子目录)的Dockerfile,并将该路径下所有数据作为上下文(Context)发送给Docker服务端。
Docker服务端在校验Dockerfile格式通过后,逐条执行其中定义的指令,碰到ADD、COPY和RUN指令会生成一层新的镜像。
最终如果创建镜像成功,会返回最终镜像的ID。
容器
类似于一个轻量级的沙箱,是从镜像创建的应用运行实例。它可以启动、开始、停止、删除,而这些容器都是彼此相互隔离、互不可见的。容器从镜像启动的时候,会在镜像的最上层创建一个可写层。常用的命令:
新建容器:docker create # 命令选项包括容器运行模式相关、与容器环境配置相关、与容器资源限制和安全保护相关
启动容器:docker start
查看运行的容器:docker ps
新建并启动容器: docker run #守护态运行(Daemonized)可以通过添加-d参数来实现
查看容器输出:docker logs -f(-follow):持续保持输出
终止容器:docker stop
进入容器:docker exec -it 容器ID /bin/bash # --interactive:打开标准输入接受用户输入命令,--tty 分配伪终端
删除容器:docker rm
数据管理
在生产环境中使用Docker,往往需要对数据进行持久化,或者需要在多个容器之间进行数据共享,需要对容器的数据进行管理操作。
容器中管理数据主要有两种方式:
- 数据卷(Data Volumes):容器内数据直接映射到本地主机环境;
数据卷(Data Volumes)是一个可供容器使用的特殊目录,它将主机操作系统目录直接映射进容器,数据卷可以在容器之间共享和重用,对数据卷的更新不会影响镜像,解耦开应用和数据。
创建数据卷:docker volume create -d local xxx #docker volume还支持inspect(查看详细信息)、ls(列出已有数据卷)
查看所创建数据卷:ls /var/lib/docker/volumes
绑定数据卷:docker [container] run --mount #将主机本地的任意路径挂载到容器内作为数据卷,这种形式创建的数据卷称为绑定数据卷。
- 数据卷容器(Data Volume Containers):使用特定容器维护数据卷。
可以利用数据卷容器对其中的数据卷进行备份、恢复,以实现数据的迁移。即使容器在运行中出现故障,用户也不必担心数据发生丢失,只需要快速地重新创建容器即可。
挂载数据卷:使用--volumes-from来挂载
端口映射与容器互联
Docker允许映射容器内应用的服务端口到本地宿主主机;可以实现多个容器间通过容器名来快速访问。
仓库
类似于代码仓库,是Docker集中存放镜像文件的场所。如官方提供的Docker Hub