【4.0】Docker容器操作
【一】Docker容器操作
- Docker容器是基于Docker镜像创建的运行实例。
- 把镜像运行成容器,并且一个镜像,可以运行出多个容器
【二】运行容器
- 使用以下命令可以将一个Docker镜像运行为一个或多个容器:
- 每次运行此命令,将创建一个新的容器实例。
- 可以根据需要多次执行该命令来创建多个容器,每个容器可以与相同的镜像关联。
- 例如:
- 这将在后台创建一个基于
nginx
镜像的新容器,并默认使用最新标签的镜像。
【二】查看正在运行的容器
- 要查看当前正在运行的Docker容器,可以使用以下命令:
- 这将列出正在运行的容器的相关信息,例如容器ID、镜像、创建时间等。
【三】查看所有容器
- 要查看所有的Docker容器,包括正在运行的和已停止的容器,可以使用以下命令:
- 类似于
docker ps
命令,输出的结果中将包含所有容器的相关信息。
【四】查看最后一次运行的容器
- 如果只想查看最后一次运行的容器的信息,可以使用以下命令:
- 这将列出最后一次运行的容器的详细信息,包括容器ID、镜像、创建时间等。
【五】启动停止的容器
- 要启动已经停止的Docker容器,可以使用以下命令:
-
通过提供容器ID或名称,可以将停止的容器重新启动。
-
例如:
- 这将启动名为
my-container
的停止状态容器。
【六】停止运行的容器
- 要停止正在运行的Docker容器,可以使用以下命令:
-
提供要停止的容器的ID,可以将其停止并退出运行状态。
-
例如:
- 这将停止ID为
7d5e
的容器。
【七】停止所有在运行的容器
- 如果要停止所有当前正在运行的Docker容器,可以使用以下命令:
- 该命令会结合使用
docker ps -q
命令来获取正在运行的容器的ID列表,并将每个容器依次停止。
- 需要注意的是,停止容器时应谨慎操作,确保不会停止正在使用或有其他依赖关系的容器。
【八】run 参数 - 目录映射(-v)
- Docker是一种容器化平台,可以帮助开发者将应用程序和其依赖项打包到一个可移植的容器中。
- 在Docker中,使用容器映射(Volume Mapping)可以实现宿主机和容器之间文件的共享和同步更新。
【1】操作步骤
(1)运行容器并进行映射:
- 您可以使用docker run命令来创建并运行一个容器,并通过-v参数指定宿主机和容器之间的目录映射关系。
- 例如,以下命令将创建一个名为dreamcentos的容器,将宿主机的/home/dream/目录映射到容器中的/home/目录:
- 这样,在容器内部的/home目录中的文件会与宿主机的/home/dream目录中的文件进行同步。
(2)进入容器内部:
- 使用docker exec命令可以进入已经在运行的容器内部,以便在容器内执行命令。
- 例如,以下命令将进入名为dreamcentos的容器的交互式终端:
(3)切换到容器内的/home路径下:
- 在容器内部,可以使用cd命令切换到特定的目录。
- 例如,要切换到容器内的/home目录,可以执行以下命令:
(4)容器内部修改文件影响外部:
- 当您在容器内修改映射的文件时,相应目录下的宿主机文件也会被修改。
- 例如,在容器内部使用编辑器修改了/home目录中的文件,该文件的变化会被同步到宿主机的/home/dream目录中的文件。
(5)外部修改文件影响内部:
- 同样地,当您在宿主机上修改映射的文件时,容器内相应目录下的文件也会被修改。
- 例如,在宿主机上使用编辑器修改了/home/dream目录中的文件,该文件的变化会立即同步到容器内的/home目录中的文件。
【2】映射文件的优点
- 通过映射文件,可以方便地在容器和宿主机之间进行数据共享和同步更新。
- 这对于开发和部署项目非常有用。
- 例如,在部署Django项目时,您可以将Django容器与宿主机上的代码进行映射,以实现代码的更新和自动重启。
- 另外,如果您运行MySQL容器,并将配置文件和数据存储分别放置在宿主机的映射目录中,即使删除了容器,重建时也能保留数据库表数据。
【3】小结
(1)使用步骤
(2)其他优点
- 有个django容器,做好映射,代码放在宿主机上即可,以后更新了代码,只要重启容器,代码就是最新了
- 运行mysql容器---》mysql配置文件放在宿主机上做好映射
- mysql容器---》表数据,放到容器中---》如果删了容器---》数据库全没了
- 表数据,放在宿主机上---》把容器删除---》表数据还在----》再启动一个容器做好映射---》数据都还在
【九】run 参数 - 端口映射(-p)
-
-p参数:端口映射
- 容器中启动一个mysql5.7 --》容器中的3306监听,宿主机3306没人监听,做端口映射后,宿主机的3306就被docker的这个容器监听了
- 启动的mysql的root密码是123456
-
启动mysql容器
- -e MYSQL_ROOT_PASSWORD=
- 官方文档 固定参数 配置环境变量
- 以后访问宿主机80端口就等于访问容器的3306端口
【十】文件拷贝(宿主机执行)
- 容器的文件copy到宿主机上(不是在容器内执行)
- 宿主机的文件copy到容器中
【十一】查看容器IP地址
- 在多个容器之间是可以ping通的(容器和宿主机也可以)
【十二】无状态的服务(在容器中尽量运行无状态的服务)
- mysql reids
- 有状态,运行过程中产生数据,保存,容器删除,数据就没了
- uwsgi+django 无状态的服务
- 停止 Django 项目再重启,不会造成数据丢失
【拓展】run运行容器
- 运行容器有两个步骤:创建容器:create,运行容器:run
- 通常情况下,如果容器没有创建,直接执行run,就会创建并运行,所以你只需要会run就行了
【1】运行容器
- 在运行容器时,可以使用以下命令,并根据需要选择不同的参数:
-
常用选项:
-
-i
:-
表示以交互模式运行容器。
-
-t
:-
表示为容器分配一个伪终端,以便进入容器命令行。
-
-d
:-
表示以守护进程模式在后台运行容器。
- 注意:如果只使用
-i
和-t
两个参数,容器创建后会自动进入容器。
- 注意:如果只使用
-
-
-
-
--name
: -
为容器指定一个名称。
-
如果不指定,将自动生成一个随机名称。
--v
:
- 表示目录或文件的映射关系(宿主机目录:容器内目录)。
- 可以使用多个-v
进行多个映射。-p
:- 表示端口映射关系(宿主机端口:容器内端口)。
- 可以使用多个
-p
进行多个端口映射。
- 可以使用多个
- 表示端口映射关系(宿主机端口:容器内端口)。
-
【2】示例
- 创建一个不进入容器的后台运行的Python 3.9容器
- 创建并进入一个CentOS容器,并在容器内安装Vim:
- 通过启动已创建的CentOS容器:
- 在已运行的容器中执行命令:
- exec : 执行命令
- 例如,在一个已经运行的容器中执行
ls
命令:
- 进入容器内部(执行进程):
- 可以使用
-it
参数进入容器的交互式终端。
- 退出容器:
【3】特别注意
- 需要特别注意的是,如果使用
-it
进入容器内部,并在容器内敲击exit
退出,则容器的进程会终止。- 为了保持容器的运行状态,需要有一个前台进程在运行并且阻塞,否则容器将停止。
-
上述内容是在使用容器时需要特别注意的两个方面。
-
首先,在使用
-it
参数进入容器的交互模式时,如果在容器内部敲击exit
命令退出,会导致容器的进程终止。- 这是因为容器进程的生命周期是依赖于前台进程的,当退出容器的交互模式时,相当于关闭了容器中正在运行的主进程,从而导致容器的进程终止。
-
其次,为了保持容器的运行状态,需要有一个前台进程在运行并且阻塞。
- 这是因为容器是一个独立的运行环境,如果没有前台进程在运行并且阻塞,容器会认为任务已经完成,从而自动停止。
- 所以,在设计容器时,应该保证容器中至少有一个前台进程一直在运行,以保持容器的持续运行状态。
- 可以通过启动一个与容器同生命周期的应用程序或者监控进程来实现。
-
总结,以上两个注意事项提醒我们在使用容器时需要注意交互模式下避免误操作导致容器进程终止,并且要确保有前台进程在运行并且阻塞,以保持容器的持续运行状态。
【补充】run参数详解
- 在运行Docker容器时,可以使用
docker run
命令,并根据需求选择合适的参数。 - 以下是对每个常用选项的详细解释,以及附带案例和应用场景。
【1】-i
交互模式
-
使用
-i
选项时,Docker容器会以交互模式运行,允许用户与容器进行交互。 -
示例:
-
在这个示例中,我们运行一个Ubuntu容器,并进入交互模式。
-
可以在容器中执行命令,例如安装软件、修改配置文件等。
-
应用场景:
- 需要手动操作或输入命令来与容器进行交互的场景。
【2】-t
伪终端
-
使用
-t
选项时,Docker容器将为其分配一个伪终端,进入容器后可以使用容器的命令行界面。 -
示例:
-
在这个示例中,我们运行一个Ubuntu容器,并进入容器的命令行界面。
-
可以在这个界面下执行多个命令,并进行交互式操作。
-
应用场景:
- 需要在容器中进行命令行操作的场景。
【3】-d
守护进程模式
-
使用
-d
选项时,Docker容器将在后台以守护进程的方式运行,不会占用当前终端。 -
示例:
-
在这个示例中,我们以守护进程模式运行一个Nginx容器,容器将在后台运行并提供Web服务。
-
应用场景:
- 需要让容器在后台持续运行,不占用当前终端的场景,如Web服务器、数据库等。
【4】--name
指定容器名称
-
使用
--name
选项时,可以为容器指定一个自定义名称,方便后续对容器进行识别和管理。 -
示例:
-
在这个示例中,我们创建一个名为
my_container
的Nginx容器。 -
应用场景:
- 需要对容器进行标识和管理的场景。
【5】-v
目录映射关系
-
使用
-v
选项时,可以将宿主机的目录或文件与容器内的目录进行映射,实现数据的共享。 -
示例:
-
在这个示例中,将宿主机的
/host/directory
目录与容器的/container/directory
目录进行映射。 -
应用场景:
- 需要在容器和宿主机之间共享数据的场景,如上传文件至容器、保存容器生成的数据等。
【6】-p
端口映射关系
-
使用
-p
选项时,可以将宿主机的端口与容器内的端口进行映射,实现对容器服务的访问。 -
示例:
-
在这个示例中,将宿主机的8080端口映射到容器的80端口,以便通过该端口访问容器内运行的Nginx服务。
-
应用场景:
- 需要从宿主机访问容器内运行的服务的场景,如Web应用、数据库等。
__EOF__

本文链接:https://www.cnblogs.com/dream-ze/p/17665039.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文来自博客园,作者:Chimengmeng,转载请注明原文链接:https://www.cnblogs.com/dream-ze/p/17665039.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)