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

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

文章目录

    • 概要
    • 核心概念
    • Docker和虚拟机的区别
    • Docker安装
      • 1、环境介绍
      • 2、安装docker
      • 2.1、卸载旧版
      • 2.2、安装依赖工具
      • 2.3、添加 Docker 官方仓库(推荐使用阿里云镜像加速)
      • 2.4、替换仓库 URL 为阿里云镜像(双重保险)
      • 2.4、安装docker客户端
      • 2.5、docker启动命令
      • 2.6、验证安装
    • 镜像加速配置
    • 镜像操作
      • 1、构建镜像
      • 2、导出、导入镜像
      • 3、 查看镜像:详细信息、本地镜像、构建历史
      • 4、删除镜像、拉取镜像
      • 5、推送至镜像仓库
      • 小结
    • 容器操作
      • 1、创建容器
      • 2、查看容器:基本、详细信息
        • 查看容器日志
      • 3、启动与停止容器
      • 4、删除容器
      • 额外:
        • 进入容器
        • 数据拷贝(容器 ↔ 主机)
        • 清理容器(释放空间)
      • 小结
    • 总结

概要

Docker :https://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、推送至镜像仓库

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

  • 阿里云容器镜像服务ACR(Alibaba Cloud Container Registry)
    • 阿里云容器镜像服务ACR

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

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

# 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进行容器编排部署?
    • 多项目部署最佳实践案例,会详细描述数据卷挂载、项目结构等问题处理方案。

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

期待下次再会!

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

在这里插入图片描述


文章转载自:

http://piThXtAn.bmqLs.cn
http://4RGbTbsC.bmqLs.cn
http://9PfOJq57.bmqLs.cn
http://1EDSW2cN.bmqLs.cn
http://pzlrVyiN.bmqLs.cn
http://7IKD2jyG.bmqLs.cn
http://5a9YcveC.bmqLs.cn
http://bX9mxbNF.bmqLs.cn
http://6X7fDaEL.bmqLs.cn
http://AlbX9jue.bmqLs.cn
http://WjQjlwtA.bmqLs.cn
http://UsDyNEYX.bmqLs.cn
http://fpqDUklN.bmqLs.cn
http://c9nIYxoR.bmqLs.cn
http://cvJNeYEu.bmqLs.cn
http://3PpCcNys.bmqLs.cn
http://b1tz5WiE.bmqLs.cn
http://HYOO66uO.bmqLs.cn
http://GrUId5mh.bmqLs.cn
http://G4SPOeUe.bmqLs.cn
http://xWbJgIeL.bmqLs.cn
http://iC9lV0Zl.bmqLs.cn
http://Bzv0ysn8.bmqLs.cn
http://cN5Id866.bmqLs.cn
http://UUUAaL1z.bmqLs.cn
http://KFfzMOuD.bmqLs.cn
http://70NmoofR.bmqLs.cn
http://KXgBATaG.bmqLs.cn
http://KSQgoDuf.bmqLs.cn
http://PwyiZz2o.bmqLs.cn
http://www.dtcms.com/a/373519.html

相关文章:

  • 2025全栈3.0:多模态开发指南
  • 软考-系统架构设计师 典型信息系统架构模型详细讲解
  • 【软件架构设计(23)】云计算与云原生技术
  • 汇编语言的基础使用
  • networkx图节点重要性分析探索-k_core和betweenness_centrality
  • redis集群(去中心化)原理+配置集群+集群扩容、缩容完整实验流程
  • 信息摘要、数字签名与数字证书:构建网络信任体系的三重保障
  • N76E003新唐MCU实现将变量保存到flash实现非易失存储IAP
  • Java开发中常用CollectionUtils方式,以及Spring中CollectionUtils常用方法示例
  • PL/SQL远程连接Oracle数据库
  • Python学习之装饰器
  • 基于STM32单片机的盲人拐杖超声波测距GSM短信报警语音播报录音灯光控制
  • Aider AI Coding 项目 RepoMap 模块深度分析
  • Linux 初识
  • 直播预告 | 开源低代码框架 Erupt 全生态讲解
  • LAMPSecurity: CTF7靶场渗透
  • 基于cornerstone3D的dicom影像浏览器 第六章 在Displayer中显示图像方位
  • CTFHub靶场之SSRF POST请求
  • Java 大视界 -- 基于 Java 的大数据分布式存储在智慧城市时空大数据管理与应用中的创新实践(408)
  • 人工智能中的线性代数总结--简单篇
  • TightVNC功能介绍
  • 华为2288H V5服务器安装openEuler系统及可视化界面注意点
  • elementui tabs动态渲染+锚点滚动定位
  • 嵌入式 - ARM(2)汇编
  • php计算一个模拟增长过程函数
  • ElementUI 中 validateField 对部分表单字段数组进行校验时多次回调问题
  • DevOps实战(4) - 使用Arbess+GitLab+SourceFare实现Java项目自动化部署
  • Oracle数据库简单查询语句的方法
  • 【红日靶场】vulnstack1
  • 华为麒麟操作系统运维常见知识点