一、Docker概述
- Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
- Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
- 容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
- Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版),我们用社区版就可以了。
- 基于Linux内核的Cgroup,Namespace,以及AUFS等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术,由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。
- 最初实现是基于LXC,从0.7以后开始去除LXC,转而使用自行开发的Libcontainer,从1.1开始,则进一步演进为使用runC和Containerd。
- Docker在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护,使得Docker技术比虚拟机技术更为轻便、快捷。
1、Docker的应用场景
- Web 应用的自动化打包和发布。
- 自动化测试和持续集成、发布。
- 在服务型环境中部署和调整数据库或其他的后台应用。
- 从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。
2、核心概念
- Client:Client 就是Docker的客户端
- Image:image(镜像):是一个极度精简版的Linux程序运行环境,比如vi这种基本的工具都没有,它是需要定制化Build的一个“安装包” 。 Dockerfile 用来创建一个自定义的image,包含用户指定的软件依赖等,使用build命令进行创建。
- Container:Container (容器):是Image 的实例,共享系统内核
- Daemon:Daemon(守护进程):是创建和运行Container的Linux守护进程,可以理解为Docker Container的Container
- Registry:Registry/Hub(镜像仓库):你可以在Docker Hub上轻松下载大量已经容器化好的应用镜像,即拉即用,有些是Docker官方维护的,有些是开发者自发上传分享的。
二、Docker的安装
1、配置环境
- 卸载旧版本
- 安装yum-utils,yum-utils: 是一个软件包的集合名称,它包含了一系列有用的YUM工具,如yum-config-manager(用于管理YUM源)、yum-deprecated、yum-groups-manager(管理软件组)、yum-versionlock(锁定软件包版本)等
- 设置docker仓库
# 删除旧版本 |
2、安装docker依赖
- 安装最新版本的 Docker Engine-Community 和 containerd
|
安装指定版本的docker
- 使用
yum list docker-ce --showduplicates | sort -r
命令 - 列出并排序您存储库中可用的版本
[root@localhost ~]# yum list docker-ce --showduplicates | sort -r |
- 例如:
docker-ce-26.1.0
- 命令格式:
yum install docker-ce-26.1.0 docker-ce-cli-26.1.0 containerd.io docker-buildx-plugin docker-compose-plugin
- 其中:docker-ce、docker-ce-cli、和containerd.io是Docker的核心组件,
- 分别代表Docker Community Edition、Docker命令行工具和底层容器运行时。
- 而docker-buildx-plugin和docker-compose-plugin则是两个附加的插件
- docker-buildx-plugin (BuildKit): Docker Buildx 是一个构建工具,它扩展了Docker的构建功能,允许你跨多架构构建容器镜像,比如同时为amd64、arm64等多种CPU架构生成镜像。
- docker-compose-plugin: Docker Compose 是一个用于定义和运行多容器Docker应用的工具。通过一个YAML文件,你可以定义一组相关联的服务及其网络、卷等配置,然后使用一个命令来启动、停止或重建所有的服务。
3、启动docker
# 启动docker |
4、配置镜像加速
- 国内从 DockerHub 拉取镜像有时会遇到困难,此时可以配置镜像加速器。
# 配置docker镜像加速,清华大学镜像加速 |
三、Docker的使用
1、常用命令
- docker的一些常用命令
命令 | 详解 |
---|---|
docker search | 搜索镜像 |
docker pull | 获取镜像 |
docker images | 列出镜像 |
docker run | 运行镜像 |
docker ps | 查看后台运行的容器 |
docker rm | 删除容器 |
docker rmi | 删除镜像 |
docker cp | 在host和container之间拷贝文件 |
docker commit | 保存改动为新的镜像 |
docker build | 构建镜像 |
- 使用示例:
# 从 Docker Hub 查找所有镜像名包含 openjdk,并且收藏数大于 1 的镜像 |
2、Dockerfile
- Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。
- 1、FROM 指定了基础镜像
- 2、MAINTAINER 描述这个镜像的作者,以及联系方式(可选)
- 3、LABEL 镜像的标签信息 (可选)
- 4、ENV 环境变量配置
- 5、RUN 在构建镜像时,需要执行的 shel1 命令
- 6、ADD 将主机中的指定文件复制到容器的目标位置,可以简单理解为 cp 命令
- 7、WORKDIR 设置容器中的工作目录,如果该目录不存在,那么会自己创建
- 8、VOLUME 镜像数据卷绑定,将主机中的指定目录挂载到容器中
- 9、EXPOSE 设置容器启动后要暴露的端口
- 10、CMD 作用是描述镜像构建完成后,启动容器时默认执行的脚本
- 11、ENTRYPOINT 和CMD的指令作用一样,不同点:ENTRYPOINT不会被运行容器时指定的命令所覆盖,而CMD 会被覆盖
- 指令示例如下:
# 1、先指定当前镜像的基础镜像是什么 |
简单的springboot使用Dockerfile示例:
# 使用java环境 |