探索 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. 数据卷的概念介绍了数据卷的作用、创建方法、常用命令以及为什么要使用数据卷等。
相关推荐
自律的kkk14 分钟前
docker配置镜像加速器
运维·docker·容器
阿华的代码王国36 分钟前
【JavaEE】多线程编程引入——认识Thread类
java·开发语言·数据结构·mysql·java-ee
qq_35323353891 小时前
【原创】java+springboot+mysql高校社团网系统设计与实现
java·spring boot·mysql
ps酷教程1 小时前
nginx进阶篇(二)
nginx
布洛芬颗粒1 小时前
JAVA基础面试题(第二十二篇)MYSQL---锁、分库分表!
java·开发语言·mysql
双普拉斯1 小时前
微信小程序点赞动画特效实现
nginx·微信小程序·notepad++
陈小唬2 小时前
云服务器docker中Hbase整合java-api需要放行的接口
服务器·docker·hbase
苏少朋2 小时前
Docker安装 ▎Docker详细讲解 ▎数据卷挂载 ▎Nginx安装理解
linux·nginx·docker·容器
晚枫20002 小时前
kafka发送事件的几种方式
spring boot·分布式·docker·容器·kafka·intellij-idea·linq
比花花解语2 小时前
怎么使用nginx把80端口代理到想要的端口?
运维·nginx