Docker(三) 容器管理

news2024/11/18 10:24:56

1 容器管理概述

        Docker 的容器管理可以通过 Docker CLI 命令行工具来完成。Docker 提供了丰富的命令,用于管理容器的创建、启动、停止、删除、暂停、恢复等操作。

        以下是一些常用的 Docker 容器命令:

        1、docker run:用于创建并启动一个容器。使用 docker run 命令时,可以指定容器名称、镜像名称、启动命令、挂载数据卷、网络配置等,以满足不同使用需求。

        2、docker start/stop/restart:用于启动/停止/重启一个已经创建的容器。

        3、docker rm:用于删除一个或多个容器。可以使用 docker rm -f 命令强制删除正在运行的容器。

        4、docker pause/ unpause:用于暂停/恢复一个容器。

        5、docker stats:用于查看正在运行的容器的资源使用情况。

        6、docker inspect:用于查看容器信息。

        7、docker exec:用于在正在运行的容器中执行命令。

        8、docker cp:用于从宿主机拷贝文件到容器中,或者从容器中拷贝文件到宿主机。

2 创建容器

        docker run 命令是 Docker 最重要的命令之一,用于创建并启动一个新的 Docker 容器。

        docker run 命令首先在指定的镜像上创建一个可写的容器层,然后使用指定的命令启动它。也就是说,docker run 相当于 API /containers/create 然后 /containers/(id)/start。

        下面是 docker run 命令的主要语法:

docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]

        其中:

  • IMAGE:指定要使用的 Docker 镜像的名称或 ID
  • TAG:指定要使用的镜像的标签,默认为 latest
  • DIGEST:指定要使用的镜像的数字摘要
  • COMMAND:覆盖容器默认的启动命令
  • ARG:覆盖容器默认的启动命令的参数

        OPTIONS 包含多种参数和选项,可用于指定容器运行时的各种属性和配置,常用的参数和选项有:

  • -d, --detach:在后台运行容器
  • -it:在容器内部启动一个交互式终端
  • -p, --publish:将容器的端口发布到主机的端口
  • -v, --volume:将主机的目录或文件挂载到容器的目录
  • --name:指定容器的名称
  • -h, --hostname:可指定容器的主机名
  • -e, --env:该选项可将环境变量传递给容器,例如配置数据库密码等

3 创建和删除容器示例

        启动一个tomcat容器,在后台运行,并查看本机中正在运行的容器:

docker run -d tomcat

        停止容器:

docker stop ff89 # 容器名称/ID

        此时docker ps无法查询到容器信息。可以使用docker ps -a查看包含已停止容器在内的全部容器信息。

        可以使用docker rm命令删除一个已停止的容器:

4 进入容器的方法

        容器是一个相对隔离的运行管径,就像住宅中的一个房间,进入容器就是进入这个容器的运行环境。

        Docker提供了多种进入容器的方法:

        1、docker exec 命令:可以在运行中的容器中启动一个新进程。这种方式对于多个用户协作进行调试非常方便,也不需要停止容器,推荐使用这种方式。

        2、docker attach 命令:可以连接到后台运行的容器的标准输入、输出、错误流。attach命令可能导致docker容器意外关闭,不推荐使用。

        3、docker run 命令:可以在创建一个新的容器时启动交互终端,但是退出交互终端默认会关闭容器,需要使用特殊的命令退出才行。

5 网络端口映射

        Docker的网络端口映射是将宿主机的一个端口映射到Docker容器的一个端口,此时宿主机的这个端口就可以访问容器中运行的应用程序了。

        Docker的端口映射有两种方式:随机端口映射和固定端口映射。

        1、随机端口映射:在启动容器时可以使用-P命令配置随机端口映射,Docker会随机映射一个49000~49900的端口到内部容器开放的网络端口。

docker run -d -P tomcat # 使用-P命令需要镜像支持

        2、固定端口映射:可以在启动容器时指定宿主机端口映射到容器的端口。

docker run -d -p 8080:80 tomcat

        其中 -p 参数代表端口映射,冒号前面的数字表示宿主机端口号,冒号后面的数字表示容器端口号。

        Docker 的端口映射可以方便地在宿主机上访问容器内的应用程序,是 Docker 中非常实用的网络功能之一。

6 进入容器和网络端口映射示例

        本示例启动一个tomcat容器,并实现外部对该tomcat服务器的访问。

        首先,启动一个tomcat容器,将容器的8080端口绑定到宿主机的8080端口。

docker run --name some-tomcat -d -p 8080:8080 tomcat

        Tomcat镜像默认将欢迎页面等资源放在内部的webapps.dist文件夹中,无法被用户直接访问,需要手动进行修改。

        进入some-tomcat容器。

docker exec -it some-tomcat /bin/bash

        在容器中,将webapps.dist文件夹下的全部内容复制到webapps文件夹下。

cp -r webapps.dist/* webapps/

        然后,退出容器。

exit

        接下来,需要开放主机的8080端口,在本机使用浏览器访问主机的8080端口,查看能否看到Tomcat服务器的首页。

7 数据卷的管理

        Docker容器卷是一种用于在Docker容器和主机之间共享数据的机制。它们可以将主机文件系统的目录或文件夹挂载到容器的特定路径中,以便容器可以访问这些文件和目录。

        Docker容器卷可以通过以下方式进行管理:

        1、创建卷:可以使用docker volume create命令创建一个卷,并指定名称和其他选项。例如:docker volume create my-volume可以创建名为my-volume的空卷。

        2、挂载卷:可以使用-v选项将主机文件夹或卷挂载到容器中。例如:docker run -v /host/folder:/container/folder my-image可以将主机上的/host/folder目录挂载到容器中的/container/folder路径。

        3、查看卷:可以使用docker volume ls命令列出所有当前可用的卷,也可以使用docker volume inspect命令获取有关特定卷的详细信息。

        4、删除卷:可以使用docker volume rm命令删除特定的卷。例如:docker volume rm my-volume可以删除名为my-volume的卷。请注意,您不能删除当前正在使用的卷,必须首先从所有容器中卸载卷。

        5、自动删除卷:如果需要,您可以创建自动删除的卷。这些卷将在其中没有容器使用它们的情况下自动删除。要创建这些卷,您可以使用docker run命令的--rm选项或在docker create命令中指定--rm选项。

8 数据卷示例

        本示例演示两种较为常见的使用卷的方法:

        1、启动容器时创建挂载卷

        2、先创建卷后挂载

        接下来演示启动容器时创建挂载卷。

        首先,关闭并删除之前创建的Tomcat容器。

        然后,使用如下命令创建Tomcat容器,并将宿主机的/opt/html文件夹挂载到Tomcat容器的/usr/local/tomcat/webapps/ROOT文件夹。

docker run --name some-tomcat -d -p 8080:8080 -v /opt/html:/usr/local/tomcat/webapps/ROOT  tomcat

        接下来,在宿主机的/opt/html文件夹下新建mypage.html。

echo 'Hello Docker!' > /opt/html/mypage.html

        使用curl命令访问宿主机的8080端口,查看能否访问到mypage.html中的内容。

        接下来演示先创建卷后挂载。

        首先,关闭并删除之前创建的Tomcat容器。

        然后,创建卷:

docker volume create demo-vo # demo-vo是卷的名称

        查看卷列表:

docker volume ls

        查看卷详细信息:

docker volume inspect demo-vo

        可以看到实际的存储位置:

        使用卷创建容器:

docker run -d -p 8080:8080 -v demo-vo:/usr/local/tomcat/webapps/ROOT tomcat

        创建测试mypage.html:

echo 'Hello' > /var/lib/docker/volumes/demo-vo/_data/mypage.html

        测试:

curl localhost:8080/mypage.html

9 将容器保存为镜像

        在 Docker 中,将容器保存为镜像是非常有用的功能。这允许用户将现有的容器转换为可重用的镜像,进行分发、共享和部署。

        Docker commit命令用于将一个正在运行的容器保存为一个新的镜像。它会记录容器中的当前状态并创建一个增量镜像层,新的镜像将包含原容器中的所有修改。Docker commit 命令的语法如下:

docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

        OPTIONS: 可选参数。常见参数如下:

  • -a, --author: 镜像作者
  • -c, --change: 指定容器创建时的修改项
  • -m, --message: 提交镜像时的提交消息
  • -p, --pause: 在提交时暂停容器运行

        CONTAINER: 必需,容器的名称或 ID。

        REPOSITORY: 镜像仓库名称。

        TAG: 镜像版本号。

10 容器保存为镜像示例

        本示例演示创建一个安装了JDK8的rockylinux镜像。

        首先,拉取rockylinux镜像:

docker pull rockylinux:9.0

        然后,基于镜像启动容器:

docker run -it rockylinux:9.0 /bin/bash

        在容器中使用yum命令安装JDK8:

yum install -y java-17-openjdk-devel

        exit离开容器。

        使用commit命令创建本地镜像:

docker commit 6906 rockylinux-java17 # 其中3a38是容器的简写id

        查看本地镜像:

docker images

        使用新镜像创建容器,并在容器中执行java -version命令:

docker run rockylinux-java17 java -version

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

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

相关文章

ubuntu22.04安装调节显示器亮度工具

1 介绍 软件名叫 DDC/CI control,官网 2 安装方法 sudo apt install intltool i2c-tools libxml2-dev libpci-dev libgtk2.0-dev liblzma-dev3 效果 进入软件,忽略告警信息

selenium 学习笔记(一)

pip的安装 新建一个txt curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py 把上面的代码复制进去后,把后缀名改为.bat然后双击运行 当前目录会出现一个这个文件 然后在命令行pyhon get-pip.py等它下好就可以了selenium安装 需要安装到工程目…

【进程空间】通过页表寻址的过程

文章目录 前言介绍页表、页框、页目录的概念页框页表页目录页表和页目录的分配 一级页表和二级页表一级页表寻址过程 二级页表寻址过程 一级页表和二级页表的对比 前言 我们知道每个进程都有属于自己的虚拟地址空间,且每个进程的虚拟地址都是统一的。要想通过虚拟地…

OrangePi AIpro测评:智能与创新的完美结合

OrangePi AIpro上手指南 简介 香橙派与华为合作发布的香橙派AiPro为Ai主力,为边缘设备的Ai计算提供了可能。 集成图形处理器,拥有8GB/16GB LPDDR4X(我这个是8G内存版本的),可以外接32GB/64GB/128GB/256GB eMMC模块&a…

【从零开始学习RabbitMQ | 第三篇】什么是延迟消息

目录 前言: 延迟消息: 延迟消息实现方式: 死信交换机: 延迟消息插件: 1.基于注解的方式 2.基于Bean的方式 总结: 前言: 在现代软件开发中,异步消息处理已成为构建可扩展、高可…

CR渲染噪点严重怎么办?常见噪点来源+排查方法

使用Corona渲染器进行渲染时,画面出现噪点是常见现象,尤其是在渲染初期。轻微的高频噪点通常是正常的,但如果经过多次渲染或长时间渲染后噪点依然明显,就可能意味着渲染设置或场景本身存在问题。虽然我们可以利用降噪功能模糊噪点…

5G专网驻网失败分析(suci无效)

suci 5G终端第一次驻网时,注册消息Registartion request中携带的5GS mobile identity要携带suci类型的mobile identity。 注册消息协议规范见5G NAS 协议3gpp TS24.501 8.2.6 Registration request。 suci协议规范参见3gpp TS24.501 9.11.3.4 5GS mobile identity …

iOS--工厂设计模式

iOS--工厂设计模式 设计模式的概念和意义类族模式UIButton作为类族模式的例子总结 三种工厂设计模式简单工厂模式(Simple Factory Pattern):代码实例 工厂方法模式(Factory Method Pattern):代码实例 抽象工…

【NumPy】全面解析NumPy的astype函数:高效数据类型转换指南

🧑 博主简介:阿里巴巴嵌入式技术专家,深耕嵌入式人工智能领域,具备多年的嵌入式硬件产品研发管理经验。 📒 博客介绍:分享嵌入式开发领域的相关知识、经验、思考和感悟,欢迎关注。提供嵌入式方向…

Python | Leetcode Python题解之第105题从前序与中序遍历序列构造二叉树

题目: 题解: class Solution:def buildTree(self, preorder: List[int], inorder: List[int]) -> TreeNode:if not preorder:return Noneroot TreeNode(preorder[0])stack [root]inorderIndex 0for i in range(1, len(preorder)):preorderVal pr…

接口性能测试复盘:解决JMeter超时问题的实践

在优化接口并重新投入市场后,我们面临着一项关键任务:确保其在高压环境下稳定运行。于是,我们启动了一轮针对该接口的性能压力测试,利用JMeter工具模拟高负载场景。然而,在测试进行约一分钟之后,频繁出现了…

前端 CSS 经典:水波进度样式

前言&#xff1a;简单实现水波进度样式&#xff0c;简单好看。 效果图&#xff1a; 代码实现&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"utf-8" /><meta http-equiv"X-UA-Compatible" cont…

产线虚拟现实vr仿真软件开发在线上能全面呈现企业品质和专业度

在数字化浪潮中&#xff0c;上海VR全景场景制作公司凭借其领先的VR全景制作技术&#xff0c;正为各行各业带来前所未有的沉浸式体验。无论是学校企业场地的生动展示&#xff0c;还是汽车内饰与外观的360度全景呈现&#xff0c;我们都能通过VR虚拟现实制作技术&#xff0c;让您的…

双击移动硬盘打不开?原因分析与数据恢复全攻略

在日常生活和工作中&#xff0c;移动硬盘作为数据存储和传输的重要工具&#xff0c;扮演着至关重要的角色。然而&#xff0c;当我们遇到双击移动硬盘无法打开的情况时&#xff0c;往往会感到十分困扰。本文将详细探讨双击移动硬盘打不开的原因&#xff0c;并提供两种有效的数据…

(C语言) 泛型表达式

文章目录 ⭐语法⭐举例&#x1f6a9;判断对象类型&#x1f6a9;判断指针&#x1f6a9;函数重载&#x1f6a9;嵌套使用 END ⭐语法 Ref: 泛型选择 (C11 起) - cppreference.com 关键词&#xff1a; Genericdefault _Generic(控制表达式 , 关联列表) (C11 起) 关联列表 类型名:…

floodfill 算法(上)

目录 图像渲染 题意&#xff1a; 题解&#xff1a; 非递归&#xff1a; 递归&#xff1a; 岛屿数量 题解&#xff1a; 非递归&#xff1a; 递归&#xff1a; 岛屿的最大面积 题解&#xff1a; 非递归&#xff1a; 递归&#xff1a; 被围绕的区域 题解&#xff1a…

【加密与解密(第四版)】第十四章笔记

第十四章 漏洞分析技术 14.1 软件漏洞原理 缓冲区溢出漏洞&#xff1a;栈溢出 堆溢出、整型溢出&#xff08;存储溢出、计算溢出、符号问题&#xff09; UAF&#xff08;Use-After-Free&#xff09;漏洞 14.2 ShellCode 功能模块&#xff1a;下载执行、捆绑、反弹shell 14.3 …

采用java语言+B/S架构+后端SpringBoot前端Vue开发的ADR药品不良反应智能监测系统源码

采用java语言&#xff0b;B/S架构&#xff0b;后端SpringBoot前端Vue开发的ADR药品不良反应智能监测系统源码 ADR监测引擎每日主动获取检验数据、病历内容&#xff08;可拓展&#xff09;、以及其他临床数据&#xff0c;根据知识库内容自动判定患者是否有不良反应迹象&#xf…

kettle组件之java代码,快速上手必看

我们先了解不同于java代码的kettle的一些方法 1、getRow()&#xff1b; 获取每一行数据&#xff0c;循环读数据&#xff1b;返回的是Object[]数组 2、get(Fields.in,"字段名"); 获取具体的某个字段的名称 3、get(Fields.in,"字段名").getString(r); …

【软考】下篇 第15章 面向服务架构设计理论与实践

目录 一、SOA定义二、微服务微服务优势微服务与SOA对比微服务架构模式方案微服务设计约束 三、SOA参考架构四、SOA设计的标准要求五、SOA设计原则六、SOA设计模式七、SOA实施 一、SOA定义 面向服务的体系结构 (Service-Oriented Architecture,SOA), 从应用和原理的角度看&…