Docker 是一款强大的容器化平台,通过其轻量级的容器技术,使应用程序的开发、部署和管理变得更加便捷和高效。本文将深入探讨 Docker 的安装过程,并详细解析其基本概念、组件及常用命令,以帮助读者充分理解和熟练使用 Docker。企业部署一般都是采用 Linux 操作系统,而其中又数 CentOS 发行版占比最多,因此我们在 CentOS 下安装 Docker。
一、Docker里的基本概念
1、容器(Container)
容器是 Docker 的核心概念之一。它是一个独立运行的软件包,包含应用程序和其所有依赖项,例如库、运行时和系统工具。容器通过 Docker 引擎进行管理,具有轻量级和可移植性的特点。
这么说是不是有点抽象,下面举个生动点的例子:
想象一下容器就像是一个移动的盒子,但不是普通的盒子,而是一个包含应用程序、运行环境以及所有所需依赖的特殊盒子。这个盒子具有一定的隔离性,就像是一个独立的小世界,里面的应用程序不会干扰外部的系统。
在这个盒子里,应用程序可以自己携带所需的一切,无论是代码、库、配置文件还是其他依赖,就像是一个自给自足的小单元。这使得这个盒子可以在任何支持容器技术的地方运行,而不会受到外部环境的影响。
容器就像是移动的、自包含的应用程序集装箱,可以在任何地方顺利运行,让软件的开发、测试和部署变得更加简便和可靠。
容器的好处在于它们轻量、快速,而且非常灵活。你可以在一台计算机上开发和测试容器,然后轻松地将它们部署到另一台计算机上,而不必担心环境差异。这种便携性和一致性让容器成为现代软件开发和部署的理想选择。
2、镜像(Image)
镜像是容器的基础,是一个只读的文件,包含了应用程序运行所需的所有信息,包括代码、运行时、库、环境变量等。镜像是容器的模板,可以通过它创建并运行多个相同的容器。
镜像是将应用程序及其需要的系统函数库、环境、配置、依赖打包而成。
镜像是分层结构,每一层称为一个Layer:
- Baselmage层:包含基本的系统函数库、环境变量、文件系统。
- Entrypoint:入口,是镜像中应用启动的命令。
- 其它:在Baselmage基础上添加依赖、安装程序、完成整个应用的安装和配置。
除了很多被封装好的镜像外,我们也可以用 Dockerfile 来自定义镜像,这里仅作了解。
3、仓库(Repository)
Docker 仓库是用来存储和共享镜像的地方。
官方仓库是Docker Hub,用户可以在其中找到并下载各种官方和社区创建的镜像。
镜像仓库 (Docker Registry) 有公共的和私有的两种形式:
- 公共仓库:例如 Docker 官方的 Docker Hub,国内也有一些云服务商提供类似于 Docker Hub 的公开服务,比如网易云镜像服务、DaoCloud 镜像服务、阿里云镜像服务等。
- 私有仓库:除了使用公开仓库外,用户还可以在本地搭建私有 Docker Registry,企业自己的镜像最好是采用私有 Docker Registry 来实现。
我们可以根据需要,通过更改镜像仓库源的方式,灵活选择镜像仓库。
二、安装Docker
Docker 分为 CE 和 EE 两大版本。CE 即社区版(免费,支持周期7个月),EE 即企业版,强调安全,付费使用,支持周期24个月。Docker CE 分为 stable test 和 nightly 三个更新频道。官方网站上有各种环境下的安装指南,这里主要介绍 Docker CE 在 CentOS 上的安装。
Docker CE 支持64位版本 CentOS 7,并且要求内核版本不低于 3.10,CentOS 7 满足最
低内核的要求,所以我们在 CentOS 7 安装Docker。
1、卸载已有的Docker
如果系统中已经安装了旧版本的 Docker,建议先将其卸载。
可以使用以下命令:
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine \
docker-ce
这里的 \ 是换行的意思,告诉计算机我们的一条指令在当前行没有结束,需要继续读取下一行。
这个命令卸载系统中已存在的 Docker 软件包。但不会删除容器、镜像等数据。
2、CentOS7安装Docker
接下来,我们将安装 Docker。
首先,安装一些 yum 工具:
yum install -y yum-utils \
device-mapper-persistent-data \
1vm2 --skip-broken
然后,更新本地镜像源为阿里源:
#设置docker镜像源
yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo
yum makecache fast
安装 Docker:
sudo yum install -y docker-ce #-y表示按默认配置安装
3、启动Docker
① 关闭防火墙
Docker应用需要用到各种端口,逐一去修改防火墙设置。 非常麻烦,因此建议大家直接关
闭防火墙!启动docker前,一定要关闭防火墙!!!
#关闭
systemct1 stop fi rewalld
#禁止开机启动防火墙
systemct1 disable firewalld
② 启动Docker
启动 Docker 服务,并设置为开机自启:
sudo systemctl start docker
sudo systemctl enable docker
现在,Docker 已经成功安装并启动在 CentOS 7 上。
输入命令,可以查看 Docker 版本:
docker -v
这将显示 Docker 的版本信息,确认安装成功。
至此,我们已经完成了 CentOS 7 上 Docker 的安装和配置。
③ 配置镜像加速器
由于 Docker 的官方镜像源在国外,网速较差,我们可以根据需要设置国内镜像:
(建议自行百度,查阅参考 阿里云官方的最新镜像加速文档)
三、Docker的基本操作
1、容器操作
Docker 提供了许多命令来管理容器,以下是一些常见的 Docker 容器操作命令:
① 创建容器
docker run [options] image [command] [args...]
例如:
docker run -it ubuntu /bin/bash
这将创建一个以交互模式运行的 Ubuntu 容器。
② 列出所有容器
docker ps -a
这将列出所有容器的详细信息,包括运行中的和已停止的容器。
③ 停止容器
docker stop container_id
通过容器的 ID 或者名称停止运行中的容器。
④ 删除容器
docker rm container_id
删除已停止的容器。
⑤ 启动已停止的容器
docker start container_id
通过容器的 ID 或者名称启动已停止的容器。
⑥ 重启容器
docker restart container_id
通过容器的 ID 或者名称重启容器。
⑦ 进入容器
docker exec -it container_id /bin/bash
以交互模式进入正在运行的容器。
⑧ 查看容器日志
docker logs container_id
查看容器的标准输出。
⑨ 查看容器统计信息
docker stats container_id
查看容器的资源使用情况。
⑩ 查看容器详细信息
docker inspect container_id
查看有关容器的详细信息,包括配置、网络设置等。
⑪ 复制文件到/从容器
docker cp source_path container_id:destination_path
docker cp container_id:source_path destination_path
将文件复制到或从容器中。
2、镜像操作
Docker 提供了丰富的命令来管理镜像,以下是一些常见的 Docker 镜像操作命令:
① 查找镜像
docker search image_name
在 Docker Hub 上查找镜像。
② 拉取镜像
docker pull image_name
从 Docker Hub 拉取指定的镜像。
③ 列出本地镜像
docker images
列出本地已经下载的镜像。
④ 删除本地镜像
docker rmi image_id
删除本地的镜像。
⑤ 构建镜像
docker build -t image_name:tag
根据当前目录中的 Dockerfile 构建一个新的镜像。
⑥ 推送镜像到仓库
docker push image_name:tag
将本地的镜像推送到远程镜像仓库。
⑦ 查看镜像历史记录
docker history image_name
⑧ 导出镜像为文件
docker save -o output_file.tar.gz image_name
将镜像打包为一个文件。
⑨ 从文件中导入镜像
docker load -i input_file.tar.gz
从文件中导入一个镜像。
⑩ 查看镜像详细信息
docker inspect image_name
查看有关镜像的详细信息,包括配置、挂载点等。
3、数据卷操作
数据卷的建立是为了解决容器与数据耦合的问题。Docker 数据卷是一种用于在容器之间共享和持久化数据的机制。它提供了一种绕过容器文件系统的方式,将数据存储在主机上,并使多个容器能够访问相同的数据。
数据卷 (volume) 是一个虚拟目录,指向宿主机文件系统中的某个目录。
Docker 数据卷的原理是通过将容器与主机上的目录或预定义的卷进行关联,使得数据能够持久化保存,并且可以被多个容器之间共享。这种机制为容器提供了灵活且可靠的数据存储方式。
以下是一些常见的 Docker 数据卷操作命令:
① 创建数据卷
docker volume create volume_name
使用 docker volume create 命令可以创建一个新的数据卷。
每个数据卷都有一个唯一的名称,用于标识它。
② 列出所有数据卷
docker volume ls
列出所有数据卷的信息。
③ 查看数据卷详细信息
docker volume inspect volume_name
查看有关数据卷的详细信息,包括挂载点等。
④ 删除数据卷
docker volume rm volume_name
删除指定的数据卷。
⑤ 将数据卷挂载到容器
当运行容器时,可以使用 -v 或 --volume 选项将一个或多个数据卷挂载到容器的指定路径。这样,容器就可以访问数据卷上的数据:
docker run -v volume_name:/container_path image_name
这将把数据卷 volume_name 挂载到容器的 /container_path。
数据卷的挂载具有共享性和持久性:
- 多个容器可以同时挂载同一个数据卷,实现数据在容器之间的共享。这样,它们可以读取和写入相同的数据卷,实现数据的一致性和共享。
- 数据卷上的数据是持久化存储的,即使容器停止或删除,数据卷仍然存在,可以被其他容器重新挂载。这使得数据在容器的生命周期内得以保留。
⑥ 从容器中复制数据到数据卷
docker cp source_path container_id:/volume_name/destination_path
将容器中的数据复制到指定的数据卷。
⑦ 从数据卷中复制数据到容器
docker cp container_id:/volume_name/source_path destination_path
将数据卷中的数据复制到容器的指定路径。
⑧ 挂载匿名数据卷
docker run -v /host_path image_name
使用匿名数据卷将宿主机路径 /host_path 挂载到容器。
⑨ 删除容器时保留数据卷
docker run -v volume_name:/container_path --rm image_name
在删除容器时保留数据卷。
四、Docker-Compose的使用
1、Docker-Compose介绍
Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。通过一个简单的 docker-compose.yml 文件帮我们快速的部署分布式应用,定义应用的服务、网络和卷等配置,而无需手动一个个创建和运行容器。
以下是一个简单的 docker-compose.yml 文件:
version: '3'
services:
web:
image: nginx:latest
ports:
- "8080:80"
db:
image: postgres:latest
environment:
POSTGRES_PASSWORD: example
通过运行 docker-compose up 命令,即可启动包含 Nginx 和 PostgreSQL 服务的 Docker 应用。
2、部署微服务集群
为了更好地理解 Docker 的应用,我们可以通过一个简单的实战案例来深入了解。假设我们要搭建一个简单的微服务集群,包括 Nacos 作为服务注册与发现中心、MySQL 数据库、以及用户服务、订单服务和网关服务。
① 准备工作
确保已经安装 Docker 和 Docker Compose。创建一个项目目录,例如 microservices,在该目录下放置你的 Docker Compose 配置文件。
② 编写Docker-Compose文件
创建docker-compose.yml 文件,内容如下:
version: "3.2"
services:
nacos:
image: nacos/nacos-server
environment:
MODE: standalone
ports:
- "8848:8848"
mysq1:
image: mysql:5.7.25
environment:
MYSQL_ROOT_PASSWORD: 123
volumes:
- "SPhD/mysql/data:/var/lib/mysql"
- "SPhD/mysql/conf:/etc/mysql/conf.d/"
userservice:
build: ./user-service
orderservice:
build: ./order-service
gateway:
build: ./gateway
ports:
- "10010:10818"
③ 构建和启动微服务集群
在项目目录中执行以下命令:
docker-compose up -d --build
通过运行 docker-compose up 命令,即可构建并启动所有定义的服务,并以后台方式运行。等待一段时间,直到所有服务完全启动。
④ 查看微服务状态
使用以下命令查看当前运行的服务:
docker-compose ps
通过这个案例,我们可以看到 Docker 的强大之处,它使得应用的构建、运行和部署变得非常简单且可重复。
五、Docker总结
Docker 的安装非常简单,就像安装一个应用程序一样,只需使用包管理器或者 Docker Desktop,在各种操作系统上都能轻松完成。掌握 Docker 的基础知识和常用命令,能够更好地利用和理解它的功能。Docker 之所以受欢迎,是因为它提供了一种轻量级、便携且高效的容器化解决方案。它让开发者可以灵活地部署应用程序,保证在不同环境中的一致性和高效性。通过实际操作案例,我们学会了如何使用 Docker 来创建一个简单的 Web 应用,展示了它的强大功能和易用性。随着容器技术的不断进步,Docker 必将继续在现代软件开发中扮演重要角色,为开发者提供更便捷、高效的工具和环境。