Docker教程

docker 安装

官方文档

wget -qO- https://get.docker.com/ | sh

sudo usermod -aG docker your-user

sudo usermod -aG docker ${USER}

newgrp docker # 更新docker用户组

cat /etc/group | grep docker

docker --version

使用非root用户管理

帮助启动类 命令

  • systemctl start docker # 启动Docker
  • systemctl stop docker # 停止Docker
  • systemctl restart docker # 重启Docker
  • systemctl status docker # 查看状态
  • systemctl enable docker # 开机启动
  • docker info # 概要信息
  • docker --help # 查看总体帮助
  • docker xxx --help # 查看命令帮助

镜像命令

  • docker images # 列出本地主机上的镜像
    • -a # 所有历史
    • -q # 只展示ID
  • docker search XXX # 搜索镜像名
    • --limit 5 XXX # 前五
  • docker pull XXX[:tag] # 下载镜像
  • docker system df # 查看镜像/容器/数据卷锁占的空间
  • docker rmi XXX
    • -f # 强制删除
    • docker rmi -f $(docker images -qa) # 删除所有
  • 虚悬镜像是什么:
    • 名称、标签都是None的镜像,俗称虚悬镜像 dangling image
  • docker save 镜像ID -o xxx.tar # 保存一个镜像为一个tar包
  • docker load 镜像ID -i xxx.tar # 从tar包加载镜像
  • docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/sajor/project:[镜像版本号]

容器命令

  • docker run [OPTIONS] image [COMMAND]

    • [OPTIONS]
      • --name="容器名字" # 为容器指定一个名称
      • -d # 后台运行容器并返回容器ID,也即启动守护式容器(后台运行)
      • -i # 以交互模式运行容器,通常与-t同时使用
      • -t # 为容器重新分配一个伪输入终端,通常与-i同时使用
      • -P # 随机端口映射,大写P 映射所有Dockerfile中EXPOSE的端口
      • -p # 指定端口映射,小写p
      • -w # 覆盖WORKDIR工作目录
      • -e # 传递环境变量,同ENV指令
      • -u # 指定用户
      • --restart # 自动重启
        • --restart=always # 总是
        • --restart=on-failure:5 # 退出代码非0时重启,且重启次数最多为5次
      • --log-driver # 日志驱动 ="syslog" 日志重定向到syslog并关闭docker logs命令
      • --entrypoint # 覆盖Dockerfile中的ENTRYPOINT指令
  • docker create [OPTIONS] IMAGE [COMMAND] [ARG...] 创建容器,但不运行

  • docker ps # 罗列

    • [OPTIONS]
      • -a # 显示所有正在运行,和历史运行过的容器
      • -l # 显示最近创建的容器
      • -n # 显示最近n个容器
      • -q # 静默模式,只显示容器编号
      • --format 列出其他信息 docker ps -a --format "table {{.ID}}\t{{.Image}}\t{{.CreatedAt}}\t{{.Status}}\t{{.Names}}"
  • 退出方式

    • exit # run进去的容器,exit退出,容器停止
    • ctrl+p+q # run进去的容器,ctrl+p+q退出,容器不停止
  • docker start 容器ID或容器名 # 启动已停止运行的容器

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

  • docker stop 容器ID或容器名 # 停止容器

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

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

    • -f # 强制删除
    • docker rm -f $(docker ps -qa) # 删除所有
    • docker ps -aq | xargs docker rm # 删除所有
  • docker logs XXX # 查看容器日志

    • -f # 持续更新
    • -t # 加入时间戳
    • --tail 0 从倒数0行开始
    • 示例 docker logs -ft --tail 10 xxx
  • docker top XXX # 查看docker内部运行的进程

  • docker port XXX port # 查看容器映射端口

  • docker inspect XXX # 查看内部细节

    • 查看挂载目录 docker inspect container_id | grep Mounts -A 20
    • --format 可以格式化细节 docker image inspect --format='{{.RepoTags}} {{.Id}} {{.Parent}}' $(docker image ls -q --filter since=xxxxxx)
  • docker exec -it 容器ID bash地址 # 重新进入交互式

  • docker attach XXX # 重新进入容器

    • attach与exec的区别
      • attach直接进入容器启动的终端,不会启动新的进程,用exit退出,会导致容器的停止。
      • exec是在容器中打开新的终端,并且可以启动新的进程,用exit退出,不会导致容器的停止。
      • 推荐使用exec,退出容器终端,不会导致容器的停止。
  • docker cp 容器ID:容器内部路径 目标外部路径 # 拷贝容器内部文件到外部

  • docker export 容器ID > xxx.tar # 导出容器 对应import

  • cat xxx.tar | docker import - 镜像用户/镜像名:版本号 # 导入容器

  • docker commit -m="描述" -a="作者" 容器ID 要创建的目标镜像名:[标签名] # 基于某容器实例,创建新的镜像

数据卷

数据卷是在一个或者多个容器内被选定的目录,可以绕过分层的联合文件系统(Union File System),为Docker提供持久数据或者共享数据。

这意味着对卷的修改会直接生效,并绕过镜像,当提交或者创建镜像时,卷不被包含在镜像里。卷也可以在容器间共享。即便容器停止,卷里的内容依旧存在。

目录后面加上rw或者ro来指定容器内目录的读写状态。

前面是宿主机目录:后面是容器内目录:最后是读写状态

  • docker -v /var/www/website:/var/www/html/website:ro xxx

建议

创建临时容器
通过Dockerfile文件定义的镜像,产生的容器尽可能的是临时的。所谓的临时,意思是,容器可停止,销毁,重建和替代为最小设置和配置。

不要安装不必要的包
为了降低复杂性,依赖性,文件大小和构建时间,请避免安装额外的或不必要的软件包,因为它们可能“很好”。例如,您不需要在数据库镜像中包含文本编辑器。

容器启动内存限制

Docker

1 启动容器时限制容器内存
docker run -m 4g --memory-swap -1  2 限制已启动容器的内存
docker stop containerId
docker update containerId -m 4g  --memory-swap -1
docker start containerId3 查询是否配置成功
docker inspect containerId

备注:命令详解

--memory  或  -m  限制容器的内存使用量(如10m,200m等)
--memory-swap # 限制内存和 Swap 的总和,不设置的话默认为--memory的两倍
'''
如果只指定了 --memory 则 --memory-swap 默认为 --memory 的两倍
如果 --memory-swap 和 --memory 设置了相同值,则表示不使用 Swap
如果 --memory-swap 设置为 -1 则表示不对容器使用的 Swap 进行限制
如果设置了 --memory-swap 参数,则必须设置 --memory 参数
后期 update --memory 时数值不能超过 --memory-swap 的值,否则会报错 Memory limit should be smaller than already set memoryswap limit参考:https://blog.csdn.net/m0_67266585/article/details/126580997
'''

docker-compose

  airflow-triggerer:<<: *airflow-commoncommand: triggererhealthcheck:test: ["CMD-SHELL", 'airflow jobs check --job-type TriggererJob --hostname "$${HOSTNAME}"']interval: 10stimeout: 10sretries: 5restart: alwaysdeploy:resources:limits:cpus: "1.00"memory: 1Greservations:memory: 200M

查看资源使用情况

docker stats

虚悬镜像

docker image ls -f dangling=true # 查看所有虚悬镜像

docker image prune # 删除所有虚悬镜像

在 Docker 中删除 image 时有时会遇到类似

Error response from daemon: conflict: unable to delete 6ec9a5a0fc9f (cannot be forced) - image has dependent child images

这样的错误,原因是有另外的 image FROM 了这个 image,可以使用下面的命令列出所有在指定 image 之后创建的 image 的父 image

docker image inspect --format='{{.RepoTags}} {{.Id}} {{.Parent}}' $(docker image ls -q --filter since=xxxxxx)

Docker-Compose 容器编排服务

使用一个文件来描述所有容器如何运行

tomcat

sudo docker run -d -p 8090:8080 --name my_tomcat -v /data/app/tomcat:/usr/local/tomcat/webapps -v /data/logs:/data/logs tomcat:8.5-jdk8-corretto

容器镜像服务

阿里云容器镜像服务申请实例,创建仓库。

阿里云的机器可以按照地区使用专用网络
registry-vpc.cn-hangzhou.aliyuncs.com/sajor/project

普通网络命令:

  1. 登录阿里云Docker Registry
docker login --username=13171706376 registry.cn-hangzhou.aliyuncs.com

用于登录的用户名为阿里云账号全名,密码为开通服务时设置的密码。

您可以在访问凭证页面修改凭证密码。

  1. 从Registry中拉取镜像
    可以修改 vi /etc/docker/daemon.json 增加阿里云配置
{"registry-mirrors":["https://6kx4zyno.mirror.aliyuncs.com"]
}
docker pull registry.cn-hangzhou.aliyuncs.com/sajor/project:[镜像版本号]
  1. 将镜像推送到Registry
docker login --username=13171706376 registry.cn-hangzhou.aliyuncs.com
docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/sajor/project:[镜像版本号]
docker push registry.cn-hangzhou.aliyuncs.com/sajor/project:[镜像版本号]

请根据实际镜像信息替换示例中的[ImageId]和[镜像版本号]参数。

  1. 选择合适的镜像仓库地址
    从ECS推送镜像时,可以选择使用镜像仓库内网地址。推送速度将得到提升并且将不会损耗您的公网流量。

如果您使用的机器位于VPC网络,请使用 registry-vpc.cn-hangzhou.aliyuncs.com 作为Registry的域名登录。

  1. 示例
    使用"docker tag"命令重命名镜像,并将它通过专有网络地址推送至Registry。
$ docker images
REPOSITORY                                                         TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
registry.aliyuncs.com/acs/agent                                    0.7-dfb6816         37bb9c63c8b2        7 days ago          37.89 MB
$ docker tag 37bb9c63c8b2 registry-vpc.cn-hangzhou.aliyuncs.com/acs/agent:0.7-dfb6816
使用 "docker push" 命令将该镜像推送至远程。$ docker push registry-vpc.cn-hangzhou.aliyuncs.com/acs/agent:0.7-dfb6816

Docker修改存储路径教程(硬盘容量不够)

首先,我们需要了解当前Docker的存储路径。你可以通过运行以下命令来获取当前的存储路径:

docker info | grep "Docker Root Dir"

在修改存储路径之前,我们需要先停止并删除Docker服务。运行以下命令来停止并删除Docker服务:

sudo systemctl stop docker
sudo systemctl disable docker

接下来,我们需要修改Docker的配置文件。打开Docker的配置文件/etc/docker/daemon.json,并添加以下内容:

{"data-root": "/path/to/new/docker/directory"
}

迁移Docker默认目录,在修改配置文件后,我们需要将现有的Docker目录迁移到新的存储路径。运行以下命令来迁移Docker目录:

sudo rsync -aP /var/lib/docker/ /path/to/new/docker/directory

确保将/path/to/new/docker/directory替换为你在上一步中设置的新的存储路径。

完成上述步骤后,我们可以重新启动Docker服务以使新的存储路径生效。运行以下命令来重新启动Docker服务:

sudo systemctl start docker

写时复制 copy on write

只读镜像层都是只读的,且以后永远不会发生变化。当创建一个新容器时,Docker会构建出一个镜像栈,并在栈的最顶层添加一个读写层。这个读写层加上其下面的镜像层以及一些配置信息,就构成了一个容器。

如果想修改某文件,这个文件首先会从该读写层下面的只读层复制到该读写层。该文件的只读版本仍然存在,但是已经被读写层中的该文件副本所隐藏。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/622753.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

寄快递有没有什么省钱的小妙招? 怎样寄快递才能省钱呢?

快递物流行业的快速崛起刺激了人们的消费欲望&#xff0c;其中典型的是每每到重大节日尤其是双十一或者双十二&#xff0c;消费市场异常火爆&#xff0c;这也使得快递行业加班加点的干也不追不上人们下单的速度。如今&#xff0c;互联网时代崛起&#xff0c;网购成为了大家最寻…

机器学习_捕捉函数的变化趋势(凸函数)

文章目录 连续性是求导的前提条件通过求导发现 y 如何随 x 而变凸函数有一个全局最低点 机器学习所关心的问题之一捕捉函数的变化趋势&#xff0c;也就是标签&#xff08;y&#xff09;是如何随着特征字段&#xff08;x&#xff09;而变化的&#xff0c;这个变化趋势是通过求导…

代码随想录day30 回溯算法最终章

51. N皇后 题目 n 皇后问题 研究的是如何将 n 个皇后放置在 nn 的棋盘上&#xff0c;并且使皇后彼此之间不能相互攻击。 给你一个整数 n &#xff0c;返回所有不同的 n 皇后问题 的解决方案。 每一种解法包含一个不同的 n 皇后问题 的棋子放置方案&#xff0c;该方案中 Q 和…

想做好项目,网工必看!

上午好&#xff0c;我是老杨。 做项目&#xff0c;贯穿一个网络工程师职业生涯的始终。不管是大项目还是小项目&#xff0c;做久了项目&#xff0c;都会形成一种自己的方法论。 项目要划分&#xff0c;无非就是新网组建&#xff0c;旧网优化&#xff0c;以及网络排障三大类。…

ISO11898-闭环高速CAN网络 (125K~1Mbps)

ISO11898 标准的物理框图如下图 可理解为一个高速闭环 CAN 总线网络&#xff1b;CAN 闭环总线网络允许总线最大长度为 40m;最高速度为 1Mbps;可以看到总线的两端各有一个 120Ω 的电阻&#xff0c;此电阻作为阻抗匹配功能&#xff0c;以减少回波反射;节点就是不同的设备&#…

Pytorch基础知识点复习

文章目录 并行计算单卡训练多卡训练单机多卡DP多机多卡DDPDP 与 DDP 的优缺点 PyTorch的主要组成模块Pytorch的主要组成模块包括那些呢&#xff1f;Dataset和DataLoader的作用是什么&#xff0c;我们如何构建自己的Dataset和DataLoader&#xff1f;神经网络的一般构造方法&…

k8s的策略

集群调度&#xff1a; Scheduler的调度算法&#xff1a; 预算策略 过滤出合适的节点 优先策略 选择部署的节点 NodeName&#xff1a;硬策略&#xff0c;不走调度策略&#xff0c;node1 nodeSelector&#xff1a;根据节点的标签选择&#xff0c;会走一个调度算法 只要是…

系统性学习vue-vue核心

做了三年前端,但很多系统性的知识没有学习 还是从头系统学习一遍吧 课程是b站的Vue2.0Vue3.0课程 后续还会学习的如下,就重新开一篇了,不然太长,之后放链接 vue组件化编程 vue-cli 脚手架 vue中的ajax vue-router vuex element-ui vue3 老师推荐的vscode针对vue的插件: Vue 3…

机器学习~从入门到精通(二)线性回归算法和多元线性回归

为什么要做数据归一化 一、数据归一化&#xff1a; 1.最值归一化 2.均值方差归一化import numpy as npX np.random.randint(1,100,size100) X X.reshape(-1,2) X.shape X np.array(X,dtypefloat) X[:,0] (X[:,0]-np.min(X[:,0]))/(np.max(X[:,0])-np.min(X[:,0])) X[:,1]…

Postgres 中文周报:Postgres Weekly 537 期

本周报由 Cloudberry Database 社区编译自英文版《Postgres Weekly》&#xff0c;译文较原文有所调整。 推荐博文 &#x1f3c6; PostgreSQL: The DBMS of the Year 2023 PostgreSQL 荣获 DB-Engines 网站 2023 年度 DBMS 冠军。DB-Engines 收集了 480 款数据库系统信息并跟踪…

机器学习笔记 - 基于OpenCV+稀疏光流的无监督运动检测

一、简述 在各种高级开源库的帮助下&#xff0c;检测固定摄像机拍摄的运动行为是轻而易举可以实现的&#xff0c;但检测移动的摄像机拍摄的移动物体的运动检测依然是一个复杂的问题。在这里&#xff0c;我们将继续基于稀疏光流&#xff0c;并检测移动的无人机相机的运动。 这里…

设计模式-传输对象模式

设计模式专栏 模式介绍模式特点应用场景传输对象模式和序列化的区别代码示例Java实现传输对象模式Python实现传输对象模式 传输对象模式在spring中的应用 模式介绍 传输对象模式&#xff08;Transfer Object Pattern&#xff09;是一种设计模式&#xff0c;用于从客户端向服务…

MT8766安卓核心板/开发板_MTK联发科4G安卓手机主板方案定制开发

MT8766采用台积电 12 nm FinFET 制程工艺&#xff0c;4*A53架构&#xff0c;Android 9.0操作系统&#xff0c;搭载2.0GHz 的 Arm NEON 引擎。提供了支持最新 OpenOS 及其要求苛刻的应用程序所需的处理能力&#xff0c;专为具有全球蜂窝连接的高移动性和功能强大的平板设备而设计…

MySQL进阶篇(五) 锁

一、概述 锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中&#xff0c;除传统的计算资源&#xff08;CPU、RAM、I/O&#xff09;的争用以外&#xff0c;数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问…

深入浅出Android dmabuf_dump工具

目录 dmabuf是什么&#xff1f; dmabuf_dump工具介绍(基于Android 14) Android.bp dmabuf_dump.cpp 整体架构结构如下 dmabuf_dump主要包含以下功能 前置背景知识 fdinfo 思考 bufinfo Dump整个手机系统的dmabuf Dump某个进程的dmabuf​​​​​​​ 以Table[buff…

【JVM 基础】类字节码详解

JVM 基础 - 类字节码详解 多语言编译为字节码在JVM运行Java字节码文件Class文件的结构属性从一个例子开始反编译字节码文件字节码文件信息常量池方法表集合类名 再看两个示例分析try-catch-finallykotlin 函数扩展的实现 源代码通过编译器编译为字节码&#xff0c;再通过类加载…

文件指针 FILE结构体

C语言中的文件指针是指向FILE类型结构体的指针。(也就是说 文件指针的类型就是FILE类型) 在C语言中&#xff0c;使用文件指针来操作文件。FILE类型是一个结构体类型&#xff0c;它包含了与文件相关的信息&#xff0c;例如文件位置指示器、文件读写状态等。通过文件指针&#x…

【MySQL】多表查询

文章目录 多表查询是什么&#xff1f;一、笛卡尔积&#xff08;或交叉连接&#xff09;二、多表查询分类分类1&#xff1a;等值连接 vs 非等值连接等值连接非等值连接 分类2&#xff1a;自连接 vs 非自连接分类2&#xff1a;内连接 vs 外连接 三、SQL99SQL99 实现 内连接SQL99 …

深度解析Pytest插件pytest-html

在软件开发中&#xff0c;测试报告是开发者获取测试结果和问题定位的关键工具之一。然而&#xff0c;标准的控制台输出有时难以满足我们对测试报告的需求。幸运的是&#xff0c;Pytest插件 pytest-html 提供了一种简单而强大的方式&#xff0c;可以生成漂亮、可视化的HTML格式测…

1992年-2020年ESA_CCI土地覆盖数据介绍、下载与数据分享

数据介绍 ESA CCI Land Cover是欧洲空间局&#xff08;European Space Agency&#xff0c;ESA&#xff09;的一个项目&#xff0c;其目标是生成全球土地覆盖的高质量、一致性和长期的时间序列数据&#xff0c;分辨率大约为300米。 该项目是ESA气候变化计划&#xff08;Climate…