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的灵活性和便捷性使得应用程序的开发、部署和运行变得更加简单高效。

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

相关推荐
P.H. Infinity10 分钟前
【RabbitMQ】04-发送者可靠性
java·rabbitmq·java-rabbitmq
生命几十年3万天14 分钟前
java的threadlocal为何内存泄漏
java
caridle25 分钟前
教程:使用 InterBase Express 访问数据库(五):TIBTransaction
java·数据库·express
南猿北者25 分钟前
docker容器
docker·容器
^velpro^30 分钟前
数据库连接池的创建
java·开发语言·数据库
苹果醋334 分钟前
Java8->Java19的初步探索
java·运维·spring boot·mysql·nginx
秋の花38 分钟前
【JAVA基础】Java集合基础
java·开发语言·windows
小松学前端41 分钟前
第六章 7.0 LinkList
java·开发语言·网络
二十雨辰1 小时前
[linux]docker基础
linux·运维·docker
Wx-bishekaifayuan1 小时前
django电商易购系统-计算机设计毕业源码61059
java·spring boot·spring·spring cloud·django·sqlite·guava