Docker:容器化技术的革命,简化应用部署与管理的利器

一、前言

在大学里学习计算机时,当你想"借鉴"别人的项目或者别的同学想要"借鉴"你的项目时,有没有遇到这么一种情况。

"诶,怎么你的项目运行不起来啊,报错!"

"怎么可能,在我电脑上跑得好好的,你没乱改我代码吧?"

在早期公司里,也曾出现过开发人员开发完代码后,交给运维人员或测试人员上线时,项目运行不起来或出错的情况。那么这是为什么呢?因为大家的电脑环境和配置不一样啊!

比如说JDK版本不一样、比如说别人的电脑上没有安装依赖或者依赖版本不一致、比如说数据库的配置(如URL、用户名、密码等)不同、比如说操作系统、配置文件、环境变量、端口冲突等等。

在Docker出现之前,人们通常使用物理服务器或虚拟机来部署项目。他们需要手动安装和配置操作系统、运行时环境、依赖库和应用程序,然后进行测试和部署。这种方式需要花费大量时间和精力来管理和维护环境,同时也存在着环境配置不一致、难以迁移和扩展等问题,这成为人们部署项目时的一个痛点,为Docker的诞生埋下伏笔。

二、Docker简介

Docker是一种开源的容器化平台,它可以让开发人员将应用程序及其依赖项打包到一个独立的、可移植的容器中,然后部署到任何环境中,实现了应用程序的快速部署和环境的一致性。

Docker的目标是解决应用程序在不同环境中部署和运行时出现的问题,例如开发环境和生产环境之间的差异、依赖项冲突、隔离性和可移植性等。通过使用Docker,开发人员可以更加高效地构建、打包、部署和运行应用程序,从而提高开发和部署的速度和可靠性。容器化技术是继虚拟机技术之后的一种新的应用部署方式。

三、Docker的核心概念

3.1 容器

容器(Container):Docker容器是由Docker镜像创建的运行实例,Docker的基本单位。它包含了一个完整的文件系统和所需的所有应用程序、库和依赖项、运行时环境等。容器可以启动、停止、移动和删除。

3.2 镜像

镜像(Image):Docker镜像是一个只读的模板,用于创建Docker容器。它包含了一个完整的文件系统和启动所需的所有应用程序、库和依赖项。

3.3 仓库

仓库(Repository):Docker仓库是用于存储和分发Docker镜像的地方。它可以是公共的,也可以是私有的。Docker Hub是最流行的公共Docker仓库,您也可以在自己的服务器上搭建私有仓库。

3.4 Dockerfile

Dockerfile是一种文本文件,其中包含有关如何构建Docker镜像的指令。它可以用于自动化构建和定制镜像。

四、Docker的安装与配置

当安装Docker之前,需要确保操作系统满足Docker的系统要求。Docker支持的操作系统包括Ubuntu、Debian、CentOS、Fedora、RHEL等。以下是Docker的安装步骤和基本操作命令。

4.1 安装Docker引擎

4.1.1 在Linux上安装Docker

使用包管理工具安装:对于大多数Linux发行版,可以使用包管理工具(如apt、yum、dnf等)来安装Docker。具体命令可能因发行版而异,可以查阅相应的文档进行安装。

Ubuntu系统

1.更新apt包索引并安装依赖包,以及添加Docker官方GPG密钥

bash 复制代码
sudo apt update
sudo apt install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

2.添加Docker的APT仓库

bash 复制代码
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

3.再次更新apt包索引,并安装Docker

bash 复制代码
sudo apt update
sudo apt install docker-ce

4.验证Docker是否安装成功

bash 复制代码
sudo docker --version

CentOS系统

1.安装必要的依赖包

bash 复制代码
sudo yum install -y yum-utils device-mapper-persistent-data lvm2

2.添加Docker的YUM仓库

bash 复制代码
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

3.安装Docker

bash 复制代码
sudo yum install docker-ce

4.启动Docker并设置开机自启动

bash 复制代码
sudo systemctl start docker
sudo systemctl enable docker

5.验证Docker是否安装成功

bash 复制代码
sudo docker --version

4.1.2 在Windows上安装Docker

在Windows上,可以通过Docker Desktop来安装Docker。Docker Desktop提供了一个易于使用的安装程序,可以帮助在Windows上安装Docker。

4.1.3 在macOS上安装Docker

在macOS上,同样可以使用Docker Desktop来安装Docker。Docker Desktop提供了一个简单的安装程序,可以帮助在macOS上安装Docker。

4.2 配置用户权限

在Linux上,为了能够在不使用sudo的情况下运行Docker命令,需要将自己的用户添加到docker用户组中。可以使用以下命令将用户添加到docker组:

bash 复制代码
sudo usermod -aG docker your_username

4.3 配置Docker引擎选项

一旦安装完成,可能需要对Docker引擎进行一些配置,例如设置镜像存储路径、配置网络选项、配置日志等。这些配置可以在Docker引擎的配置文件中进行设置。

4.4 安装Docker Compose

如果需要使用Docker Compose来定义和运行多个Docker容器,可以单独安装Docker Compose,并将其添加到系统路径中。

总的来说,安装和配置Docker的过程的具体步骤可能会因操作系统和个人需求而有所不同。可以根据自己的情况查阅官方文档或相关指南进行安装和配置。

五、Docker常用命令与操作

镜像操作

bash 复制代码
检索镜像:docker pull image_name
列出镜像:docker images 
删除镜像:docker rmi image_name

容器操作

bash 复制代码
启动容器:docker run image_name
列出容器:docker ps -a
停止容器:docker stop container_name
删除容器:docker rm container_name

其他常用命令

bash 复制代码
显示Docker系统信息:docker info
显示Docker帮助信息:docker --help
查看Docker版本:docker version

我自己就常用以下这些命令。

bash 复制代码
1.docker save xxxweb:1.1.1 | gzip > /root/xxxweb/xxxweb_1.1.1.tar
2.docker rmi xxxweb:1.1.1

六、创建Docker镜像

当创建Docker镜像时,需要编写一个Dockerfile来定义镜像的构建步骤。以下是一个简单的示例,展示如何创建一个基于Ubuntu的Docker镜像,并在其中安装一个简单的Python应用程序。

6.1 创建Dockerfile文件

创建一个名为Dockerfile的文件,并在其中添加以下内容:

bash 复制代码
# 使用Ubuntu作为基础镜像
FROM ubuntu:latest

# 设置工作目录
WORKDIR /app

# 复制当前目录下的app.py文件到容器中的/app目录
COPY app.py /app

# 安装Python和pip
RUN apt-get update && apt-get install -y python3 python3-pip

# 安装Flask
RUN pip3 install flask

# 暴露端口
EXPOSE 5000

# 运行应用程序
CMD ["python3", "app.py"]

这段Dockerfile的功能是基于Ubuntu镜像构建一个包含Python3、Flask框架和一个简单Python应用程序的镜像,并在容器启动时运行这个应用程序。

6.2 创建app.py

在同一目录下创建一个名为app.py的Python应用程序文件,内容如下:

bash 复制代码
from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello, Docker!'

if __name__ == '__main__':
    app.run(host='0.0.0.0')
  1. from flask import Flask:这行代码导入了Flask框架中的Flask类,用于创建一个Flask应用。
  2. app = Flask(__name__):这行代码创建了一个Flask应用实例,将其赋值给变量app。__name__是Python中一个特殊的变量,用于指示当前模块的名称。
  3. @app.route('/'):这是一个装饰器,用于定义一个路由。在这个例子中,@app.route('/')表示当用户访问根路径'/'时,执行下面定义的hello_world函数。
  4. def hello_world()::这是一个Python函数的定义,定义了一个名为hello_world的函数。
  5. app.run(host='0.0.0.0'):这行代码启动了Flask应用的开发服务器,并监听所有可用的网络接口。'0.0.0.0'表示监听所有网络接口,允许从任何网络地址访问应用程序。

以上这段代码创建了一个简单的Flask应用,当用户访问根路径时,会返回字符串'Hello, Docker!'。通过运行这个应用,可以在浏览器中访问http://localhost:5000 ,会看到显示Hello, Docker!的页面。

6.3 构建镜像

在终端中执行以下命令,构建Docker镜像。

bash 复制代码
docker build -t my-python-app .

6.4 运行镜像

执行以下命令,运行刚刚创建的镜像。

bash 复制代码
docker run -p 5000:5000 my-python-app

现在,我们可以在浏览器中访问 http://localhost:5000/, 应该可以看到显示"Hello, Docker!"的页面。这样,我们已经成功创建了一个Docker镜像并在其中运行了一个简单的Python应用程序。

七、Docker与持续集成/持续部署(CI/CD)的集成

Docker与持续集成/持续部署(CI/CD)的集成可以通过使用CI/CD工具(如Jenkins、GitLab CI、CircleCI等)和Docker来实现。下面是一个简单的示例,演示如何使用Jenkins和Docker来实现CI/CD流程:

7.1 准备工作

  1. 安装Docker和Jenkins,并确保它们能够正常运行。
  2. 在代码仓库中包含一个Dockerfile用于构建Docker镜像,并一个包含应用程序代码的代码库。

7.2 配置Jenkins

  1. 在Jenkins中安装Docker插件,以便Jenkins可以与Docker进行交互。
  2. 配置Jenkins的凭据,以便能够访问Docker守护程序。

7.3 创建Jenkins Pipeline

  1. 在Jenkins中创建一个Pipeline项目,用于执行CI/CD流程。
  2. Pipeline中包含阶段用于构建Docker镜像、测试应用程序、部署到测试环境、部署到生产环境等步骤。

下面是一个简单的Jenkins Pipeline示例代码,用于构建Docker镜像并部署到测试环境:

Groovy 复制代码
pipeline {
    agent any

    stages {
        stage('Build Docker Image') {
            steps {
                script {
                    docker.build("my-app:${env.BUILD_NUMBER}")
                }
            }
        }

        stage('Deploy to Test Environment') {
            steps {
                script {
                    docker.image("my-app:${env.BUILD_NUMBER}").push()
                    docker.image("my-app:${env.BUILD_NUMBER}").run("-p 8080:8080")
                }
            }
        }
    }
}

在这个示例中,Pipeline包含两个阶段:构建Docker镜像和部署到测试环境。在构建镜像阶段中,使用docker.build命令构建一个名为my-app的镜像,并带有构建号作为标签。在部署到测试环境阶段中,将构建好的镜像推送到Docker仓库,并运行该镜像作为一个容器,映射端口8080到容器的端口8080。

通过这样的CI/CD流程,团队可以在每次代码提交后自动构建镜像、测试应用程序并部署到测试环境,从而实现快速交付高质量的软件。

九、Docker的应用场景

Docker的应用场景非常广泛,它可以用于以下几个方面:

  • Web应用程序的部署:通过Docker可以快速部署一个Web应用程序,使得开发人员可以专注于开发,而不需要关心环境搭建和配置。
  • 微服务架构:Docker可以用于构建微服务架构,使得每个服务都可以独立部署和管理,提高了系统的可维护性和可扩展性。
  • 自动化部署:通过Docker可以自动化部署应用程序,使得部署过程变得简单、快速且可重复。
  • 容器云平台:容器云平台可以使得应用程序的部署和管理变得更加简单,通过Docker可以轻松地在云平台上创建和管理容器。

十、最后的话

本文简单地介绍了Docker的基本概念、使用方法和某些技术,帮助开发人员更好地利用Docker进行应用程序的容器化管理。Docker的灵活性和便捷性使得应用程序的开发、部署和运行变得更加简单高效。

能力一般,水平有限,本文可能存在纰漏或错误,如有问题欢迎指正,感谢你阅读这篇文章,如果你觉得写得还行的话,不要忘记点赞、评论、收藏哦!祝大家生活愉快!

相关推荐
一只叫煤球的猫5 小时前
写代码很6,面试秒变菜鸟?不卖课,面试官视角走心探讨
前端·后端·面试
bobz9655 小时前
tcp/ip 中的多路复用
后端
bobz9655 小时前
tls ingress 简单记录
后端
皮皮林5516 小时前
IDEA 源码阅读利器,你居然还不会?
java·intellij idea
你的人类朋友6 小时前
什么是OpenSSL
后端·安全·程序员
bobz9657 小时前
mcp 直接操作浏览器
后端
前端小张同学9 小时前
服务器部署 gitlab 占用空间太大怎么办,优化思路。
后端
databook9 小时前
Manim实现闪光轨迹特效
后端·python·动效
武子康10 小时前
大数据-98 Spark 从 DStream 到 Structured Streaming:Spark 实时计算的演进
大数据·后端·spark
该用户已不存在10 小时前
6个值得收藏的.NET ORM 框架
前端·后端·.net