首页 > 其他分享 >docker 入门到实战

docker 入门到实战

时间:2025-01-16 11:58:16浏览次数:1  
标签:实战 容器 入门 部署 环境 镜像 docker Docker

一、Docker 能解决什么问题?

Docker 作为一种容器化技术,能够解决多种软件开发和运维中的问题,主要包括:

1. 环境一致性:确保开发、测试和生产环境的一致性,避免“在我机器上可以运行”的问题。

2. 依赖管理:容器封装了应用及其所有依赖,使得应用可以在任何支持 Docker 的环境中运行,无需担心依赖冲突。

3. 快速部署:容器可以在几秒钟内启动,相比传统的虚拟机,部署速度大大提升。

4. 资源效率:容器共享宿主机的操作系统内核,不需要为每个应用运行完整的操作系统,从而提高了资源利用率。

5. 易于扩展:容器化的应用程序可以快速扩展,通过增加容器实例来满足增加的负载需求。

6. 持续集成和持续部署(CI/CD):Docker 容器可以集成到 CI/CD 流程中,自动化构建、测试和部署过程。

7. 微服务架构:Docker 容器非常适合微服务架构,每个服务可以独立运行在自己的容器中,实现服务间的解耦。

8. 多环境支持:容器可以在多种环境中运行,包括物理机、虚拟机、云服务和混合云环境。

9. 隔离性:容器提供了一定程度的隔离,使得一个应用的崩溃不会影响其他应用。

10. 安全性:容器可以限制应用的权限,减少潜在的安全风险。

11. 开发和测试环境的快速搭建:开发者可以快速搭建具有所需依赖和配置的开发和测试环境。

12. 版本控制和回滚:容器的镜像可以像代码一样进行版本控制,并且可以轻松回滚到之前的版本。

13. 跨平台支持:容器可以在不同的操作系统和硬件架构上运行,提供了跨平台的支持。

二、Docker 是怎么做到的(原理)?

Docker 的实现原理基于一系列关键技术,这些技术共同工作以提供容器化的环境。以下是 Docker 工作原理的核心组件:
1. Linux 内核:
Docker 依赖于 Linux 内核来实现容器化。内核提供了必要的隔离和安全功能。
2. 控制组(Cgroups):
控制组是 Linux 内核的一个特性,它允许 Docker 对容器的资源使用(如 CPU、内存、磁盘 I/O 等)进行限制和监控。
3. 命名空间(Namespaces):
命名空间提供了一种将进程隔离的方法。Docker 使用命名空间来隔离容器的网络、用户 ID、文件系统等,使得每个容器都有其独立的运行环境。
4. 联合文件系统(Union File Systems):
Docker 使用联合文件系统(如 AUFS、OverlayFS)来实现镜像层叠。这意味着多个容器可以共享同一个基础镜像层,同时有自己的可写层,从而节省磁盘空间。
5. 容器格式:
Docker 容器在宿主机上以特殊的文件系统格式存在,通常是一个目录,其中包含了容器运行所需的所有文件。
6. Docker 镜像:
Docker 镜像是一个只读的模板,用于创建容器。镜像由一系列只读层组成,每一层都是一个只读的文件系统。
7. Docker 守护进程(Docker Daemon):
Docker 守护进程(dockerd)是 Docker 的后台服务,负责管理 Docker 对象,如镜像、容器、网络和卷。
8. Docker 客户端(Docker Client):
Docker 客户端(docker)是用户与 Docker 守护进程交互的命令行界面。用户通过客户端发送命令,由守护进程执行。
9. Docker 网络:
Docker 提供了内置的网络功能,允许容器之间以及容器与外部世界进行通信。Docker 网络可以是桥接网络、主机网络或覆盖网络。
10. Docker 卷(Volumes):
Docker 卷是 Docker 的持久化存储机制,允许数据在容器重启或删除后仍然保持不变。
11. Docker Compose:
Docker Compose 是一个工具,用于定义和运行多容器 Docker 应用。它通过一个 YAML 文件来配置应用的服务、网络和卷。
12. 容器编排:
Docker 可以与容器编排工具(如 Kubernetes、Docker Swarm)集成,以管理大规模的容器部署。。

三、要用 Docker,需要了解什么?

要有效地使用 Docker,需要了解以下关键概念和实践:
1. Docker 基本概念:
容器(Containers):轻量级的、可执行的软件包,包含软件代码、运行时环境、系统工具、库和设置。
镜像(Images):只读的模板,用于创建容器的基础。容器是镜像的运行实例。
仓库(Repositories):存储 Docker 镜像的地方,可以是 Docker Hub 或私有仓库。
Dockerfile:一个文本文件,包含了从基础镜像开始,通过一系列指令构建镜像的所有步骤。
2. Docker 安装和配置:
了解如何在不同的操作系统上安装 Docker。
配置 Docker 守护进程,包括设置镜像加速器以提高拉取速度。
3. 镜像管理:
如何拉取、构建、推送和管理 Docker 镜像。
使用 `docker pull`、`docker build`、`docker push` 等命令。
4. 容器生命周期管理:
学习如何创建、运行、停止、重启和删除容器。
使用 `docker run`、`docker stop`、`docker start`、`docker restart` 和 `docker rm` 等命令。
5. 容器间通信:
理解 Docker 网络模型和如何配置容器网络。
使用 `docker network` 命令创建和管理网络。
6. 数据持久化:
了解如何使用数据卷和绑定挂载来实现容器数据的持久化。
使用 `docker volume` 命令创建和管理数据卷。
7. Docker Compose:
学习如何使用 Docker Compose 定义和运行多容器 Docker 应用。
编写 `docker-compose.yml` 文件来配置服务、网络和卷。
8. 容器编排:
了解容器编排的基本概念,如 Kubernetes、Docker Swarm 等。
学习如何使用这些工具来管理大规模的容器部署。
9. CI/CD 集成:
了解如何将 Docker 集成到持续集成和持续部署(CI/CD)流程中。
使用 Jenkins、GitLab CI 等工具自动化构建、测试和部署。
了解 Docker 的版本控制和更新策略,以确保使用的是最新和最安全的版本。
通过掌握这些知识和技能,您将能够更有效地使用 Docker 来容器化应用、优化开发和部署流程,并确保容器化环境的安全性和稳定性。

四、Docker 部署的优势与传统方便部署方式

对比 Docker 部署的优势与传统方便部署方式(例如直接部署在虚拟机、物理机,或使用脚本自动化部署),可以从以下几个维度进行分析:
1.环境一致性
传统部署:
依赖手动配置环境,可能因操作系统版本、依赖包版本不一致导致问题。
部署到不同环境(如开发、测试、生产)时,容易出现“环境不一致”的问题。难以快速还原或复制环境。
Docker 部署:
容器化应用将运行环境和依赖打包到镜像中,确保运行时环境一致。
开发、测试、生产使用相同的镜像,减少环境不一致的风险。
镜像是可移植的,可以轻松迁移到不同机器或云服务。
Docker 提供了更高的环境一致性,极大减少“部署后不可用”问题。
2. 部署速度
传统部署:
部署过程依赖手动安装软件或执行脚本,耗时较长。
系统初始化和依赖安装需要时间,可能需要重新安装或配置。
Docker 部署:
容器启动速度极快,通常只需几秒。镜像分层机制支持缓存,无需重复安装已存在的依赖。
通过编排工具(如 Docker Compose),一条命令即可启动整个服务栈。
3. 资源利用率
传统部署:
应用直接运行在物理机或虚拟机上,资源隔离较差。
Docker 部署:
容器共享宿主机内核,但具有独立的文件系统和资源限制。
容器运行开销极低,相较虚拟机更轻量。
通过 `cgroups` 和 `namespaces` 实现资源隔离,避免冲突。
4. 易用性与维护
传统部署:
系统升级或依赖更新需要手动干预,可能影响正在运行的服务。
部署过程依赖脚本和文档,容易因人为操作出错。
不同环境需要额外的适配和维护成本。
Docker 部署:
镜像的不可变性(immutable infrastructure)简化了更新过程,直接替换旧版本镜像即可。
使用 Dockerfile 定义构建流程,部署步骤标准化、自动化。
支持版本回滚:如果新版本容器有问题,可以快速切换回旧版本。
Docker 减少人为错误,提高了部署过程的可重复性和维护效率。
5. 可移植性
传统部署:
应用的依赖和环境通常绑定到特定的操作系统或机器。
部署迁移需要重新适配,可能耗费大量时间。
Docker 部署:
容器可运行在任何支持 Docker 的平台上(如本地、测试环境、云平台)。
通过镜像和容器化,真正实现“一次构建,到处运行”。
Docker 的可移植性极大简化了迁移工作。
五、我们现在有哪些问题 Docker 可以解决?

1、不同平台之间的兼容性问题
- 在开发环境、测试环境和生产环境中,软件运行表现不一致。
- 因操作系统、依赖版本等差异导致代码不可用或出错。
Docker 解决方案:
环境隔离:Docker 容器打包了应用及其所有依赖(包括操作系统库、运行时等),提供与宿主系统隔离的环境,确保环境一致性。
- 无论在开发、测试还是生产环境中,运行的都是相同的容器镜像。
跨平台支持:Docker Engine 支持多种操作系统,包括 Linux、Windows 和 macOS,确保应用程序在不同操作系统和硬件平台上运行时环境一致。
多架构镜像:Docker 支持多架构镜像,可以构建适用于不同硬件架构(如 x86、ARM)的镜像。在运行时,Docker 会自动选择适合当前平台的镜像,确保应用程序在不同平台上运行时环境一致
2、持续交付流程不完善问题
- 部署流程复杂,依赖手动操作,容易出错。
- 缺乏标准化的自动化工具。
Docker 解决方案:
容器化标准化部署:将应用和其依赖打包为容器镜像,通过 `docker-compose` 或 Kubernetes 编排来简化服务部署。
- 可通过配置文件(如 `docker-compose.yml`)定义服务的网络、卷、依赖等,避免手动操作。
与 CI/CD 集成:
- 使用 Jenkins,结合 Docker 镜像构建和部署:
- 在代码提交时,自动构建新的 Docker 镜像。
- 在测试通过后,将镜像推送到镜像仓库(如 Docker Hub 或私有仓库)。
- 自动化部署到测试或生产环境。
高效测试和部署:
- 在开发阶段,可以使用 Docker Compose 启动完整的微服务栈,模拟生产环境。
- 自动化部署时,只需拉取并运行最新镜像,无需复杂的环境配置。
3、更新和回滚不便问题
- 更新时操作复杂,可能需要手动备份或重建环境。
- 更新后如果发现问题,回滚可能耗时且容易出错。
Docker 解决方案
镜像版本化:
- Docker 提供镜像版本控制功能,每次构建的新镜像都会被标记(例如 `v1.0`、`v1.1`)。
- 通过 `docker run` 指定旧版本镜像,可以快速切换回之前的版本。
原子化更新和回滚:
- 使用 Docker Compose 或 Kubernetes 进行服务编排,可以通过蓝绿部署或滚动更新,确保更新的原子性(即要么成功全部替换,要么维持原状态)。
- 如果更新失败,直接重新启动旧镜像即可回滚。
减少环境污染:
- 每次更新使用全新的容器实例,不依赖宿主机上的旧环境,确保更新的环境一致性和可靠性。

一、Centos上离线安装docker

  1. 下载文件包并上传到服务器

https://mirrors.aliyun.com/docker-ce/linux/static/stable/x86_64/docker-27.4.0.tgz

  1. 解压安装
tar -xf docker-27.4.0.tgz
cp docker/* /usr/local/bin/
docker -v

docker -h

将docker注册为 Systemd 的 service

/usr/lib/systemd/system/docker.service

cat > /usr/lib/systemd/system/docker.service <<EOF
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
  
[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/local/bin/dockerd -H unix:///var/run/docker.sock --selinux-enabled=false --default-ulimit nofile=65536:65536
ExecReload=/bin/kill -s HUP $MAINPID
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
# Uncomment TasksMax if your systemd version supports it.
# Only systemd 226 and above support this version.
#TasksMax=infinity
TimeoutStartSec=0
# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes
# kill only the docker process, not all processes in the cgroup
KillMode=process
# restart the docker process if it exits prematurely
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
  
[Install]
WantedBy=multi-user.target
 
EOF

添加文件可执行权限

chmod +x /usr/lib/systemd/system/docker.service

添加国内镜像加速(每次修改需重启 docker)

mkdir /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
    "registry-mirrors": [
        "https://dockerpull.com",
        "https://docker.anyhub.us.kg",
        "https://dockerhub.jobcher.com",
        "https://dockerhub.icu",
        "https://docker.awsl9527.cn"
    ]
}
EOF

重载/开机自启

systemctl daemon-reload && systemctl restart docker

systemctl enable docker

# 查看运行状态,active (running)运行中

systemctl status docker

hello-world.tar 文件下载地址

https://wwk.lanzoue.com/iLSuZ2l2xe6j
密码:7qb4

测试 Docker,文件上传到服务器上。

docker load -i hello-world.tar

docker run hello-world

docker images

 

若能正常输出以上信息,则说明安装成功。

 

标签:实战,容器,入门,部署,环境,镜像,docker,Docker
From: https://www.cnblogs.com/xiaojietian/p/18674654

相关文章

  • 【2025大模型最新版】AI大模型全解析:零基础入门到精通,一文搞定!
    近年来,随着深度学习技术的飞速发展,AI大模型作为人工智能领域的重要研究对象,正逐步成为学术界和产业界广泛关注的热点议题。AI大模型,作为一类具备庞大参数规模与卓越学习能力的神经网络模型,如BERT、GPT等,已在自然语言处理、计算机视觉等多个领域展现出卓越成效,极大地推动了......
  • Redis入门实战(一)什么是Redis?它有那些优势?
    1、什么是Redis?Redis是一个开源的、基于内存的数据结构存储系统,它既可以用作数据库,也可以用作缓存和消息中间件。以下是关于Redis的详细介绍:特点内存存储:Redis将数据存储在内存中,这使得它的读写速度非常快,能够达到每秒数万次甚至更高的读写性能,适用于对性能要求极高的场......
  • 快速入门Interceptor拦截器
    1.概念2.执行流程3.WebConfig配置类packagecom.hz.config;importcom.hz.interceptor.LoginCheckInterceptor;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.context.annotation.Configuration;importorg.springfram......
  • docker-compose的使用
    docker-compose的使用一、简介二、安装与卸载linuxmacos、window卸载测试安装成功三、dockercompose使用四、Compose模版文件五、Compose应用一、简介Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。其代码目前在https://github.c......
  • 【大模型实战指南】AI大模型学习路线:从理论到实践,全面提升核心竞争力!
    一、初聊大模型1、什么是大模型?大模型,通常指的是在人工智能领域中的大型预训练模型。你可以把它们想象成非常聪明的大脑,这些大脑通过阅读大量的文本、图片、声音等信息,学习到了世界的知识。这些大脑(模型)非常大,有的甚至有几千亿个参数,这些参数就像是大脑中的神经元,它们通过......
  • Gradio快速入门详细教程
    Gradio是什么?Gradio是一个开源的Python软件包,可以快速为你的机器学习模型、API或任意Python函数构建一个演示或Web应用程序。你可以通过Gradio内置的共享功能在几秒钟内分享你的演示链接。不需要JavaScript、CSS或Web托管经验!只需几行Python代码即可创建你......
  • Java中的高效集合操作:Stream API实战指南
    Java中的高效集合操作:StreamAPI实战指南1.引言:集合操作的痛点在日常开发中,我们经常需要对集合进行各种操作,比如过滤、映射、排序、聚合等。传统的做法是使用for循环或Iterator,代码冗长且容易出错。比如:List<String>names=newArrayList<>();for(Useruser:users......
  • 【进阶教程】轻量级开源VNC本地安装与跨平台远程桌面实战分享——“cpolar内网穿透”
    文章目录前言1.安装TightVNC服务端2.局域网VNC远程测试3.Win安装Cpolar工具4.配置VNC远程地址5.VNC远程桌面连接6.固定VNC远程地址7.固定VNC地址测试前言在工作和生活中,我们经常需要跨越地理界限进行协作或处理事务。这时,远程桌面服务就成了不可或缺的好帮手......
  • 1.C++基础入门
    C++基础入门1C++初识1.1第一个C++程序编写一个C++程序总共分为4个步骤创建项目创建文件编写代码运行程序1.1.1创建项目​ VisualStudio是我们用来编写C++程序的主要工具,我们先将它打开1.1.2创建文件右键源文件,选择添加->新建项给C++文件起个名称,然后点击添......
  • Mysql--实战篇--SQL优化(查询优化器,常用的SQL优化方法,执行计划EXPLAIN,Mysql性能调优,慢
    一、查询优化1、查询优化器(QueryOptimizer)MySQL查询优化器(QueryOptimizer)是MySQL数据库管理系统中的一个关键组件,负责分析和选择最有效的执行计划来执行SQL查询。查询优化器的目标是尽可能减少查询的执行时间和资源消耗,从而提高查询性能。查询语句不同关键字(where、......