Docker 入门详解
初识docker
- 容器技术:可实现虚拟机虚拟化,docker是众多容器中的佼佼者。
- 虚拟化:
- 传统虚拟化技术可通过硬件模拟实现,也可通过操作系统软件实现。
- 容器技术可实现远超传统虚拟机的轻量级虚拟化,“新一代的虚拟化技术”。
- 容器云:基于容器打造的云平台。
- dotCloud公司(Docker Inc)开源基于Go语言实现的容器项目-docker。开源项目地址:https://github.com/docker
关键字
- Build, Ship and Run Any App, Anywhere
- 通过对应用的封装(Packaging)、分发(Distribution)、部署(Deployment)、运行(Runtime)生命周期进行管理,达到应用组件级别的“一次封装,到处运行”。
- Linux Container(LXC):Linux容器技术
- DevOps:开发和运维
- LAMP:Linux + Apache + MySQL + PHP
使用Docker的好处
- 通过容器来打包应用、解耦应用和运行平台,方便服务器迁移。
- 在DevOps应用中的优势:
- 更快速的交互和部署
- 更高效的资源利用
- 更轻松的迁移和扩展
- 更简单的更新管理
- 与传统虚拟机比较:
- 启动与停止更快
- 对系统的资源需求很少,除了运行容器中的应用程序之外基本不消耗额外的系统资源
- 通过类似Git设计理念的操作来方便用户获取、分发和更新应用镜像,存储复用,增量更新
- 通过Dockerfile支持灵活的自动化创建和部署机制,以提高工作效率,标准化流程。
虚拟化(virtualization)技术
在计算机领域,指的是计算虚拟化或服务器虚拟化。
在计算机技术中,虚拟化是一种资源管理技术,是将计算机的各个实体资源,如服务器、网络、内存及存储等,予以抽象、转换后呈现出来,打破实体结构间的不可切割的障碍,是用户可以用比原本的组态更好的方式来应用这些资源。
虚拟化技术往往是为了在同一个主机上同时运行多个系统或应用,从而提高系统的资源利用率,并且带来降低成本、方便管理和容错容灾的好处。
虚拟化技术的分类
- 基于硬件的虚拟化
- 不多见,如网卡中的单根多IO虚拟化(SR-IOV)
-
基于软件的虚拟化
-
完全虚拟化
虚拟机模拟完整的底层硬件环境和特权指令的执行过程,客户操作系统无须进行修改。如IBM p和z系列的虚拟化、VMware Workstation、VirtualBox、QEMU等。
-
硬件辅助虚拟化
利用硬件(主要是CPU)辅助支持处理敏感指令来实现完全虚拟化的功能,客户操作系统无须修改。如VMware Workstation、Xen、KVM。
-
部分虚拟化
只针对部分硬件资源进行虚拟化,客户操作系统需要进行修改。
-
超虚拟化
部分硬件接口以软件的形式提供给客户机操作系统,客户操作系统需要进行修改,如早期的Xen。
-
操作系统级虚拟化
内核通过创建多个虚拟的操作系统实例来隔离不同的进程。容器技术属于这个范畴。
-
完全虚拟化
核心概念
- 镜像:
image
docker 镜像类似于虚拟机镜像,是只读的模板,镜像是docker容器的基础。
- 容器:
container
docker容器类似一个轻量级的沙箱,docker利用容器来运行和隔离应用,容器是从镜像创建的应用实例。
- 仓库:
repository
docker仓库是指某一类镜像的存放地,多个镜像以tag标签来区分。docker仓库服务器是存放docker仓库的地方。
使用docker镜像
-
搜索镜像:
docker search --filter=is-official=true elasticsearch
Usage: docker search \[OPTIONS] TERM Search Docker Hub for images Options: -f, --filter filter Filter output based on conditions provided --format string Pretty-print search using a Go template --limit int Max number of search results --no-trunc Don't truncate output
-
拉取镜像:
docker pull
Usage: docker pull [OPTIONS] NAME[:TAG|@DIGEST] Download an image from a registry Aliases: docker image pull, docker pull Options: -a, --all-tags Download all tagged images in the repository --disable-content-trust Skip image verification (default true) --platform string Set platform if server is multi-platform capable -q, --quiet Suppress verbose output
-
查看镜像信息
- 本地镜像列表查看:
docker images
、docker image ls
- 使用tag命令添加镜像标签:
docker tag image:latest myimages:latest
- 查看镜像的详细信息:
docker inspect image:tag
- 产看镜像历史:
docker history image:tag
- 本地镜像列表查看:
-
删除或清理镜像
- 使用标签删除镜像:
docker rmi image:tag
- 使用镜像id删除镜像:
docker rmi image_id
- 清理镜像:
docker image prune
- 使用标签删除镜像:
-
创建镜像
- 基于已有容器创建:
docker [container] commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
- 基于本地模板导入:
docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]
- 基于Dockerfile创建:
docker buildx build [OPTIONS] PATH | URL | -
- 基于已有容器创建:
-
保存或加载镜像
- 存出镜像:
docker save [OPTIONS] IMAGE [IMAGE...]
- 载入镜像:
docker load [OPTIONS]
- 存出镜像:
-
上传镜像:
docker push [OPTIONS] NAME[:TAG]
docker push [OPTIONS] NAME[:TAG] Upload an image to a registry Aliases: docker image push, docker push Options: -a, --all-tags Push all tags of an image to the repository --disable-content-trust Skip image signing (default true) -q, --quiet Suppress verbose output
操作docker容器
容器是镜像的一个运行实例,镜像是静态的文件,而容器带有运行时的可写文件层
- 创建容器
- 新建容器:
docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
docker create 创建的容器处于停止状态,可以使用docker start 来启动。- 启动容器:
docker start [OPTIONS] CONTAINER [CONTAINER...]
- 新建并启动容器:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
- 守护态运行容器:
docker run -d
- 查看容器的输出日志:
docker logs [OPTIONS] CONTAINER
- 停止容器
- 暂停容器:
docker pause CONTAINER [CONTAINER...]
- 终止容器:
docker stop [OPTIONS] CONTAINER [CONTAINER...]
- 重启容器:
docker restart [OPTIONS] CONTAINER [CONTAINER...]
-
进入容器:
- attach命令:
docker attach [OPTIONS] CONTAINER
- exec命令:
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
- attach命令:
-
删除容器:
docker rm [OPTIONS] CONTAINER [CONTAINER...]
-
导入导出容器:
- 导出容器:
docker export [OPTIONS] CONTAINER
- 导入容器:
docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]
- 导出容器:
-
查看容器
- 查看容器详情:
docker container inspect [OPTIONS] CONTAINER [CONTAINER...]
- 查看容器内进程信息:
docker top CONTAINER [ps OPTIONS]
- 查看统计信息:“
- 查看容器详情:
-
容器复制文件:
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
– 查看变更:docker diff CONTAINER
-
查看端口映射:
docker port CONTAINER [PRIVATE_PORT[/PROTO]]
-
更新配置:
docker update [OPTIONS] CONTAINER [CONTAINER...]
docker仓库
- 仓库与注册服务器
- 仓库(repository):集中存放某类镜像的地方,可分为公共仓库和私有仓库
- 注册服务器(registry):注册服务器可以有多个仓库,每个仓库下面可以有多个镜像。仓库可以被认为是一个具体的项目或目录
docker数据管理
- 使用docker时往往需要将数据持久化或者多个容器间共享数据,这就必须对容器的数据进行管理。
- 容器中数据管理的两种方式:
- 数据卷(data volumes):容器内数据直接映射到本地主机环境
- 数据卷容器(data volume containers):使用特定的容器维护数据卷
数据卷
- 数据卷是可供容器使用的特殊目录,它将主机操作系统目录直接映射进容器,类似于Linux的mount行为。
- 容器卷可以在容器之间共享和重用,容器间传递数据将变得高效与方便
- 对容器卷内数据的修改会立马生效,无论是容器内操作还是本地操作
- 对容器卷的更新不会影响影响,解耦应用和数据
- 卷会一直存在,直到没有容器使用,可以安全地卸载它