一、Docker概述
1.1、概述
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可抑制的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器完全使用沙盒机制,相互之间不会存在任何接口。几乎没有性能开销,可以很容易的在机器和数据中心运行。最重要的是,他们不依赖于任何语言、框架或者包装系统。 Docker是dotCloud公司开源的一个基于LXC的高级容器引擎,源码托管在Github上,基于go语言并且遵从Apache2.0协议开源。LXC主要通过Kernel的namespace实现每个用户实例之间的项目隔离,通过cgroup实现对资源的配额和调度。
1.2、Docker容器与虚拟机的区别
docker有着比虚拟机更少的抽象层。 由于docker不需要Hypervisor实现硬件资源虚拟化,运行在docker容器上的程序直接使用的都是实际物理机的硬件资源。所以docker效率比虚拟机效率高。达到了秒级启动的地步。
优点:比VM小、快,Docker容器的尺寸减小相比于整个虚拟机大大简化了分布到云和分发时间的开销。Docker启动一个容器实例时间仅仅需要几秒钟;Docker是一个开放的平台,构建、发布和运行分布式应用程序; 开发人员不需要关注具体是哪个Linux操作系统; Google、微软(azure)、亚马逊(AWS)、IBM等都支持docker; Docker支持Unix/Linux操作系统,也支持Windows和Mac。 一次封装,到处运行。
局限性:Docker用于应用程序时是最有用的,但并不包含数据。日志、数据库等通常放在Docker容器外。一个容器的镜像通常都很小,不用存储大量数据,存储可以通过外部挂载等方式使用,比如:NFS、ipsan、MFS、ceph等 ,或者docker -v 命令进行映射磁盘。 总之,docker只用于计算,存储交给别人。
适用场景:web应用的自动化打包和发布;自动化测试和持续集成、发布;在服务型环境中部署和调整数据库或其他的后台应用; 从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境。
二、Docker架构
Docker 包括三个基本概念
①镜像(lmage):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
②容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
③仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。
Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。
三、Docker安装
3.1、配置阿里源
cat <<EOF >> /etc/yum.repos.d/docker-ce.repo
docker-ce-stable
name=Docker CE Stable - $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/9/x86_64/stable/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
EOF
3.2、安装Docker
yum install -y docker-ce
3.3、启动Docker
cat <<EOF >>/etc/docker/daemon.json
{
"registry-mirrors": [
"https://0vmzj3q6.mirror.aliyuncs.com",
"https://docker.m.daocloud.io",
"https://mirror.baidubce.com",
"https://dockerhub.timeweb.cloud",
"https://vlgh0kqj.mirror.aliyuncs.com"
]
}
EOF
systemctl daemon-reload
systemctl enable --now docker
3.4、卸载Docker
yum remove docker-ce
rm -rf /var/lib/docker
四、Docker命令
4.1、Docker常用子命令
|---------|-----------------|
| 命令字 | 含义 |
| run | 从镜像创建并运行新的容器 |
| exec | 在运行的容器中执行命令 |
| ps | 列出容器 |
| build | 从Dockerfile构建镜像 |
| pull | 从注册库下载镜像 |
| push | 将镜像上传到注册库 |
| images | 列出镜像 |
| login | 登录到注册库 |
| logout | 从注册库登出 |
| search | 在Docker Hub搜索镜像 |
| version | 显示Docker版本信息 |
| info | 显示系统全局信息 |
4.2、Docker容器管理子命令
| 命令字 | 含义 |
|---|---|
| attach | 将本地标准输入、输出和错误流附加到正在运行的容器。 |
| commit | 从容器中的更改创建一个新的镜像。 |
| cp | 在容器和本地文件系统之间复制文件/文件夹。 |
| create | 基于镜像创建一个容器,但该容器不会启动,默认处于"created"状态 |
| diff | 查看容器文件系统或目录的更改。 |
| events | 获取来自服务器的实时事件。 |
| export | 导出容器的文件系统为tar归档。 |
| history | 显示镜像的历史记录。 |
| import | 从tar包导入内容以创建文件系统镜像。 |
| inspect | 返回Docker对象的低级别信息。 |
| kill | 杀死一个或多个运行的容器。 |
| load | 从tar归档加载镜像。 |
| logs | 获取容器的日志。 |
| pause | 暂停一个或多个容器的所有进程。 |
| port | 列出容器端口映射或特定的映射。 |
| rename | 重命名容器。 |
| restart | 重新启动一个或多个容器。 |
| rm | 删除一个或多个容器。 |
| rmi | 删除一个或多个镜像。 |
| save | 保存一个或多个镜像到tar归档(默认情况下作为流传输到标准输出)。 -o,指定输出目标路径 |
| start | 启动一个或多个已停止的容器。 |
| stats | 显示实时流容器资源使用统计信息。 |
| stop | 停止一个或多个运行的容器。 |
| tag | 为镜像创建一个标签,该标签引用另一个镜像。 |
| top | 显示正在运行的进程的容器。 |
| unpause | 在一个或多个容器中恢复所有进程。 |
| update | 更新一个或多个容器的配置。 |
| wait | 阻塞直到一个或多个容器停止,然后打印它们的退出代码。 |
4.3、Docker全局选项
| 命令字 | 含义 |
|---|---|
| --config string | 指定客户端配置文件的路径(默认是"/root/.docker")。 |
| -c, --context string | 指定用于连接到Docker daemon的上下文的名称。这个选项会覆盖DOCKER_HOST环境变量和通过"docker context use"设定的默认上下文。 |
| -D, --debug | 启用调试模式,提供更多的日志信息。 |
| -H, --host list | 指定要连接到Docker daemon的套接字。 |
| -l, --log-level string | 设置日志级别(如"debug", "info", "warn", "error", "fatal")。默认是"info"。 |
| --tls | 使用TLS,由 --tlsverify 选项隐含。 |
| --tlscacert string | 只信任由该CA签名的证书。 |
| --tlscert string | 指定TLS证书文件的路径。 |
| --tlskey string | 指定TLS密钥文件的路径。 |
| --tlsverify | 使用TLS并验证远程服务器。 |
| -v, --version | 打印版本信息并退出。 |