服务器 | Docker应用开发与部署的实践以及阿里云镜像加速配置

发布于:2025-09-09 ⋅ 阅读:(13) ⋅ 点赞:(0)

概要

Dockerhttps://www.docker.com/

  • 一个开源的容器化平台,它彻底改变了软件的开发、交付和运行方式。
  • 核心理念:
    • 将 应用程序及其所有依赖 打包成一个轻量级、可移植、自包含的标准化单元——容器
    • 运行在容器中,使用沙箱机制,相互隔离
  • 解决大型项目依赖关系负载,不同组件依赖的兼容性问题

注:

  • 所有依赖:代码、运行时环境、系统工具、库和配置文件

在初步了解了Docker后,下面会进一步去看看Docker具体是怎样实现以上效果的。

在这里插入图片描述

核心概念

1、镜像 (Image):

  • 镜像是一个只读模板,包含了运行应用程序所需的一切。
    • 定义了 容器文件系统启动时执行 的命令。
  • Docker镜像中包含完整的运行环境,这使得其 仅依赖系统的Linux内核
  • 镜像通过 Dockerfile(一个文本文件,包含一系列构建指令)来创建。

2、容器 (Container)

  • 容器是镜像的运行实例。基于镜像启动时,就创建了一个容器(也可以称为进程)。
  • 容器是轻量级和隔离的。它拥有自己的文件系统、网络、进程空间和资源限制,仅共享宿主机的操作系统内核
  • 可以随时创建、启动、停止、删除。

3、Dockerfile:

  • 一个文本文件,包含了一系列指令,用于自动化地构建 Docker 镜像
  • 构建命令:
docker build -t my-image:version .

4、Docker Compose:

  • 用于定义和运行多容器 Docker 应用的工具。通过一个 docker-compose.yml 文件
  • 配置应用所需的所有服务(如 Web 服务器、数据库、缓存等)
  • 执行命令:
# DockerDesktop 2.15+、DockerEngine 20.10+开始内置的原生插件
docker compose up -d

5、DockerHub

  • Docker镜像的托管平台,Docker Registry

Docker和虚拟机的区别

  • Hypervisor:实现服务器虚拟化的核心软件。
    • 允许多个操作系统(称为客户机操作系统或虚拟机)共享同一台物理硬件资源

在这里插入图片描述

Docker安装

1、环境介绍

  • CentOS-Stream-9-latest-x86_64-dvd1

2、安装docker

2.1、卸载旧版

  • 移除可能存在的旧版 Docker。
  • podman 是 Docker 的替代品,建议卸载以避免命令冲突
yum remove docker \
				docker-client \
				docker-client-latest \
				docker-common \
				docker-latest \
				docker-latest-logrotate \
				docker-logrotate \
				docker-selinux \
				docker-engine-selinux \
				docker-engine \
				docker-ce

2.2、安装依赖工具

  • dnf-plugins-core 提供了 yum-config-manager 工具,用于管理软件源。
yum install -y yum-utils device-mapper-persistent-data lvm2 --skip-broken
# 或者
sudo dnf install -y dnf-plugins-core

2.3、添加 Docker 官方仓库(推荐使用阿里云镜像加速)

sudo yum-config-manager \
    --add-repo \
    https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    

2.4、替换仓库 URL 为阿里云镜像(双重保险)

  • sed(流编辑器)全局搜索并替换仓库文件中的原始 Docker 官方域名
    • i:直接修改文件内容(in-place edit),不输出到终端。
    • ‘s/旧文本/新文本/g’:
      • s 表示 substitute(替换)
      • g 表示全局替换(一行中所有匹配都替换)
sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo

#  首次使用系统或长时间未更新时,建议先刷新缓存
sudo yum makecache

2.4、安装docker客户端

  • docker-ce安装时,由于依赖关系,系统会自动安装
    • docker-ce-cli 和 containerd.io
# 自动化脚本中使用,明确意图
sudo yum install -y docker-ce docker-ce-cli containerd.io
# 或者
yum install -y docker-ce

2.5、docker启动命令

# 启动
systemctl start docker
# 停止
systemctl stop docker
# 重启
systemctl restart docker
# 自启动
systemctl enable docker

2.6、验证安装

# 查看 Docker 版本
docker --version

# 查看详细信息
docker version

# 查看系统信息
docker info

# 运行测试容器,等待自动拉取
sudo docker run hello-world

镜像加速配置

  • 截止2025年8月15日,ACR镜像加速目前已停止同步最新镜像。

  • 提供两种解决方案:

    • 通过容器镜像服务ACR订阅海外源镜像
    • 创建全球加速GA(Global Accelerator)实例,使用其覆盖全球的网络加速服务直接拉取海外源镜像
  • 阿里云官方镜像加速文档

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<- 'EOF'
{
 "registry-mirrors": [
	 # 获取的个人镜像加速网址
	  "https://docker.1panel.live",
	  "https://hub.rat.dev"
  ]
}
EOF

# 重新加载 systemd 的配置文件
sudo systemctl daemon-reload
# 重启docker
sudo systemctl restart docker

镜像操作

1、构建镜像

以下是构建一个nginx镜像的操作:
1、目录结构:

your-project/
│ ├── Dockerfile
│ ├── nginx.conf
│ └── dist/

2、了解 Dockerfile

  • 一个文本文件,包含了一系列指令,用于自动化地构建 Docker 镜像
  • 常见的指令:
    • FROM (指定基础镜像)
    • COPY (复制文件)
    • CMD (指定容器启动时运行的命令)
    • EXPOSE(向镜像的使用者说明,推荐使用的端口)

注:

  • COPY 指令只能复制构建上下文内的文件

示例 dockerfile文件

# 示例 dockerfile文件
# 使用官方的 Nginx 镜像为起点
FROM nginx:alpine
# 复制当前目录下的配置文件覆盖镜像中的默认配置
COPY nginx.conf /etc/nginx/conf.d/default.conf
# 复制文件到镜像
COPY dist /usr/share/nginx/html
# 暴露端口 (声明)
EXPOSE 80
# Nginx 镜像已内置了启动命令
# CMD ["nginx", "-g", "daemon off;"]

构建镜像命令

  • . :Dockerfile 所在目录(当前目录)
# docker build -t 镜像名:标签 .  
docker build -t my-image:1.0.0 .

# 使用镜像查看命令 可查看构建好的镜像
docker images

2、导出、导入镜像

Docker的核心作用之一就是:便于移植。以下是移植镜像所需命令:

  • 导出
# 导出
docker save 镜像名 > 文件名.tar
# 示例:
docker save hello-world > hello-world.tar
# 支持压缩:
docker save hello-world | gzip > hello-world.tar.gz

导出后,会呈现以下结果:

在这里插入图片描述

  • 导入
# 导入
docker load < 文件名.tar
# 示例:
docker load < hello-world.tar
docker load < hello-world.tar.gz

导入后,会呈现以下结果:
在这里插入图片描述

3、 查看镜像:详细信息、本地镜像、构建历史

查看镜像信息尤为重要,这可以给我们提供许多有效信息,便于后续操作。

# 列出本地所有镜像
docker images

# 查看镜像详细信息 输出 JSON 格式的详细信息
docker image inspect 镜像名或ID

# 查看镜像的构建历史
docker history 镜像名或ID

4、删除镜像、拉取镜像

# 删除镜像
docker rmi 镜像名或ID

# 删除所有未被使用的镜像
docker image prune
# 从镜像仓库拉取镜像到本地
docker pull 镜像名:标签

5、推送至镜像仓库

本文使用的是阿里云个人仓库:

通过以上帮助文档,即可构建属于自己的镜像仓库。

下面是推送镜像到远程镜像仓库中的具体操作:

# 1. 先登录仓库
sudo docker login --username=鳄鱼杆 个人仓库地址

# 2. 给镜像打标签(命名空间/仓库名:标签)
docker tag ImageId 新仓库地址/镜像名:标签

# 示例:
docker tag [ImageId] 个人仓库地址/hello-world:[镜像版本号]

# 3. 推送到镜像仓库
docker push 个人仓库地址/阿里账户名称/hello-world:[镜像版本号]

# 成功返回:ImageId: Pushed 

  • 以上就是镜像的全部操作,镜像是移植的基础。
  • 了解镜像的操作,方便以后部署他人、自己构建好的镜像。这会极大的节约了时间。

小结

  • 常用命令速查表

在这里插入图片描述

容器操作

基于之前验证安装时,拉取的hello-world镜像进行的以下容器操作演示:

在这里插入图片描述

1、创建容器

# 将宿主机的 8080 端口映射到容器的 80 端口
docker run -d -p 8080:80 --name hello-world-container hello-world:latest

在这里插入图片描述

2、查看容器:基本、详细信息

# 查看正在运行的容器
docker ps

# 查看所有容器
docker ps -a

# 查看指定容器资源使用情况
docker stats 容器名或ID

# 详细信息
# 查看容器配置和状态
docker inspect 容器名或ID
查看容器日志
# 查看容器日志
docker logs 容器名或ID

# 实时查看日志(类似 tail -f)
docker logs -f 容器名或ID

# 显示最近 10 行
docker logs --tail 10 容器名或ID

# 显示带时间戳的日志
docker logs -t 容器名或ID

3、启动与停止容器

  • 停止容器:
    • stop 会发送 SIGTERM,等待容器关闭;
    • kill 直接发送 SIGKILL。
# 启动已停止的容器
docker start 容器名或ID

# 停止运行中的容器
docker stop 容器名或ID

# 强制停止容器
docker kill 容器名或ID

# 重启容器
docker restart 容器名或ID

# 暂停容器(冻结)
docker pause 容器名或ID

# 恢复容器
docker unpause 容器名或ID

4、删除容器

# 删除已停止的容器	
docker rm 容器名或ID

# 强制删除运行中的容器	
docker rm -f 容器名或ID

#删除所有已停止的容器	
docker container prune

# 删除所有容器(慎用!慎用!慎用!)	
docker rm -f $(docker ps -aq)

额外:

进入容器
  • 推荐使用 exec,而不是 attach,因为 exec 可以开启多个终端。
docker exec -it 容器名或ID /bin/bash
# 或 sh(适用于 Alpine 等轻量镜像)
docker exec -it 容器名或ID /bin/sh
数据拷贝(容器 ↔ 主机)
  • 从容器复制文件到主机
    • docker cp 容器名:路径 主机路径
  • 从主机复制文件到容器
    • docker cp 主机路径 容器名:路径


# 从容器复制日志
docker cp web1:/var/log/nginx/access.log ./access.log

# 向容器上传配置
docker cp ./nginx.conf web1:/etc/nginx/nginx.conf
清理容器(释放空间)
# 删除所有已停止的容器
docker container prune

# 删除所有未使用的资源(容器、网络、镜像、构建缓存)
docker system prune

# 删除所有未使用的资源(包括未被引用的镜像)
docker system prune -a

小结

  • 常用容器命令表

在这里插入图片描述

总结

  • 本文介绍内容如下:
    • 核心概念、Docker和虚拟机的区别
    • Docker安装、阿里云镜像加速配置
    • 镜像操作、容器操作
  • 下一篇文章准备介绍
    • 如何使用docker compose进行容器编排部署?
    • 多项目部署最佳实践案例,会详细描述数据卷挂载、项目结构等问题处理方案。

各位再见!这里是 鳄鱼杆的空间,钓……鳄鱼的杆儿!

期待下次再会!

愿你的每一次垂钓之旅都能满载而归。

在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到