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

目录

[一:Docker 概述](#一:Docker 概述)

[二:Docker 安装](#二:Docker 安装)

[三:Docker 镜像操作](#三:Docker 镜像操作)

1:获取镜像

2:查看镜像信息

3:查看镜像的详细信息

4:修改镜像标签(老名字+新名字)

5:删除镜像

6:存出镜像和载入镜像

[四:Docker 容器操作](#四:Docker 容器操作)


一:Docker 概述

因为 Docker 轻便、快速的特性,可以使应用达到快速迭代的目的。每次小的变更,马上就可以看到效果,而不用将若干个小变更积攒到一定程度再变更。每次变更一小部分其实是一种非常安全的方式,在开发环境中能够快速提高工作效率。

Docker 容器能够帮助开发人员、系统管理员、质量管理和版本控制工程师在一个生产环节中一起协同工作。制定一套容器标准能够使系统管理员更改容器的时候,程序员不需要关心容器的变化,而更专注自己的应用程序代码。从而隔离开了开发和管理,简化了开发和部署的成本。

特性 Docker 容器技术 传统虚拟机
资源占用 共享宿主机内核,仅包含应用及依赖项,资源占用少。 每个虚拟机需独立操作系统,占用大量资源。
启动速度 秒级启动,速度快。 分钟级启动,速度较慢。
隔离性 进程级隔离,较弱但可通过配置增强。 完全隔离,安全性更高。
性能 直接运行于宿主机内核,性能接近原生,损耗小。 存在虚拟化层开销,性能损耗较大。
可移植性 轻量级,易于迁移和部署,支持跨平台。 镜像较大,迁移和部署相对复杂。
应用场景 适合微服务、持续集成/交付、高密度部署等场景。 适合需要完全隔离或运行不同操作系统的场景。
管理工具 通过Dockerfile实现自动化构建和部署,操作简便。 依赖虚拟机管理程序(如VMware、VirtualBox),配置较复杂。
硬件依赖 无需虚拟化硬件,共享宿主机OS内核。 需要虚拟化硬件资源,每个VM运行独立OS。
典型代表 Docker、Kubernetes(容器编排)。 VMware、VirtualBox、Hyper-V。
核心概念 说明 特点 类比 操作示例
镜像(Image) 一个只读模板,用于创建容器。包含运行应用所需的代码、依赖、环境等。 不可修改(只读) 分层存储(节省空间) 可复用和共享 类似虚拟机的"快照"或"安装光盘" docker pull nginx(下载镜像) docker build -t myapp .(构建镜像)
容器(Container) 镜像的运行实例,可被启动、停止、删除。每个容器相互隔离,拥有独立的文件系统、网络和进程空间。 轻量级(共享宿主机内核) 快速启动和停止 可写层(临时修改) 类似一个"轻量级虚拟机" docker run -d nginx(运行容器) docker stop <容器ID>(停止容器)
仓库(Repository) 集中存储和管理镜像的地方,分为公共仓库(如Docker Hub)和私有仓库(如Harbor)。 支持版本管理(通过Tag区分) 可公开或私有化部署 便于团队协作和持续集成/交付(CI/CD) 类似"应用商店"或"代码仓库" docker push myimage:latest(推送镜像) docker pull alpine(拉取镜像)

二:Docker 安装

Docker 支持在主流的操作系统平台上进行使用,包括 Windows 系统、Linux 系统、以及 Macos 系统等。目前最新的 RHEL、Cent 0s 以及 Ubuntu 系统官方软件源中都已经默认自带了 Docker 包,可直接安装使用,也可以用 Docker 自己的 YUM 源进行配置。

Centos 系统下安装 Docker 可以有两种方式:一种是使用CURL 获得 Docker 的安装脚本进行安装,另一种是使用 YUM 仓库来安装 Docker。注意:目前 Docker 只能支持 64 位系统。

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

复制代码
# 步骤 1: 添加软件源信息
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

# 步骤 2: 安装必要的系统工具
yum install -y yum-utils

# 步骤 3: 安装 Docker-CE
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum clean all
yum makecache
yum -y install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# 步骤4:添加国内镜像站
mkdir -p /etc/docker/
cat > /etc/docker/daemon.json <<EOF
{
  "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"
  ]
}
EOF

# 步骤5:开启Docker服务
systemctl daemon-reload
systemctl restart docker
systemctl enable docker
docker version

# 步骤6:优化内核参数
cat >> /etc/sysctl.conf <<EOF
net.ipv4.ip_forward=1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF

sysctl -p

三:Docker 镜像操作

运行 Docker 容器前需要本地存在对应的镜像。如果不存在本地镜像,Docker 就会尝试从默认镜像仓库下载。镜像仓库是由 Docker 官方维护的一个公共仓库,可以满足用户的绝大部分需求。用户也可以通过配置来使用自定义的镜像仓库。

1:获取镜像

复制代码
[root@localhost ~]# docker pull nginx

docker pull 是 Docker 里的一个关键命令,其主要功能是从 Docker 镜像仓库(默认是 DockerHub)中拉取镜像到本地 Docker 主机

命令语法:docker pull [OPTIONS] NAME[:TAG|@DIGEST]

参数说明:

OPTIONS(可选参数)

  • -a,--all-tags:拉取指定仓库中的所有标签的镜像。
  • --disable-content-trust:默认值为 true,该选项用于禁用镜像内容验证,也就是不验证镜像的签名。

NAME[ :TAG|@DIGEST]

  • NAME:这是要拉取的镜像的名称,它可以包含仓库地址和命名空间信息。例如,在 DockerHub 上的镜像,如果是官方镜像,通常直接写镜像名,如nginx;如果是用户或组织的镜像,则格式为 用户名/镜像名,像 dockerlibrary/redis。
  • TAG(可选):指定要拉取的镜像的具体标签,用于区分同一镜像的不同版本。若不指定标签,默认会拉取 latest 标签的镜像。
  • DIGEST(可选):通过镜像的摘要信息来精确指定要拉取的镜像版本,这能确保拉取的是特定哈希值对应的精确镜像,避免因标签可能指向不同版本而产生混淆。格式如nginx@sha256:abcdef123456...

对于 Docker 镜像来说,如果下载镜像时不指定标签,则默认会下载仓库中最新版本的镜像,即选择标签为 latest 标签,也可通过指定的标签来下载特定版本的某一镜像。这里标签(tag)就是用来区分镜像版本的。

从整个下载的过程可以看出,镜像文件是由若干层(Layer)组成,称之为AUFS(联合文件系统),是实现增量保存与更新的基础,下载过程中会输出镜像的各层信息。镜像下载到本地之后就可以随时使用该镜像了。 用户也可以选择从其他注册服务器仓库下载,这时需要在仓库名称前指定完整的仓库注册服务器地址。

2:查看镜像信息

复制代码
[root@localhost ~]# docker images

docker images 是 Docker 中一个基础且常用的命令,主要用于列出本地 Docker 主机上的镜像信息。docker images 命令会列出本地 Docker 主机上所有可用的镜像,展示镜像的基本信息,帮助用户了解本地镜像的存储情况,包括镜像的仓库名、标签、镜像 ID、创建时间和大小等。

从显示的情况可以读出以下信息:

  • REPOSITORY:镜像属于的仓库:
  • TAG:镜像的标签信息,标记同一个仓库中的不同镜像;
  • IMAGE ID:镜像的唯- ID 号,唯一标识一个镜像;
  • CREATED:镜像创建时间:
  • VIRTUAL SIZE:镜像大小;

命令语法:docker images [OPTIONS] [REPOSITORY[:TAG]]

参数说明:

OPTIONS(可选参数)

  • -a, --all:显示所有镜像(包括中间层镜像)。默认情况下,docker images 只显示顶层镜像。
  • digests:显示镜像的摘要信息。
  • -f,--filter filter:根据指定的条件过滤输出结果。过滤条件可以是多种类型,例如 dangling=true表示只显示虚悬镜像(没有标签的镜像)。
  • --format string:使用 Go 模板语法自定义输出格式。
  • --no-trunc:不截断输出信息,完整显示镜像 ID 等较长的字段。
  • -9,--quiet:只显示镜像的 ID。

REPOSITORY [:TAG](可选)

  • REPOSITORY:指定要显示的镜像仓库名称。
  • TAG:指定要显示的镜像标签。如果不指定标签,默认显示所有标签的镜像。

3:查看镜像的详细信息

复制代码
[root@localhost ~]# docker inspect c15

docker inspect 是 Docker 中一个非常实用的命令,它用于返回 Docker 对象(如容器、镜像、网络、卷等)的底层详细信息,这些信息以 JSON 格式展示,方便用户深入了解 Docker 对象的配置和状态。

命令语法:docker inspect[OPTIONS]NAME|ID [NAME|ID...]参数说明:

OPTIONS:可选参数,用于指定输出格式或过滤特定信息,常见的选项有:

  • --format,-f:指定输出格式,使用 Go 模板语法。
  • --size,-s:在输出中显示容器的文件系统大小(仅适用于容器)

NAME|ID:要检查的 Docker 对象的名称或 ID,可以指定多个对象。可检查的 Docker 对象

docker inspect 可以检査多种 Docker 对象,常见的包括:

容器(Container):获取容器的详细信息,如运行状态、网络配置、挂载点等。

镜像(Image):查看镜像的构建历史、层信息、环境变量等。

网络(Network):了解网络的配置,如驱动类型、子网信息等。

卷(Volume):获取卷的详细信息,如挂载路径、驱动类型等。

4:修改镜像标签(老名字+新名字)

复制代码
[root@localhost ~]# docker tag nginx nginx:v1
[root@localhost ~]# docker images

在 Docker 中,docker tag 命令用于为现有的 Docker 镜像添加一个新的标签(tag)。标签本质上是镜像的一个别名,它可以让你更方便地引用和管理镜像,同时也有助于区分不同版本或用途的镜像。

命令语法:docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]

参数说明:

  • SOURCE_IMAGE[:TAG]:指定源镜像的名称和标签。SOURCE IMAGE 是源镜像的名称,「:TAG] 是可选的标签,如果不指定标签,默认使用 latest。
  • TARGET_IMAGE[:TAG]:指定目标镜像的名称和标签。这是你要为源镜像添加的新标签。同样,TARGET_IMAGE 是目标镜像的名称,[:TAG]是可选的标签,如果不指定标签,默认使用 latest。

docker tag 命令并不会创建一个新的镜像,它只是为现有的镜像添加一个额外的标签。多个标签可以指向同一个镜像,这些标签只是镜像的不同引用方式。

5:删除镜像

复制代码
# 用镜像名删除
[root@localhost ~]# docker rmi nginx:v1

# 用镜像ID删除 
[root@localhost ~]# docker rmi c15

命令语法:docker rmi [OPTIONS] IMAGE [IMAGE...]

参数说明:

OPTIONS(可选参数)

  • -f,--force:强制删除镜像。即使有容器正在使用该镜像,也会尝试删除,但不建议轻易使用,因为可能导致容器无法正常运行。
  • --no-prune:默认情况下,删除镜像时会同时删除该镜像相关的未使用的父镜像层(虚悬镜像),使用该选项可以禁止删除这些父镜像层。

IMAGE

  • 指定要删除的镜像,可以是镜像的名称、标签、镜像 ID,也可以同时指定多个镜像。例如:nginx:latest、123456789abc 等。

注意事项:

  • 在删除镜像之前,要确保没有正在运行或已停止的容器依赖该镜像。可以使用 docker ps -a命令査看所有容器,使用 docker stop 和 docker rm 命令停止并删除依赖该镜像的容器后,再删除镜像。
  • 镜像的删除是不可逆的操作,删除后无法恢复,所以在执行删除操作前要谨慎确认。
  • 当删除一个有多个标签的镜像时,删除一个标签只是移除该标签的引用,只有当所有标签都被删除后,镜像才会真正从磁盘上删除。

6:存出镜像和载入镜像

复制代码
# (1) 导出镜像
[root@localhost ~]# docker save -o nginx.tar nginx:latest

# (2) 删除镜像 
[root@localhost ~]# docker rmi nginx:latest

# (3) 导入镜像
[root@localhost ~]# docker load < nginx.tar

注意事项:

  • 文件大小:保存的镜像文件可能会非常大,尤其是包含多个大型镜像时。在保存和传输这些文件时,要确保有足够的磁盘空间和网络带宽。
  • 镜像版本:保存的镜像文件中包含的是特定版本(标签)的镜像。在恢复镜像时,要确保使用正确的标签和版本。
  • 跨平台兼容性:虽然 Docker 镜像是设计为跨平台的,但在不同的操作系统上保存和加载镜像时,可能会遇到一些兼容性问题。尽量在相同或兼容的操作系统版本之间传输和使用镜像。
  • 镜像依赖:如果保存的镜像依赖于其他基础镜像,确保在目标环境中也有这些基础镜像,或者将它们一起保存和传输。

四:Docker 容器操作

容器是 Docker 的另一个核心概念。简单说,容器是镜像的一个运行实例,是独立运行的一个或一组应用以及它们所必需的运行环境,包括文件系统、系统类库、she11 环境等。镜像是只读模板,而容器会给这个只读模板添加一个额外的可写层。

容器的创建与启动

操作类型 命令语法 主要功能 常用参数 示例
创建容器 docker create [OPTIONS] IMAGE 基于指定镜像创建容器但不启动 -it(交互式终端) -p(端口映射) -v(数据卷挂载) --name(命名容器) docker create -it --name mycentos centos:7
查看容器 docker ps [OPTIONS] 列出容器信息(默认仅显示运行中的容器) -a(显示所有容器) -q(仅显示ID) -f(按条件过滤) `docker ps -a
启动容器 docker start [OPTIONS] CONTAINER 启动已创建的容器 -a(附加到容器输出) -i(保持交互式输入) docker start -ai mycentos
创建并启动容器 docker run [OPTIONS] IMAGE [COMMAND] 直接创建并启动容器(若镜像不存在会自动拉取) -d(后台运行) -it(交互式终端) --rm(退出后自动删除) docker run -d --name web -p 8080:80 nginx
后台持续运行 docker run -d IMAGE [COMMAND] 启动容器并在后台持续运行(需确保容器内有常驻进程) -d(后台运行) --cpus(限制CPU) -m(限制内存) docker run -d centos:7 /bin/bash -c "while true; do echo hello; done"

关键注意事项

  • 容器命名冲突:使用 --name 时需确保名称唯一。
  • 资源限制:生产环境建议通过 -m--cpus 限制资源。
  • 日志查看:后台运行的容器需通过 docker logs 查看输出。
场景 推荐命令 原因
调试容器 docker run -it 直接进入交互式终端
批量预配置容器 docker create + start 提前配置,按需启动
运行服务类容器(如Nginx) docker run -d 后台常驻,自动拉取镜像
[操作场景对比]
操作类型 命令语法 主要功能 常用参数 注意事项
终止容器 docker stop [OPTIONS] CONTAINER 优雅停止运行中的容器(发送SIGTERM信号) -t(设置等待时间,默认10秒) 1. 容器需正确处理SIGTERM信号 2. 注意容器间依赖关系
强制终止容器 docker kill [OPTIONS] CONTAINER 立即强制终止容器(发送SIGKILL信号) -s(指定终止信号,如SIGKILL) 可能导致数据丢失,慎用
进入容器 docker exec [OPTIONS] CONTAINER 在运行中的容器内执行命令 -it(交互式终端) -u(指定用户) -w(指定工作目录) 1. 容器必须处于运行状态 2. 注意权限和环境差异
导出容器 docker export CONTAINER > file.tar 将容器文件系统导出为tar归档 1. 与docker save区别:不包含镜像历史 2. 运行中容器导出可能导致不一致状态
导入为镜像 docker import file.tar IMAGE:TAG 从tar文件创建新镜像 -c(添加Dockerfile指令) 生成镜像无构建历史,仅含当前文件系统快照
删除容器 docker rm [OPTIONS] CONTAINER 删除已停止的容器 -f(强制删除运行中容器) -v(同时删除关联卷) 1. 默认需先停止容器 2. 数据卷删除不可逆
场景 推荐命令 优势
正常停止服务 docker stop -t 20 允许应用完成清理操作
容器无响应时 docker kill 立即释放资源
调试容器 docker exec -it bash 不中断服务运行
[关键操作对比]

数据持久化建议

  • 重要数据应通过-v挂载数据卷

  • 删除容器时避免使用-v参数,除非确认数据可丢弃

    停止所有运行中的容器

    docker stop $(docker ps -q)

    删除所有已停止容器

    docker rm $(docker ps -aq)

    导出所有容器

    for id in (docker ps -aq); do docker export id > $id.tar; done

相关推荐
ulias2126 小时前
Linux系统中的权限问题
linux·运维·服务器
青花瓷7 小时前
Ubuntu下OpenClaw的安装(豆包火山API版)
运维·服务器·ubuntu
问简8 小时前
docker 镜像相关
运维·docker·容器
Dream of maid8 小时前
Linux(下)
linux·运维·服务器
齐鲁大虾9 小时前
统信系统UOS常用命令集
linux·运维·服务器
Benszen9 小时前
Docker容器化技术实战指南
运维·docker·容器
ZzzZZzzzZZZzzzz…9 小时前
Nginx 平滑升级:从 1.26.3 到 1.28.0,用户无感知
linux·运维·nginx·平滑升级·nginx1.26.3·nginx1.28.0
Hommy889 小时前
【开源剪映小助手】Docker 部署
docker·容器·开源·github·aigc
一叶知秋yyds10 小时前
Ubuntu 虚拟机安装 OpenClaw 完整流程
linux·运维·ubuntu·openclaw
斯普信云原生组11 小时前
Prometheus 环境监控虚机 Redis 方案(生产实操版)
运维·docker·容器