服务器 | 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进行容器编排部署?
- 多项目部署最佳实践案例,会详细描述数据卷挂载、项目结构等问题处理方案。
各位再见!这里是 鳄鱼杆的空间,钓……鳄鱼的杆儿!
期待下次再会!
愿你的每一次垂钓之旅都能满载而归。