当前位置: 首页 > news >正文

容器技术技术入门与Docker环境部署

目录

一、Docker 概述

1. 什么是 Docker

2. Docker 的优势

3. 容器技术和传统虚拟化区别

4. Dockers 的应用场景

5. Docker 核心概念

(1)镜像

(2)容器

(3)仓库

二、Docker 安装

三、Docker 镜像操作

1. 获取镜像

2. 查看镜像信息

3. 查看镜像的详细信息

4. 修改镜像标签

5. 删除镜像

6. 存出镜像和载入镜像

四、Docker 容器操作

1. 容器的创建与启动

2. 容器的终止

3. 进入容器

4. 容器导出

5. 容器导入生成镜像

6. 容器删除


一、Docker 概述

1. 什么是 Docker

  • 本质:开源 容器化平台,将应用及其依赖打包成轻量级、可移植的容器。

  • 核心需求与 Docker 价值:创建云平台应用需脱离底层硬件、支持随时随地获取资源,Docker 用容器技术,为应用创建轻量、可移植、自给自足容器,简化部署 / 调试,提升效率 。

  • 容器技术基础认知:属主流轻量级虚拟化技术,将应用及依赖打包成含代码、运行环境等的独立 “盒子” ;容器间相互隔离,有独立文件系统、进程空间、网络接口,共享宿主机 OS 内核 ,后续可从概念、原理、与传统虚拟化对比、优势、应用场景深入理解其价值 。

  • 核心能力

    • 一次构建,随处运行(解决环境差异问题)

    • 进程级隔离(无需完整操作系统

2. Docker 的优势

  • 性能高效:秒级启停,接近原生性能,计算损耗几乎为 0,远超传统虚拟机。

  • 资源优用:共享宿主机内核,单机可承载上千容器,大幅节省资源。

  • 隔离可控:容器间相互隔离,通过资源限制保障稳定安全,适配多数场景。

  • 移植便捷:应用及依赖打包成独立单元,支持多环境无缝迁移。

  • 部署灵活:快速启停、创建销毁容器,便于应用快速部署与弹性扩展。

  • 架构轻量:操作系统层虚拟化,无需额外虚拟机 OS 层,减少资源开销 。

3. 容器技术和传统虚拟化区别

维度传统虚拟机Docker 容器
虚拟化层通过 Hypervisor 建 VM,含完整 OS操作系统层虚拟化,共享宿主机内核
资源占用为 VM 配独立 OS,资源占用大仅含应用 + 依赖,资源占用少
隔离性独立 OS 实现高隔离隔离性稍弱,合理配置可满足多数场景
性能额外虚拟化层带来性能开销直接运行于宿主机内核,性能接近原生
启动速度分钟级秒级
计算能力损耗损耗 50% 左右几乎无
系统支持量(单机)几十个上千个
隔离性完全隔离资源限制

4. Dockers 的应用场景

  • 开发环境管理:开发人员可以使用容器来创建一致的开发环境,确保团队成员之间的环境一致性,提高开发效率。

  • 持续集成和持续部署(CI/CD):在 CI/CD 流程中,容器可以帮助实现应用的快速打包、测试和部署,实现自动化的软件开发流程。

  • 微服务架构:容器技术非常适合做微服务架构,每个微服务可以打包成一个独立的容器,独立开发、测试和部署,提高系统的可伸缩性和容错性。

  • 云计算:云服务提供商可以利用容器技术为用户提供更高效、灵活的计算资源,用户可以根据自己的需求快速创建和管理容器化的应用。

5. Docker 核心概念

(1)镜像
  • 是什么:只读模板(含应用代码+依赖环境),类似虚拟机镜像。

  • 关键特性

    • 分层存储(每步操作生成新层,复用节省空间)

    • 通过 Dockerfile 定义构建步骤

(2)容器
  • 是什么:镜像的 运行时实例(一个镜像可启动多个容器)。

  • 关键操作

    docker run -d nginx:latest  # 启动容器(后台运行)
    docker exec -it my-nginx bash  # 进入容器终端
    docker stop my-nginx         # 停止容器
(3)仓库
  • 是什么:集中存储和分发镜像的服务。

  • 分类

    仓库类型说明示例
    公共仓库官方托管,开源镜像Docker Hub
    私有仓库企业内网部署,保护私有镜像Harbor, Nexus

二、Docker 安装

本安装方式使用阿里的软件仓库

1.关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i  's/=enforcing/=disabled' /etc/selinux/config2.下载Docker的repo文件
curl -o /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo3.替换仓库地址
sed -i 's/$releasever/8/g' /etc/yum.repos.d/docker-ce.repo
sed -i 's/$basearch/x86_64/g' /etc/yum.repos.d/docker-ce.repo4.更新索引并安装docker
dnf clean all
dnf makecache
dnf -y install docker-ce5.添加国内镜像
vi    /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://docker.imgdb.de",
"https://docker-0.unsee.tech",
"https://docker.hlmirror.com"
]
}6.优化内核参数
vi     /etc/sysctl.conf
net.ipv4.ip_forward=1    # IPv4 IP 转发功能开启
net.bridge.bridge-nf-call-ip6tables = 1      #网桥的 IPv6 防火墙规则调用开启
net.bridge.bridge-nf-call-iptables = 1         #网桥的 IPv4 防火墙规则调用开启

三、Docker 镜像操作

        镜像是模板(只读),容器是实例(可写)。

1. 获取镜像

docker pull [镜像名]:[标签]

  • 作用:从仓库(默认 Docker Hub)下载镜像

  • 关键选项

    • :标签:指定镜像版本(如 ubuntu:22.04,不写默认 latest

    • --platform:指定平台(如 linux/amd64

  • 示例:

    docker pull ubuntu:22.04      # 下载 Ubuntu 22.04
    docker pull nginx:1.23-alpine # 下载 Nginx 的 Alpine 版本

2. 查看镜像信息

docker images  [镜像名]

  • 作用:列出本地镜像基础信息

  • 关键输出

    • REPOSITORY:镜像仓库来源

    • TAG:版本标签

    • IMAGE ID:镜像唯一标识(前12位)

    • CREATED:创建时间

    • SIZE:镜像大小

  • 示例

    # 列出所有镜像  
    docker images  # 只查看 nginx 镜像  
    docker images nginx  

3. 查看镜像的详细信息

docker inspect 名字|ID

  • 作用:获取镜像的完整元数据(JSON 格式)

  • 关键信息

    • 镜像层级(RootFS.Layers

    • 环境变量(Config.Env

    • 启动命令(Config.Cmd

    • 创建时间(Created

  •  示例
# 查看 ubuntu:22.04 的详细信息  
docker inspect ubuntu:22.04  # 过滤特定信息(如获取架构)  
docker inspect ubuntu:22.04 --format='{{.Architecture}}'  

4. 修改镜像标签

docker tag [原镜像名]:[原标签] [新镜像名]:[新标签]  

  • 作用:为镜像创建新别名(不复制数据,仅新增引用)

  • 使用场景

    • 上传镜像到私有仓库前重命名

    • 为同一镜像创建多版本标签

  • 示例

    # 为 ubuntu:22.04 添加私有仓库标签  
    docker tag ubuntu:22.04 my-registry.com/ubuntu:prod  # 为同一镜像创建测试标签  
    docker tag ubuntu:22.04 ubuntu:test  

5. 删除镜像

docker rmi [镜像ID或名称]

  • 关键选项

    • -f:强制删除(即使有容器依赖)

    • --no-prune:保留被删除镜像的未使用父层

  • 注意事项

    • 镜像被容器使用时需先停止容器

    • 被依赖的镜像需先删除子镜像

  • 示例

    # 删除单个镜像  
    docker rmi nginx:alpine  # 强制删除(即使有容器运行)  
    docker rmi -f ubuntu:22.04  # 清理所有未被使用的镜像  
    docker image prune -a  

6. 存出镜像和载入镜像

# 导出为 .tar 文件
docker save -o [文件名].tar [镜像名]

# 从 .tar 文件导入
docker load -i [文件名].tar

docker load<目标导入    

  • 作用:镜像迁移或备份

  • 参数
    -o:指定输出文件(save)
    -i:指定输入文件(load)

  • 示例

    docker save -o nginx-backup.tar nginx:latest
    docker load -i nginx-backup.tar

四、Docker 容器操作

1. 容器的创建与启动

docker run [选项] [镜像名] [启动命令]  

核心选项

选项作用
-d后台运行(守护模式)
--name指定容器名称
-it交互式终端(通常配合 /bin/bash
-p端口映射(格式 主机端口:容器端口
-v数据卷挂载(格式 主机目录:容器目录
--rm容器退出时自动删除
-e设置环境变量(如 -e MYSQL_ROOT_PASSWORD=123

示例

# 启动后台运行的 Nginx  
docker run -d --name web -p 8080:80 nginx  # 启动临时交互式容器(退出自动删除)  
docker run -it --rm ubuntu:22.04 /bin/bash  

2. 容器的终止

# 正常停止(发送 SIGTERM)  
docker stop [容器名]  
  
# 强制停止(发送 SIGKILL)  
docker kill [容器名]  

  • 区别

    • stop:允许进程清理资源(推荐)

    • kill:立即终止进程(进程无响应时使用)

  • 示例

    # 优雅停止 web 容器  
    docker stop web  # 强制停止卡死的容器  
    docker kill web  

3. 进入容器

docker exec [选项] [容器名] [命令]  

  • 核心选项

    • -it:分配交互式终端(必须)

    • -u:指定用户(如 -u root

  • 注意事项

    • 只能进入运行中的容器

    • Alpine 镜像使用 /bin/sh(非 /bin/bash

  • 示例

    # 进入 web 容器的 bash 终端  
    docker exec -it web /bin/bash  # 以 root 身份执行命令  
    docker exec -u root web apt update  

4. 容器导出

docker export -o [文件名].tar [容器名]  

  • 作用:将容器文件系统导出为 tar 包(不包含历史层

  • 与镜像导出的区别

    操作导出对象包含历史层适合场景
    docker save镜像完整镜像迁移
    docker export容器快速转移运行环境

 示例

# 导出 web 容器  
docker export -o web-container.tar web  

5. 容器导入生成镜像

docker import [文件名].tar [新镜像名]:[标签]  

  • 作用:将容器导出文件转换为镜像

  • 特点

    • 生成的新镜像无历史层

    • 丢失原始镜像的元数据(如 ENV、CMD 等)

  • 示例

    # 从 tar 文件创建镜像  
    docker import web-container.tar my-web:latest  # 验证新镜像  
    docker run -d my-web:latest  

6. 容器删除

docker rm [容器名]  

  • 关键选项

    • -f:强制删除运行中的容器

    • -v:同时删除关联的匿名卷

  • 注意事项

    • 删除前需停止容器(或使用 -f

    • 重要数据务必用 -v 卷挂载避免丢失

  • 示例

    # 删除已停止的容器  
    docker rm web  # 强制删除运行中的容器及其匿名卷  
    docker rm -fv web  # 删除所有停止的容器  
    docker container prune  

http://www.lryc.cn/news/572965.html

相关文章:

  • 传输层协议UDP/TCP
  • 【工具教程】识别PDF中文字内容,根据文字内容对PDF批量重命名,提取识别PDF内容给图片重新命名的操作步骤和注意事项
  • C#上位机实现报警语音播报
  • Spring Boot + MyBatis + Vue:全栈开发中的最佳实践
  • vue通过打开新标签页打开某个路由
  • day43-硬件学习之ARM基础知识
  • 【蓝牙】Qt4中向已配对的手机发送PDF文件
  • JavaWeb前端部分
  • Centos 离线部署(MQTT)EMOX脚本并设置开机自启
  • 微软应用商店打不开怎么办2025,打开TLS1.3
  • 第五章 中央处理器
  • GoogLeNet:图像分类神经网络的深度剖析与实践
  • 大内存对电脑性能有哪些提升
  • 1.容器技术与docker环境部署
  • QEMU学习之路(10)— RISCV64 virt 使用Ubuntu启动
  • 微电网系列之微电网的运行控制
  • Python 中设置布尔值参数为 True 来启用验证
  • Unity3D仿星露谷物语开发67之创建新的NPC
  • 【工具教程】识别PDF中文字内容,批量识别文字并保存到Excel表格中的操作步骤和方法
  • 机器学习流量识别(pytorch+NSL-KDD+多分类建模)
  • 信创 CDC 实战|国产数据库的数据高速通道:OceanBase 实时入仓 StarRocks
  • vue3 el-select @change (val) 多参数传值操作
  • KVM -- 虚拟化技术
  • DDoS防护体系构建——从基础限速到智能调度
  • phpstudy无法启动apache,80端口被占用,完美解决
  • phpstudy无法启动mysql,一启动就关闭,完美解决
  • python+uniapp基于微信小程序的高校二手商品交易系统
  • .NET 4.7中使用NLog记录日志到数据库表
  • 上海人工智能实验室明珠湖会议首开,解答AI前沿疑问,推进科学智能
  • python自助棋牌室管理系统