Docker(三) 容器管理

news/2024/7/20 17:04:38/文章来源:https://blog.csdn.net/zhangyan_1010/article/details/139092708

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.luyixian.cn/news_show_1052785.aspx

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

相关文章

Qt教程3-Ubuntu(x86_64)上配置arm64(aarch64)交叉编译环境及QT编译arm64架构工程

汇创慧玩 写在前面1. 查看系统架构相关指令2. ARM64交叉编译器环境搭建3. Qt编译arm64环境搭建4. 配置 Qt的本地aarch64交叉编译器5. 工程建立及编译验证 写在前面 苦辣酸甜时光八载,春夏秋冬志此一生 Qt简介: Qt(官方发音 [kju:t]&#xff…

Spring Boot集成六大常用中间件,附集成源码,亲测有效

目录 万字论文,从0到1,只需1小时获取途径1、Spring Boot如何集成Spring Data JPA?2、Spring Boot如何集成Spring Security?3、Spring Boot如何集成Redis?4、Spring Boot如何集成RabbitMQ?5、Spring Boot如何…

【C++】C++11(一)

C11是一次里程碑式的更新,我们一起来看一看~ 目录 列表初始化:{ }初始化:std::initializer_list: 声明:auto:decltype: STL的一些变化: 列表初始化: { }初始化&#xf…

云计算期末复习(2)

MapReduce 包含Google MapReduce基本构架、Hadoop MapReduce基本构架 作业(问答题) (1)预习论文The Google File System,总结和分析GFS主要特点。 GFS的主要特点包括: 1. 高可靠性和容错性:G…

政府鼓励社会力量建设气膜体育场馆—轻空间

2023年12月1日,国家体育安全总局发布的《关于政协第十四届全国委员会第一次会议第00374号(文体宣传类020号)提案答复的函》中指出,2016年和2020年国务院发布的文件中均涉及推动气膜场馆建设及完善装配式建筑相关政策。下一步&…

炸裂!AI五分钟模仿爆款IP故事,涨粉速度太绝了!

‍ ‍大家好,我是向阳。 今天我要分享一个利用AI技术模仿爆款账号的小技巧,帮助大家迅速增加粉丝。这个方法简单实用,尤其适用于副业和本地生活领域。接下来,我将为大家详细讲解操作步骤。让我们开始吧。 副业赚钱:模…

2024年03月 Python(四级)真题解析#中国电子学会#全国青少年软件编程等级考试

Python等级考试(1~6级)全部真题・点这里 一、单选题(共25题,共50分) 第1题 运行如下代码,若输入整数3,则最终输出的结果为?( ) def f(x):if x==1:s=1else:s

基于 IP 的 DDOS 攻击实验

介绍 基于IP的分布式拒绝服务(Distributed Denial of Service, DDoS)攻击是一种利用大量受控设备(通常是僵尸网络)向目标系统发送大量请求或数据包,以耗尽目标系统的资源,导致其无法正常提供服务的攻击方式…

[集群聊天服务器]----(十)Nginx的tcp负载均衡配置--附带截图

接着上文,我们剖析了服务端和客户端的代码,但是单台服务器的并发量是有限的,面对并发量的要求,我们就需要引入Nginx来实现并发量的要求,将用户请求分发到不同的服务器上分担压力,这就是负载均衡。 选择负…

【国信华源:以专业服务,协助水利厅抵御强暴雨】

5月18日-19日,广西出现入汛以来最强暴雨天气过程,钦州、防城港、北海、南宁等地出现特大暴雨,多地打破降雨量极值。国信华源技术团队积极行动驻守一线,为打好山洪灾害防御的提前战、主动战提供了技术支撑。 5月17日18时&#xff0…

在某云服务器上搭建公网kali linux2.0

前提: 可用的 CVM 实例 挂载一个系统盘之外的盘,安装完成后可卸载! 创建实例,安装centos7系统! 然后执行fdisk -l看磁盘的情况 在这里我将把镜像写入vdb这块数据盘 非 root 的情况下记得sudo执行以下命令 注意&…

重新安装 Windows 10/11 后如何恢复丢失的数据?

“嗨,我的 Windows 10/11 崩溃了,所以我不得不重新安装它。我使用 USB 可启动驱动器重新安装了操作系统。但是,重新安装后,C 盘上的所有先前文件都丢失了。有什么方法可以恢复丢失的文件吗?” - 孙雯 在大多数情况下&…

Android --- 交换两个布局

准备布局 exchange_out_layout exchange_in_layout <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools"http://schemas.android.com/tools"andr…

【讲解下Web前端三大主流的框架】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

使用Python类的构造函数和析构函数

1、问题背景 当使用Python类时&#xff0c;可以使用构造函数和析构函数来初始化和清理类实例。构造函数在创建类实例时自动调用&#xff0c;而析构函数在删除类实例时自动调用。 在上面的代码示例中&#xff0c;Person类具有一个构造函数__init__和一个析构函数__del__。构造…

git的使用之筛选文件上传到远程服务器仓库

.gitignore 让本地文件有选择上传到远程服务器仓库 下面是linux内核的.gitignore # # NOTE! Dont add files that are generated in specific # subdirectories here. Add them in the ".gitignore" file # in that subdirectory instead. # # NOTE! Please use gi…

MyBatis多数据源配置与使用,基于ThreadLocal+AOP

导读 MyBatis多数据源配置与使用其一其二1. 引依赖2. 配置文件3. 编写测试代码4. 自定义DynamicDataSource类5. DataSourceConfig配置类6. AOP与ThreadLocal结合7. 引入AOP依赖8. DataSourceContextHolder9. 自定义注解UseDB10. 创建切面类UseDBAspect11. 修改DynamicDataSourc…

解决git克隆项目出现fatal无法访问git clone https://github.com/lvgl/lvgl.git

Windows 11系统 报错 $ git clone https://github.com/lvgl/lvgl.git Cloning into lvgl... fatal: unable to access https://github.com/lvgl/lvgl.git/: Failed to connect to github.com port 443 after 21141 ms: Couldnt connect to server 解决方法 git运行这两段代码…

工业AI的崛起,中国自主创新的新机遇

我们都知道&#xff0c;互联网已经深刻地改变了我们的生活方式&#xff0c;催生了无数的新型商业模式和创新产业&#xff0c;推动了社会的经济变革。中国在互联网领域的发展取得了举世瞩目的成就&#xff0c;建成了全球规模最大、技术领先的5G网络&#xff0c;互联网应用的普及…

眼底项目经验

眼底项目经验 可解释性不足问题眼底项目有多牛逼可解释性不足解法数据、算力、算法都免费送不仅预测当下&#xff0c;还能预测未来和慢病管理整合&#xff0c;形成一个实时健康检测生态 可解释性不足问题 今天下午和腾讯眼底项目人员讨论, 他们不准备做全身性的多疾种, 因为深…