探索 Docker:容器化技术的未来

1. 引言

在传统的软件开发和部署过程中,经常会遇到诸如"开发环境和生产环境不一致"、"依赖环境冲突"、"部署困难"等问题。为了解决这些问题,容器化技术应运而生。Docker 作为最受欢迎的容器平台之一,已经在业界得到广泛应用。它不仅简化了软件的开发、交付和运维流程,还提高了系统的可移植性、可扩展性和安全性。


2. 什么是 Docker?

Docker 是一个开源的容器平台,旨在帮助开发人员轻松地打包、交付和运行应用程序。通过 Docker,开发人员可以将应用程序及其所有依赖项(如代码、运行时环境、库、配置文件等)打包到一个称为 Docker 镜像的独立可执行软件包中。这些 Docker 镜像可以在任何装有 Docker 引擎的环境中运行,无需进行额外的配置。

  1. 镜像(Image):容器的基础,是一个只读模板,包含了运行容器所需的所有文件和配置信息。可以将镜像看作是容器的源代码,通过它可以创建多个容器实例。

  2. 容器(Container):从镜像创建的可运行实例。每个容器都是相互隔离的、独立运行的环境,包含了应用程序及其运行时环境。

  3. 仓库(Repository):用于存储和组织镜像的集合。可以将镜像推送到仓库中,也可以从仓库中拉取镜像到本地。


3. Docker 的优势

  1. 环境一致性:Docker 可以确保在不同的环境中运行相同的应用程序,消除了"开发环境和生产环境不一致"的问题。

  2. 快速部署:Docker 镜像可以快速部署,无需进行复杂的配置和安装过程,大大提高了应用程序的交付速度。

  3. 资源隔离:每个 Docker 容器都运行在独立的环境中,相互之间互不干扰,有效地实现了资源隔离和应用程序间的解耦。

  4. 可扩展性:Docker 容器可以根据需要进行水平或垂直扩展,轻松应对不同规模和负载的需求。

  5. 持续集成和持续交付(CI/CD):Docker 与 CI/CD 流程无缝集成,使得自动化部署和交付成为可能,加快了软件开发周期。

4. Docker的安装

1.卸载旧版

首先如果系统中已经存在旧的Docker,则先卸载:

XML 复制代码
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 常见的命令

  1. docker run:创建并启动一个容器。

  2. docker stop:停止一个正在运行的容器。

  3. docker start:启动一个已经停止的容器。

  4. docker restart:重启一个正在运行的容器。

  5. docker rm:删除一个已经停止的容器。

  6. docker ps:列出当前正在运行的容器。

  7. docker images:列出本地所有的镜像。

  8. docker pull:从 Docker 镜像仓库中拉取一个镜像。

  9. docker push:将一个镜像推送到 Docker 镜像仓库。

  10. docker exec:在一个正在运行的容器中执行命令。

  11. docker logs:查看容器的日志输出。

  12. 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. 总结

  1. 引言中介绍了传统软件开发和部署中的常见问题,并介绍了容器化技术的出现以及 Docker 作为一个受欢迎的容器平台。
  2. Docker 的优势部分可以进一步展开,如提高开发效率、实现环境一致性、简化部署流程、提升系统可移植性和安全性等。
  3. Docker 的安装过程需要卸载旧版本、配置 yum 库、安装 Docker、启动和验证,并介绍了如何配置镜像加速以提高镜像下载速度。
  4. Docker 容器和镜像的概念介绍了容器为什么可以直接下载使用、Docker 的工作原理以及基础代码解读等内容。
  5. Docker 常见的命令部分可以列举一些常用的命令和其作用,如 docker rundocker psdocker stop 等。
  6. 数据卷的概念介绍了数据卷的作用、创建方法、常用命令以及为什么要使用数据卷等。
相关推荐
川石课堂软件测试23 分钟前
性能测试|docker容器下搭建JMeter+Grafana+Influxdb监控可视化平台
运维·javascript·深度学习·jmeter·docker·容器·grafana
瓜牛_gn2 小时前
mysql特性
数据库·mysql
昌sit!6 小时前
K8S node节点没有相应的pod镜像运行故障处理办法
云原生·容器·kubernetes
Yaml47 小时前
Spring Boot 与 Vue 共筑二手书籍交易卓越平台
java·spring boot·后端·mysql·spring·vue·二手书籍
追风林8 小时前
mac 本地docker-mysql主从复制部署
mysql·macos·docker
A ?Charis9 小时前
Gitlab-runner running on Kubernetes - hostAliases
容器·kubernetes·gitlab
Hsu_kk9 小时前
MySQL 批量删除海量数据的几种方法
数据库·mysql
编程学无止境9 小时前
第02章 MySQL环境搭建
数据库·mysql
城南vision9 小时前
Docker学习—Docker核心概念总结
java·学习·docker
wclass-zhengge10 小时前
Docker篇(Docker Compose)
运维·docker·容器