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

Docker 的安装部署与基本使用

目录

Docker 安装与部署

卸载旧版本

更新 apt 包索引

添加 Docker 的官方 GPG 密钥

使用以下指令设置稳定版仓库

更新 apt 包索引

安装 Docker Engine-Community

检查版本

Docker 的基本使用

Dockerfile 常见构建指令

Docker 镜像优化方案

Docker 跨平台构建

多阶段构建


Docker 安装与部署

卸载旧版本

Docker 的旧版本被称为 docker,docker.io 或 docker-engine 。如果已安装,请卸载它们:

apt-get remove docker docker-engine docker.io containerd runc

更新 apt 包索引

apt updateapt -y install apt-transport-https ca-certificates curl software-properties-common

添加 Docker 的官方 GPG 密钥

curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -

使用以下指令设置稳定版仓库

add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"

更新 apt 包索引

apt update

安装 Docker Engine-Community

apt -y install docker-ce  docker-ce-cli containerd.io

检查版本

docker -v

Docker 的基本使用

  • 运行容器 docker run -e 传递环境变量 -v 持久化存储

  • 列出容器 docker ps -a 列出当前机器上所有的容器 -q 只列出容器的 id

  • 查看容器详情 docker inspect 容器id或者容器名称

  • 停止容器 docker stop / docker kill

  • 删除容器 docker rm -f(强制删除)

  • 进入容器 docker exec -it /bin/bash

  • 暂停容器 docker pause

  • 从暂停中恢复 docker unpause

  • 启动容器 docker start

  • 重启容器 docker restart

  • 限制 cpu docker run --cpus

  • 限制内容 docker run -m

  • 拉取镜像 :docker pull

  • 列出镜像 :docker image ls

  • 查看镜像 : docker image inspect

  • 删除镜像 :docker rm -f

  • 给镜像打标签 :docker tag source_image dest_image

  • 上传镜像 :docker push

Dockerfile 常见构建指令

  • FROM:指定基础镜像,所有后续操作都基于这个镜像。

  • RUN:执行命令,通常用于安装软件包或执行脚本。

  • CMD:容器启动时默认执行的命令。

  • EXPOSE:声明容器运行时监听的端口,不会发布端口,只是作为文档说明使用。

  • ENV:设置环境变量。

  • ADD:将文件、目录或远程文件URL添加到容器中。

  • COPY:复制本地文件或目录到容器中,相比 ADD,COPY 不会解压缩归档文件或处理 URL。

  • ENTRYPOINT:配置容器启动时运行的可执行文件。

  • VOLUME:创建一个可以从本地主机或其他容器挂载的挂载点。

  • USER:指定运行容器时的用户名或 UID。

  • WORKDIR:设置工作目录,即容器内部的当前目录。

  • ARG:定义构建时的变量,可以在构建时通过 --build-arg 指定。

  • LABEL:为镜像添加元数据,通常用于描述信息。

  • STOPSIGNAL:设置停止容器时使用的系统调用信号。

  • HEALTHCHECK:定义如何检查容器是否健康。

    • -- interval 检查周期

    • -- retries 重试次数

    • -- timeout 超时时间

Docker 镜像优化方案

  1. 使用精简的基础镜像: 选择一个精简的基础镜像,如 Alpine Linux,可以显著减小镜像大小。

  2. 合并 RUN 指令: 多个 RUN 指令可以合并为一个,以减少镜像层数,加速构建和分发。

  3. 利用缓存: 合理安排 Dockerfile 中的指令顺序,使得不会频繁变动的层可以被缓存。

  4. 清理工作目录: 使用 RUN apt-get clean 或类似的命令清理临时文件和缓存,减小镜像大小。

  5. 删除不必要的文件: 在构建过程中删除不需要的文件和目录,例如 .dockerignore 文件中指定的文件。

  6. 使用多阶段构建: 使用多阶段构建来减小最终镜像大小,编译时使用一个包含所有工具的基础镜像,最终只保留编译产物。

  7. 优化软件包管理器: 使用 yumapt-get 的参数来减小软件包管理器安装软件后产生的缓存和临时文件。

  8. 使用更小的软件包: 选择更小的软件包或替代品,例如使用 busybox 作为轻量级的一站式解决方案。

  9. 使用体积优化工具: 使用如 DockerSlimdive 等工具来帮助分析和优化镜像大小。

  10. 避免使用 ADD: 尽量使用 COPY 指令代替 ADD,因为 ADD 可以执行解压缩操作,可能会增加镜像大小。

  11. 优化镜像层: 使用 && 连接命令,确保它们在同一个层中执行,减少层数。

  12. 使用 .dockerignore 文件: 创建 .dockerignore 文件来排除不需要添加到镜像的文件和目录。

  13. 移除设置环境变量的不必要层: 如果环境变量不会影响后续层的构建,可以将其移除以减少层数。

  14. 使用精简的操作系统: 如果可能,使用精简版的操作系统,如 Debian 的 slim 版本。

  15. 避免安装不必要的软件包: 仔细审查 RUN 指令中安装的软件包,只安装需要的软件包。

  16. 使用镜像标签管理: 使用标签来管理不同版本的镜像,确保使用的是优化过的版本。

  17. 定期更新和优化 Dockerfile: 随着时间的推移,持续更新和优化 Dockerfile,以利用 Docker 引擎和基础镜像的改进。

Docker 跨平台构建

必须在 Dockerfile 当中兼容跨平台的包

配置 Docker 跨平台构建

docker run --privileged --rm tonistiigi/binfmt --install all
{"features":{"containerd-snapshotter":true}}systemctl restart docker

多阶段构建

在一个 Dockerfile 中可以出现两个及以上的 FROM ,每一个 FROM 为一个阶段 基本上只有 go 或者 c 语言的构建才会使用 多阶构建

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 使用 from __future__ import annotations 语句来允许在类型注释中使用尚未定义的类名
  • 用 Pygame 实现一个乒乓球游戏
  • 数字IC设计\FPGA 职位经典笔试面试整理--语法篇 Verilog System Verilog(部分)
  • lxml库
  • Axios基本语法和前后端交互
  • 【排序算法】选择排序、堆排序
  • Vue3:shallowRef与shallowReactive
  • JS手写Promise以及promise.all方法
  • 【算法】贪心+堆排序实现大根堆及标准库容器类的融合使用
  • 车载网络测试实操源码_使用CAPL脚本实现安全访问解锁,并模拟各种测试场景
  • C语言中易混淆概念的关键字
  • Qt/C++ 多线程同步机制详解及应用
  • redis 十大应用场景
  • 特种作业管理系统 —— 企业安全与效率的卓越保障
  • EfficientViT(2023CVPR):具有级联组注意力的内存高效视觉Transformer!
  • 分享一款快速APP功能测试工具
  • 【译】React性能工程(下) -- 深入研究React性能调试
  • git 常用命令
  • JavaScript设计模式系列一:工厂模式
  • v-if和v-for连用出现的问题
  • Yii源码解读-服务定位器(Service Locator)
  • 从零到一:用Phaser.js写意地开发小游戏(Chapter 3 - 加载游戏资源)
  • 从输入URL到页面加载发生了什么
  • 工程优化暨babel升级小记
  • 技术:超级实用的电脑小技巧
  • 理解 C# 泛型接口中的协变与逆变(抗变)
  • 前端设计模式
  • 如何利用MongoDB打造TOP榜小程序
  • 如何学习JavaEE,项目又该如何做?
  • 使用 QuickBI 搭建酷炫可视化分析
  • 微信小程序设置上一页数据
  • 线上 python http server profile 实践
  • 小程序开发之路(一)
  • #、%和$符号在OGNL表达式中经常出现
  • #{} 和 ${}区别
  • #绘制圆心_R语言——绘制一个诚意满满的圆 祝你2021圆圆满满
  • (11)MSP430F5529 定时器B
  • (12)目标检测_SSD基于pytorch搭建代码
  • (2)(2.10) LTM telemetry
  • (保姆级教程)Mysql中索引、触发器、存储过程、存储函数的概念、作用,以及如何使用索引、存储过程,代码操作演示
  • (定时器/计数器)中断系统(详解与使用)
  • (二)斐波那契Fabonacci函数
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (四)进入MySQL 【事务】
  • (转)ABI是什么
  • (转载)Linux 多线程条件变量同步
  • (自用)gtest单元测试
  • **《Linux/Unix系统编程手册》读书笔记24章**
  • .class文件转换.java_从一个class文件深入理解Java字节码结构
  • .net core 实现redis分片_基于 Redis 的分布式任务调度框架 earth-frost
  • .NET Core/Framework 创建委托以大幅度提高反射调用的性能
  • .NET 同步与异步 之 原子操作和自旋锁(Interlocked、SpinLock)(九)
  • .NET8 动态添加定时任务(CRON Expression, Whatever)
  • .net8.0与halcon编程环境构建
  • .NET教程 - 字符串 编码 正则表达式(String Encoding Regular Express)