一、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环境 |
- Dockerfile文件配置好之后,就可以执行build命令构建镜像
# . 表示Dockerfile所在的目录,名为Dockerfile 的文件作为 Dockerfile |
3、安装Docker-Compose
- Docker-Compose是一个用来定义和运行复杂应用的Docker工具
- Github地址:https://github.com/docker/compose
- 安装包下载地址:https://github.com/docker/compose/releases
|
- 使用docker-compose启动nginx服务
- 新建配置文件:
docker-compose.yml
编辑内容如下:
version: "2" |
- 执行:
docker-compose -f docker-compose.yml config
校验配置文件是否有问题 - 没问题就可以启动服务了,docker-compose默认会找当前目录下的
docker-compose.yml
- 所以我们的命令可以直接使用:
docker-compose config
- 然后在配置文件的同级目录执行:
# 校验配置文件是否有问题 |
- yml的配置详情,可参考
- 官方文档:https://docs.docker.com/compose/compose-file/compose-versioning/
- https://docs.docker.com/compose/compose-file/compose-file-v3/
四、Docker本地仓库
- 搭建私有仓库有:registry、harbor、neuxs(除了可以作为maven仓库,也可以创建docker仓库)
- registry是docker官方镜像,命令行版的本地私有仓库
- harbor是在registry基础上进行封装,有可视化操作界面
- 下面是harbor的搭建与使用
1、Harbor
# 下载 |
- 网页访问:http://192.168.32.129:8000/ 输入账号密码,即可进入harbor仓库界面
- 因为我们不是https启动的,所以修改docker的配置/etc/docker/daemon.json文件
insecure-registories
添加我们的仓库,不需要对应证书校验
# 我的内容比较少,我直接执行下面的命令覆盖daemon.json文件 |