1. 引言
在传统的软件开发和部署过程中,经常会遇到诸如“开发环境和生产环境不一致”、“依赖环境冲突”、“部署困难”等问题。为了解决这些问题,容器化技术应运而生。Docker 作为最受欢迎的容器平台之一,已经在业界得到广泛应用。它不仅简化了软件的开发、交付和运维流程,还提高了系统的可移植性、可扩展性和安全性。
2. 什么是 Docker?
Docker 是一个开源的容器平台,旨在帮助开发人员轻松地打包、交付和运行应用程序。通过 Docker,开发人员可以将应用程序及其所有依赖项(如代码、运行时环境、库、配置文件等)打包到一个称为 Docker 镜像的独立可执行软件包中。这些 Docker 镜像可以在任何装有 Docker 引擎的环境中运行,无需进行额外的配置。
-
镜像(Image):容器的基础,是一个只读模板,包含了运行容器所需的所有文件和配置信息。可以将镜像看作是容器的源代码,通过它可以创建多个容器实例。
-
容器(Container):从镜像创建的可运行实例。每个容器都是相互隔离的、独立运行的环境,包含了应用程序及其运行时环境。
-
仓库(Repository):用于存储和组织镜像的集合。可以将镜像推送到仓库中,也可以从仓库中拉取镜像到本地。
3. Docker 的优势
-
环境一致性:Docker 可以确保在不同的环境中运行相同的应用程序,消除了“开发环境和生产环境不一致”的问题。
-
快速部署:Docker 镜像可以快速部署,无需进行复杂的配置和安装过程,大大提高了应用程序的交付速度。
-
资源隔离:每个 Docker 容器都运行在独立的环境中,相互之间互不干扰,有效地实现了资源隔离和应用程序间的解耦。
-
可扩展性:Docker 容器可以根据需要进行水平或垂直扩展,轻松应对不同规模和负载的需求。
-
持续集成和持续交付(CI/CD):Docker 与 CI/CD 流程无缝集成,使得自动化部署和交付成为可能,加快了软件开发周期。
4. Docker的安装
1.卸载旧版
首先如果系统中已经存在旧的Docker,则先卸载:
yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine
2.配置Docker的yum库
首先要安装一个yum工具:
yum install -y yum-utils
安装成功后,执行命令,配置Docker的yum源:
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
3.安装Docker
yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
4. 启动与校验
# 启动Docker
systemctl start docker
# 停止Docker
systemctl stop docker
# 重启
systemctl restart docker
# 设置开机自启
systemctl enable docker
# 执行docker ps命令,如果不报错,说明安装启动成功
docker ps
5.配置镜像加速
这里以阿里云镜像加速为例。
5.1.注册阿里云账号
首先访问阿里云网站:
阿里云-计算,为了无法计算的价值
注册一个账号。
5.2.开通镜像服务
在首页的产品中,找到阿里云的容器镜像服务:
首次可能需要选择立刻开通,然后进入控制台。
5.3.配置镜像加速
找到镜像工具下的镜像加速器:
页面向下滚动,即可找到配置的文档说明:
# 创建目录
mkdir -p /etc/docker
# 复制内容,注意把其中的镜像加速地址改成你自己的
tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://xxxx.mirror.aliyuncs.com"] } EOF
# 重新加载配置
systemctl daemon-reload
# 重启Docker
systemctl restart docker
6. Docker容器和镜像的概念介绍
6.1 Docker为什么下载就可以使用?不想要配置环境等吗?
Docker会下载(拉取)运行应用程序所需的一切:代码、运行时环境、系统工具、库 等,镜像是一个可移植的软件打包方式,使应用程序可以在任何装有 Docker 引擎的环境中运行,而不需要额外的配置。比如配置文件什么都有。
6.2 docker的工作原理?
守护进程主要作用是在系统中提供某种服务或功能,并在系统启动时自动启动,持续运行以处理特定的任务或事件。Docker底层就有这样的机制,存在这一个守护线程,持续监视着服务的变化。当进行了Docker run命令,守护线程就会查看本地仓库是否含有这个镜像,没有就会到镜像仓库去下载。
6.3 docker的基础代码解读
-p 宿主机端口:容器端口
为什么要进行端口映射:容器是对外隔离的,对内开放,所以需要宿主机和容器的端口进行映射,这样就可以通过使用宿主机当中介进行访问了。
镜像名称规范: 例如上述:mysql
- 镜像名称一般分两部分组成:[repository]:[tag]
- repository就是镜像名
- tag是镜像的版本
- 在没有指定tag时,默认是latest,代表最新版本的镜像
7. Docker 常见的命令
-
docker run:创建并启动一个容器。
-
docker stop:停止一个正在运行的容器。
-
docker start:启动一个已经停止的容器。
-
docker restart:重启一个正在运行的容器。
-
docker rm:删除一个已经停止的容器。
-
docker ps:列出当前正在运行的容器。
-
docker images:列出本地所有的镜像。
-
docker pull:从 Docker 镜像仓库中拉取一个镜像。
-
docker push:将一个镜像推送到 Docker 镜像仓库。
-
docker exec:在一个正在运行的容器中执行命令。
-
docker logs:查看容器的日志输出。
-
docker build:根据 Dockerfile 构建一个自定义镜像。
8. 什么是数据卷?
数据卷是 Docker 中用于持久化存储数据的机制,它可以将宿主机文件系统中的目录或文件映射到容器内部。这样,容器可以通过数据卷访问宿主机上的文件,也可以与其他容器共享数据。
Docker 数据卷是 Docker 容器中的一种持久化数据存储方式,允许容器与宿主机或其他容器之间共享和持久化数据。数据卷可以在容器之间共享数据,同时还可以保留容器中的数据,即使容器被删除或重新创建,数据仍然会保留。
容器内的文件通过数据卷宿主机的文件进行间接的映射。
8.1 数据卷的创建
使用 -v
参数:在运行容器时,可以使用 -v
参数来创建一个数据卷。
例如:docker run -d --name nginx -p 80:80 -v html:/usr/share/nginx/html nginx
其中 html 为数据卷的名称,/usr/share/nginx/html 容器内数据卷的目录。
也可以挂载到指定本地目录。
当创建容器时,如果挂载了数据卷且数据卷不存在,会动创建数据卷。
挂载后就会进行双向绑定,然后宿主机会有各种高级操作的命令,就可以对文件内容进行修改。
8.2 数据卷常用的命令
8.3 为什么要使用数据卷呢?
虽然docker中,每个容器都有独立的运行环境,但是docker只有系统运行所必须的依赖环境,目的是为了容器的轻量级,所以不会含有vi命令编辑文件,但我们又想编辑容器中的配置文件,或者运行文件,这时候就需要使用数据卷,来将docker容器中的文件与宿主机的文件进行双向绑定,但宿主机的文件进行修改,docker容器中的文件也会进行自动修改。
9. 总结
- 引言中介绍了传统软件开发和部署中的常见问题,并介绍了容器化技术的出现以及 Docker 作为一个受欢迎的容器平台。
- Docker 的优势部分可以进一步展开,如提高开发效率、实现环境一致性、简化部署流程、提升系统可移植性和安全性等。
- Docker 的安装过程需要卸载旧版本、配置 yum 库、安装 Docker、启动和验证,并介绍了如何配置镜像加速以提高镜像下载速度。
- Docker 容器和镜像的概念介绍了容器为什么可以直接下载使用、Docker 的工作原理以及基础代码解读等内容。
- Docker 常见的命令部分可以列举一些常用的命令和其作用,如
docker run
、docker ps
、docker stop
等。 - 数据卷的概念介绍了数据卷的作用、创建方法、常用命令以及为什么要使用数据卷等。