首页>软件资讯>常见问题

常见问题

使用Docker部署应用

发布时间:2025-02-18 20:34:16人气:169


在软件开发中,配置环境往往是开发者面临的最大挑战之一。用户使用的操作系统种类繁多,即便采用跨平台的开发语言(如Java和Python),也难以确保代码在所有平台上都能正常运行。此外,不同环境下软件的依赖包也各不相同,这进一步增加了开发和部署的复杂性。


Docker的出现为这些问题提供了优雅的解决方案。Docker通过容器化技术,将应用程序及其依赖打包成一个独立的容器镜像,确保应用在任何环境中都能一致运行。它利用Linux的namespace和cgroup技术,实现了轻量级的虚拟化,相比传统虚拟机,Docker容器启动更快、资源占用更少。


Docker的主要优势包括:


一致性:无论在开发、测试还是生产环境中,Docker容器都能提供一致的运行环境,避免了“在我的机器上可以运行”的问题。


轻量级:Docker容器共享宿主机的操作系统内核,无需为每个应用单独启动完整的虚拟机,从而显著减少了资源消耗。


快速部署:Docker容器可以在几秒内启动或停止,大大加快了开发和部署的速度。


通过Docker,开发者可以轻松地将应用及其运行环境打包成一个镜像,然后在任何支持Docker的平台上快速部署。这不仅简化了开发流程,还提高了团队协作的效率,使得软件开发变得更加高效和可靠。


 01   Docker简介 

在软件开发中,一个常见的问题是:能否将软件及其运行环境一并安装?是否可以完整复制原始环境以确保一致性和兼容性?传统解决方案是使用虚拟机(Virtual Machine),它允许在一个操作系统中运行另一个操作系统,例如在Windows中运行Linux,或在macOS上运行Windows。应用程序在虚拟机中运行时,完全感知不到底层环境的差异。然而,虚拟机的缺点也很明显:它通常占用大量系统资源,启动和关闭速度慢,用户体验不佳。


Docker的出现为这一问题提供了更优的解决方案。Docker基于Linux容器技术(利用namespace和cgroup),将应用程序及其依赖打包成一个独立的容器镜像。运行这个镜像时,Docker会生成一个虚拟容器,应用程序在其中运行,就像在真实的物理机上一样。与虚拟机相比,Docker容器共享宿主机的操作系统内核,无需为每个应用单独启动完整的虚拟机,从而显著减少了资源消耗,提高了启动速度。


Docker不仅简化了开发环境的配置,还确保了应用在不同环境下的运行一致性。它通过容器化技术,让开发者能够轻松地打包、分发和部署应用,极大地提高了开发和运维效率。



 2   安装Docker 

Docker是一个强大的容器化平台,能够帮助开发者快速部署和管理应用程序。以下是基于不同操作系统的Docker安装指南,帮助你快速上手。


CentOS下安装Docker

1. 确认操作系统内核版本

CentOS 7需要64位系统,内核版本3.10+;CentOS 6需要64位系统,内核版本2.6+。运行以下命令确认内核版本并更新底层库文件:


uname-r

yum update

2. 安装并启动Docker

使用yum安装Docker,并启动服务:


yum -yinstalldocker

systemctl start docker

3. 查看Docker版本

确认Docker是否安装成功:


docker version

docker info

验证Docker安装

1. 下载并运行Hello World镜像

运行以下命令下载并运行一个简单的Hello World容器:


docker pull hello-world

docker container run --name mycontainer hello-world

如果看到“Hello from Docker!”的消息,说明你的Docker环境已正确配置。


2. 查看镜像和容器

查看所有镜像:


docker images

查看运行中的容器:


dockerps

删除容器和镜像

如果不再需要某个容器或镜像,可以运行以下命令删除:


docker container rm mycontainer

docker rmi hello-world

Ubuntu下安装Docker

1. 更新系统并安装Docker

运行以下命令更新系统并安装Docker:


apt update

aptinstall docker-ce

servicedocker start

2. 配置国内镜像源

国内用户可以通过配置国内镜像源来提升下载速度。编辑/etc/docker/daemon.json文件:


{

    "registry-mirrors":[

        "http://hub-mirror.c.163.com",

        "https://registry.docker-cn.com"

    ]

}

Docker提供了简单高效的容器化解决方案,能够显著简化开发和部署流程。无论是CentOS、Ubuntu还是macOS和Windows,Docker都提供了详细的安装指南。通过上述步骤,你可以在几分钟内完成Docker的安装并开始使用。


 3   使用Docker 

想要玩转Docker,最简单的方式就是立即动手创建一些实际工作中需要的容器。以下是几个实用的容器创建示例,帮助你快速上手:

3.1 运行Nginx 

Nginx是一款高性能的Web服务器,也是理想的反向代理服务器。通过Docker,你可以轻松创建一个运行Nginx的容器,快速部署Web服务。


创建Nginx容器

运行以下命令创建一个Nginx容器:


docker run -d-p80:80 --rm--name mynginx nginx

-d:容器在后台运行,不输出到Shell。


-p 80:80:将容器的80端口映射到宿主机的80端口。


--rm:容器停止后自动删除。


--name mynginx:为容器指定名称。


nginx:使用默认的最新版Nginx镜像。


部署Web项目

如果需要将自定义的Web项目部署到Nginx上,可以通过以下方式:


方法1:拷贝文件到容器

dockercp /path/to/your/web/index.html mynginx:/usr/share/nginx/html

将本地文件拷贝到容器的/usr/share/nginx/html目录。


方法2:使用数据卷

docker run -d-p80:80 --rm--name mynginx -v /path/to/your/web:/usr/share/nginx/html nginx

将本地目录直接映射到容器的/usr/share/nginx/html目录,无需手动拷贝文件。


管理容器

查看运行中的容器:


docker ps

启动/停止容器:


docker start mynginx

docker stop mynginx

删除容器:


docker rm mynginx

如果容器正在运行,可以使用docker rm -f mynginx强制删除。


通过Docker,你可以快速创建和管理Nginx容器,轻松部署Web服务。无论是简单的静态页面还是复杂的Web应用,Docker都能帮助你实现高效的容器化部署。


3.2 运行MySQL  

通过Docker安装MySQL服务器非常简单,以下是详细步骤:


1. 搜索MySQL镜像

docker search mysql

查询结果包括镜像名、描述、用户评价、是否官方镜像等信息。


2. 下载MySQL镜像

指定版本号下载MySQL镜像:


docker pull mysql:5.7

3. 查看已下载的镜像

docker images

确认MySQL镜像已下载成功。


4. 创建并运行MySQL容器



docker run -d -p 3306:3306 --name mysql57 -v /root/docker/mysql/conf:/etc/mysql/mysql.conf.d -v /root/docker/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7

-d:后台运行容器。


-p:映射宿主机端口到容器端口。


-v:挂载宿主机目录到容器目录,用于持久化配置和数据。


-e:设置环境变量,如MySQL的root密码。



5. 配置MySQL

将MySQL配置文件放在$PWD/mysql/conf目录下,配置文件示例:


[mysqld]

pid-file=/var/run/mysqld/mysqld.pid

socket=/var/run/mysqld/mysqld.sock

datadir=/var/lib/mysql

log-error=/var/log/mysql/error.log

server-id=1

log-bin=/var/log/mysql/mysql-bin.log

expire_logs_days=30

max_binlog_size=256M

symbolic-links=0

6. 解决MySQL 8.x连接问题

如果使用MySQL 8.x版本,可能会遇到认证方式不兼容的问题。可以通过以下步骤解决:


docker exec-it mysql8x /bin/bash

mysql -u root -p

输入密码后,执行SQL语句修改认证方式:


alter user 'root'@'%' identified with mysql_native_password by '123456' password expire never;


通过这些步骤,你可以在Docker中快速安装并配置MySQL服务器,满足开发和测试需求。


3.3 运行Redis 

Redis 是一款高性能的键值存储数据库,支持主从复制架构。通过 Docker,我们可以轻松搭建一个包含一主三从的 Redis 集群,实现数据的高可用性和冗余备份。


创建Redis主从复制结构

1. 创建Redis主节点

运行以下命令创建 Redis 主节点:


docker run -d-p6379:6379 --name redis-master redis redis-server

-d:后台运行容器。


-p 6379:6379:将容器的 6379 端口映射到宿主机的 6379 端口。


--name redis-master:为容器命名为 redis-master。


redis redis-server:指定运行 Redis 服务。


2. 创建Redis从节点

运行以下命令创建三个 Redis 从节点:



docker run -d -p 6380:6379 --name redis-slave-1 --link redis-master:redis-master redis redis-server --replicaof redis-master 6379docker run -d -p 6381:6379 --name redis-slave-2 --link redis-master:redis-master redis redis-server --replicaof redis-master 6379docker run -d -p 6382:6379 --name redis-slave-3 --link redis-master:redis-master redis redis-server --replicaof redis-master 6379

--link redis-master:redis-master:创建网络别名,使从节点能够通过别名连接到主节点。


--replicaof redis-master 6379:指定从节点复制主节点的数据。


3. 验证主从复制

进入主节点容器,检查主从复制状态:复制


dockerexec-it redis-master /bin/bash

redis-cli

127.0.0.1:6379> info replication

输出示例:


# Replication

role:master

connected_slaves:3

slave0:ip=172.17.0.4,port=6379,state=online,offset=1988,lag=0

slave1:ip=172.17.0.5,port=6379,state=online,offset=1988,lag=1

slave2:ip=172.17.0.6,port=6379,state=online,offset=1988,lag=1

role:master:当前节点为主节点。


connected_slaves:3:连接的从节点数量。


state=online:从节点状态为在线。


通过 Docker,我们可以快速搭建 Redis 主从复制结构,实现数据的高可用性和冗余备份。--link 参数用于创建网络别名,确保从节点能够稳定连接到主节点,即使容器的 IP 地址发生变化也不会影响复制。这种架构适用于需要高可用性和数据备份的场景,能够显著提升 Redis 服务的可靠性。


3.4 运行GitLab 

GitLab 是一款功能强大的 Git 仓库管理工具,支持 wiki、问题跟踪、持续集成等功能,分为社区版和企业版。通过 Docker,我们可以快速安装并运行 GitLab 社区版,满足团队协作和代码管理的需求。


安装前准备

1. 修改宿主机 SSH 端口

GitLab 需要使用 22 端口进行 SSH 连接,因此需要先将宿主机的 SSH 端口修改为其他端口(如 12345):


vim /etc/ssh/sshd_config

找到 #Port 22,将其修改为:


Port 12345

保存并退出后,重新启动 SSH 服务:


systemctl restart sshd

提示:修改端口后,确保在防火墙上开启对应的端口,否则无法使用 SSH 连接到 Linux 服务器。


2. 创建数据卷映射目录

为 GitLab 创建用于数据卷映射的目录:


mkdir-p /root/gitlab/config

mkdir-p /root/gitlab/logs

mkdir-p /root/gitlab/data

启动 GitLab 容器

运行以下命令启动 GitLab 容器:


docker run -d-p80:80 -p22:22 --name gitlab

  -v /root/gitlab/config:/etc/gitlab

  -v /root/gitlab/logs:/var/log/gitlab

  -v /root/gitlab/data:/var/opt/gitlab

  gitlab/gitlab-ce

-d:后台运行容器。


-p 80:80:将容器的 80 端口(HTTP)映射到宿主机的 80 端口。


-p 22:22:将容器的 22 端口(SSH)映射到宿主机的 22 端口。


-v:挂载宿主机目录到容器目录,用于持久化配置、日志和数据。


说明:GitLab 的启动比较缓慢,可能需要等待一段时间才能通过浏览器访问。


配置与使用

1. 访问 GitLab

通过浏览器访问 http://<宿主机IP>,首次访问时会提示修改管理员密码。设置好管理员密码后,使用用户名 root 和新设置的密码登录。


2. 初始化配置

登录后,GitLab 会自动完成初始化配置,之后即可开始使用。


通过 Docker,你可以快速安装并运行 GitLab 社区版,无需复杂的配置。GitLab 提供了强大的 Git 仓库管理功能,支持团队协作、代码管理、持续集成等,非常适合开发团队使用。



 4   构建镜像 

掌握Docker容器的创建后,我们还可以将配置好的容器转化为镜像,用于快速部署和分发。Docker镜像是由多层文件系统叠加而成的,最底层是bootfs,相当于Linux内核的引导文件系统;第二层是rootfs,可以是Debian或Ubuntu等操作系统的文件系统,且在Docker中是只读的。通过联合挂载技术,Docker将这些文件系统层叠加,形成包含所有文件和目录的完整镜像。


这种分层结构使得镜像轻量且高效,便于在不同环境中快速部署应用。你可以通过docker commit命令将运行中的容器保存为镜像,也可以通过编写Dockerfile来定义镜像的构建过程,实现更复杂的定制化需求。无论是简单应用还是复杂系统,Docker镜像都能提供一致的运行环境,确保应用在任何Docker主机上都能稳定运行。


4.1 使用commit命令构建镜像 

通过 docker commit 命令,你可以将一个已定制的容器保存为新的镜像,便于后续快速部署。以下是具体步骤:


1.创建并定制容器


使用 Ubuntu 镜像创建一个容器,并进入容器内部:


docker run --name myubuntu -it ubuntu /bin/bash

在容器中安装 Apache 服务器:


apt-y upgrade

apt-y install apache2

exit

2.查看容器 ID

退出容器后,通过以下命令查看容器的 ID:


docker container ls-a

输出示例:


CONTAINER ID    IMAGE    COMMAND        CREATED        STATUS        PORTS    NAMES014bdb321612    ubuntu   "/bin/bash"    5 minutes ago  Exited (0)             myubuntu

3.提交容器为镜像

使用容器 ID 提交为新的镜像:


docker commit 014bdb321612 jackfrued/mywebserver

4.查看生成的镜像

查看新生成的镜像:


docker images

输出示例:


REPOSITORY              TAG       IMAGE ID        CREATED             SIZEjackfrued/mywebserver   latest    795b294d265a    14 seconds ago      189 MB



通过这种方式,你可以将任何定制的容器保存为镜像,后续可以直接使用该镜像快速创建新的容器,无需重复安装和配置。


4.2 使用Dockerfile构建镜像 

Dockerfile 是使用特定领域语言(DSL)编写的文件,用于定义如何构建 Docker 镜像。通过 Dockerfile,你可以将应用及其依赖打包成镜像,实现快速部署。


创建 Dockerfile

1.创建一个空文件夹并初始化 Dockerfile:


mkdir mywebserver

cd mywebserver

touch Dockerfile

2.编辑 Dockerfile,添加以下内容:


# 基础镜像FROM ubuntu:14.04# 维护者信息MAINTAINER jackfrued "jackfrued@126.com"# 更新系统并安装 NginxRUN apt-get update && apt-get install -y nginx# 创建一个简单的网页RUN echo 'hello, world!' > /usr/share/nginx/html/index.html# 暴露 80 端口EXPOSE 80

构建镜像

在 Dockerfile 所在目录运行以下命令构建镜像:


docker build -t jackfrued/webserver .

-t:指定镜像的名称和标签。


.:表示当前目录下的 Dockerfile。


查看镜像

docker images

输出示例:



REPOSITORY            TAG                 IMAGE ID            CREATED             SIZEjackfrued/webserver   latest              87d6cb096be2        23 minutes ago      222 MB

运行容器

使用新镜像运行一个 Web 服务器:


docker run -d -p 80:80 --name mywebserver jackfrued/webserver nginx -g "daemon off;"

推送镜像到 Docker Hub

1.登录 Docker Hub:

docker login

2.推送镜像:

docker push jackfrued/webserver

通过 Dockerfile 构建镜像,你可以轻松实现应用的自动化部署和分发,确保在任何环境下的运行一致性。

4.3 Dockerfile指令 

Dockerfile 是定义 Docker 镜像构建过程的脚本文件,通过一系列指令实现镜像的定制化。以下是一些常用的 Dockerfile 指令及其详细说明:


1. FROM

设置基础镜像,必须是 Dockerfile 的第一条指令。


FROM <镜像名>[:<标签>] [AS <别名>]

<镜像名>:基础镜像的名称,如 ubuntu。


<标签>:镜像的版本,如 14.04。


[AS <别名>]:为镜像设置别名,便于后续引用。


2. RUN

指定构建镜像时要执行的命令。


RUN <命令> [参数1] [参数2]...

用于安装软件包或执行命令,例如:


RUN apt-get update && apt-get install -y nginx

3. CMD

指定容器启动后执行的命令。


CMD ["可执行文件", "参数1", "参数2"...]

容器启动时运行的默认命令,例如:


CMD ["nginx", "-g", "daemon off;"]

4. ENTRYPOINT

设置容器启动时的默认入口命令,支持参数覆盖。


ENTRYPOINT ["可执行文件", "参数1", "参数2"...]

与 CMD 类似,但更灵活,支持通过 docker run 命令行参数覆盖默认参数。


5. WORKDIR

设置容器内的工作目录。


WORKDIR /path/to/workdir

指定工作目录,后续命令将在该目录下执行。


6. ENV

设置环境变量。


ENV VAR_NAME=value

例如:


ENV DEFAULT_PORT=8080

7. USER

指定运行容器的用户。


USER username

例如:


USER nginx

8. VOLUME

添加数据卷挂载点。


VOLUME ["/path/to/volume"]

用于持久化数据,例如:


VOLUME ["/var/lib/mysql"]

9. ADD

复制文件到镜像中,支持解压归档文件。


ADD <源文件> <目标路径>

例如:


ADD ./config /etc/nginx/

10. COPY

复制文件到镜像中,不进行解压。


COPY <源文件> <目标路径>

例如:


COPY ./index.html /usr/share/nginx/html/

11. LABEL

添加元数据标签。


LABEL key="value"

例如:


LABEL version="1.0.0" location="Chengdu"

12. ONBUILD

为镜像添加触发器,用于后续构建。


ONBUILD <指令>

例如:


ONBUILDADD . /app/src

ONBUILDRUN cd /app/src && make

通过这些指令,你可以灵活地定义镜像的构建过程,确保应用在任何环境中都能稳定运行。掌握这些指令后,你可以轻松创建高效、可复用的 Docker 镜像,满足开发和生产环境的需求。



 5    容器编排 

5.1 Docker Compose 

在项目开发中,管理多个容器变得复杂时,容器编排工具如 Docker Compose 就显得尤为重要。Docker Compose 通过 YAML 文件定义容器及其依赖关系,实现自动化配置和管理。


安装 Docker Compose

使用 curl 安装


# 使用 curl 下载 Docker Compose 二进制文件curl -L https://github.com/docker/compose/releases/download/1.25.0-rc2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose# 赋予执行权限chmod +x /usr/local/bin/docker-compose

如果没有 curl,可在 CentOS 上通过 yum 安装:


# 安装 curl 工具

yum installcurl

使用 pip 安装

# 使用 pip 安装 Docker Compose

pip3 install-Udocker-compose

创建项目结构

创建一个名为 composeapp 的文件夹,并在其中创建两个子文件夹 product-service 和 web-site:


# 创建项目目录结构

mkdir-p composeapp/product-service composeapp/web-site

cd composeapp

编写服务代码

product-service

在 product-service 文件夹中,创建一个简单的 Flask 应用:


# product-service/api.py# 导入必要的库from flask import Flaskfrom flask_restful import Resource, Apifrom redis import Redisfrom flask_cors import CORSimport pickle as pkl# 初始化 Flask 应用app = Flask(__name__)CORS(app)api = Api(app)redis = Redis(host='redis-master', port=6379)# 定义 Product 资源class Product(Resource):    def get(self):        # 从 Redis 获取产品数据        data = redis.get('products')        if not data:            # 如果 Redis 中没有数据,初始化产品列表            products = ['Ice Cream', 'Chocolate', 'Coca Cola', 'Hamburger']            redis.set('products', pkl.dumps(products))        else:            # 如果 Redis 中有数据,加载产品列表            products = pkl.loads(data)        return {'products': products}# 将 Product 资源添加到 APIapi.add_resource(Product, '/api/products')# 主程序入口if __name__ == '__main__':    app.run(host='0.0.0.0', port=8000, debug=True)


添加依赖文件:


# product-service/requirements.txt

# 列出项目依赖的 Python 包

flask

flask-restful

flask-cors

redis

编写 Dockerfile:


# product-service/Dockerfile

# 使用 Python 3 的官方镜像作为基础镜像

FROM python:3

# 将当前目录下的文件添加到容器的 /root/product-service 目录

ADD . /root/product-service

# 设置工作目录

WORKDIR /root/product-service

# 安装依赖

RUN pip install -r requirements.txt

# 指定容器启动时运行的命令

CMD ["python", "api.py"]

web-site

在 web-site 文件夹中,创建一个简单的 HTML 页面:


<!-- web-site/index.html -->

<!DOCTYPEhtml>

<htmllang="en">

<head>

    <metacharset="utf-8">

    <title>首页</title>

</head>

<body>

    <divid="app">

        <h2>产品列表</h2>

        <ul>

            <!-- 使用 Vue.js 动态渲染产品列表 -->

            <liv-for="product in products">{{ product }}</li>

        </ul>

    </div>

    <!-- 引入 Vue.js -->

    <scriptsrc="https://cdn.bootcss.com/vue/2.6.10/vue.min.js"></script>

    <script>

        // 创建 Vue 实例

        newVue({

            el:'#app',

            data:{

                products:[]

            },

            created(){

                // 在组件创建时从后端 API 获取产品数据

                fetch('http://1.2.3.4:8000/api/products')

                    .then(resp=> resp.json())

                    .then(json=>{this.products= json.products})

            }

        })

    </script>

</body>

</html>

配置 Docker Compose

创建 docker-compose.yml 文件:


# docker-compose.yml

# 定义 Docker Compose 的版本

version:'3'

# 定义服务

services:

product-service:

    # 使用 product-service 文件夹中的 Dockerfile 构建镜像

    build: ./product-service

    # 映射宿主机的 8000 端口到容器的 8000 端口

    ports:

      -'8000:8000'

    # 建立与 redis-master 服务的链接

    links:

      - redis-master


web-site:

    # 使用官方的 Nginx 镜像

    image: nginx

    # 映射宿主机的 80 端口到容器的 80 端口

    ports:

      -'80:80'

    # 将 web-site 文件夹挂载到容器的 /usr/share/nginx/html 目录

    volumes:

      - ./web-site:/usr/share/nginx/html


redis-master:

    # 使用官方的 Redis 镜像

    image: redis

    # 暴露容器的 6379 端口

    expose:

      -'6379'

启动项目

运行以下命令启动所有服务:


# 启动 Docker Compose 项目

docker-compose up

Docker Compose 会根据 docker-compose.yml 文件中的定义,自动构建和启动所有容器,实现服务间的协同工作。通过这种方式,你可以轻松管理复杂的多容器项目,提升开发效率。



 6    容器学习建议 

1. 官方文档

深入阅读:Docker 官方文档(https://docs.docker.com/) 是学习 Docker 的最佳资源。从基础概念(如镜像、容器、Dockerfile)到高级功能(如网络、卷、服务编排),官方文档提供了全面的指导。


实践操作:边阅读边实践。例如,按照文档中的步骤创建一个简单的 Dockerfile,构建镜像并运行容器。


2. 实践项目

简单项目:从简单的项目开始,如部署一个静态网站或简单的 Flask 应用。这有助于你熟悉 Docker 的基本操作。


复杂项目:尝试部署一个包含多个服务的应用,如使用 Docker Compose 管理一个包含 Web 服务、数据库和缓存服务的项目。


3. 社区资源

加入社区:加入 Docker 社区(https://www.docker.com/community/) 和相关论坛,如 Stack Overflow、Reddit 的 Docker 板块。在社区中提问和回答问题,可以帮助你快速解决问题。


开源项目:参与开源项目,学习其他开发者是如何使用 Docker 的。GitHub 上有许多使用 Docker 的项目,你可以从中获取灵感。


4. 持续学习

关注更新:Docker 不断更新,新版本会引入新特性和改进。关注 Docker 博客 (https://www.docker.com/blog/) 和 Docker Hub(https://hub.docker.com/),及时了解最新动态。


在线课程:参加在线课程,如 Coursera、Udemy 或者 Pluralsight 上的 Docker 课程,系统学习 Docker 的高级功能。


实践新特性:尝试使用 Docker 的新特性,如多阶段构建、Docker Swarm 等,不断提升你的技能。


通过以上步骤和建议,你可以快速掌握 Docker 的基本用法,并将其应用于实际项目中。无论是开发、测试还是生产环境,Docker 都能帮助你高效地部署和管理应用。


Docker通过容器化技术,简化了应用部署的复杂性,确保应用在不同环境中的一致性。无论是运行Web服务器、数据库还是复杂的微服务架构,Docker都能提供高效的解决方案。掌握Docker的基本使用和容器编排,可以大幅提升开发和运维效率。




上一条:Anaconda3数据科学与机器学习的强大工具

下一条:在Linux中安装Docker