1.进入容器
假设您已经有一个名为 my-project1
的容器正在运行,并且您想要进入该容器并运行一些命令,您可以使用以下命令:
命令解释
docker exec
: 是 Docker CLI 的一个命令,用于在已经运行的容器中执行命令。-i
: 表示保持 STDIN 打开,即使没有附加的客户端。-t
: 分配一个伪 tty。my-project1
: 是您要执行命令的目标容器的名称或 ID。bash
: 是您要在容器中运行的命令,这里是指启动一个 Bash shell。
2.列出端口使用进程
在 Windows 命令提示符 (cmd) 中使用的命令,用于列出所有正在使用端口 8100 的进程
命令解释
tasklist
:
tasklist
命令用于显示当前运行在本地计算机上的任务(进程)的列表。
|
(管道符号):
- 管道符号
|
用于将前一个命令的输出作为下一个命令的输入。
findstr "8100"
:
findstr
命令用于搜索文本文件中的字符串模式。- 在这种情况下,
findstr "8100"
用于搜索tasklist
命令输出中的字符串 "8100",这通常用于查找正在使用端口 8100 的进程。
使用说明
当您在命令提示符中运行 tasklist|findstr "8100"
时,它将列出所有正在使用端口 8100 的进程。这可以帮助您识别哪些进程正在监听该端口,这对于诊断端口冲突或查看服务状态非常有用。
注意事项
- 端口占用情况:
- 如果您发现某个进程正在使用端口 8100 并且您需要释放该端口,您可以使用
taskkill
命令来终止该进程。
- 权限问题:
- 如果您需要终止正在使用端口 8100 的进程,您可能需要以管理员权限运行命令提示符。
- 其他命令:
- 如果您需要更多关于正在使用端口 8100 的进程的信息,可以使用
netstat
命令来查看端口使用情况。
如果您还需要查看端口 8100 的详细使用情况,例如进程 ID (PID),可以使用以下命令:
这将列出所有使用端口 8100 的 TCP 连接,并显示对应的进程 ID。
终止进程
如果您需要终止正在使用端口 8100 的进程,可以使用 taskkill
命令,例如:
其中 <PID>
是您从 netstat -ano | findstr :8100
命令中获得的进程 ID。
注意事项
- 权限:
- 终止进程可能需要管理员权限。如果命令提示符不是以管理员身份运行,请使用
runas
命令或右键点击命令提示符选择“以管理员身份运行”。
- 确认 PID:
- 在终止进程之前,请确保您确认了正确的 PID,以免意外终止错误的进程。
3.在Docker 容器中启动 Redis 客户端
在名为 my-service3
的 Docker 容器中启动 Redis 客户端,并连接到 Redis 服务器的 6399 端口,使用密码 "123456"。
命令解释
docker exec
:
docker exec
命令用于在已经运行的容器中执行命令。
-i
和-t
:
-i
: 保持 STDIN 打开,即使没有附加的客户端。-t
: 分配一个伪 tty。
my-service3
:
- 这是您要执行命令的目标容器的名称或 ID。
redis-cli
:
redis-cli
是 Redis 的命令行客户端工具,用于与 Redis 服务器交互。
-p 6399
:
-p
选项用于指定 Redis 服务器的端口号。在这里,端口号为 6399。
-a "123456"
:
-a
选项用于指定 Redis 服务器的密码。在这里,密码为 "123456"。
使用说明
- 确保容器正在运行:
- 在执行
docker exec
命令之前,请确保容器my-service3
正在运行。您可以使用docker ps
命令来查看正在运行的容器列表。
- 启动 Redis 客户端:
- 使用
docker exec -it my-service3 redis-cli -p 6399 -a "123456"
命令启动 Redis 客户端并连接到 Redis 服务器。
注意事项
- 容器名称和 ID:
- 确保您提供的容器名称或 ID 是正确的。如果不确定,可以使用
docker ps
命令来查看正在运行的容器列表。
- 端口和密码:
- 确保您提供的端口和密码与 Redis 服务器的配置相匹配。
- 命令执行:
- 在 Redis 客户端中,您可以运行各种 Redis 命令来操作数据或查看状态。
- 退出 Redis 客户端:
- 要退出 Redis 客户端,您可以输入
quit
命令。
- 持久化数据:
- 如果您需要与 Redis 服务器进行数据操作,请确保您了解数据的持久化方式,例如使用 RDB 或 AOF 方式。
4.查询 Docker 容器的端口映射信息
查询 Docker 容器 my-service1
的端口映射信息。当您运行这个命令时,Docker CLI 会返回容器公开端口的宿主机映射信息。
命令解释
docker port
: 是 Docker CLI 的一个命令,用于查询容器的端口映射信息。my-service1
: 是您要查询端口映射信息的容器名称或 ID。
使用说明
- 确保容器正在运行:
- 在执行
docker port
命令之前,请确保容器my-service1
正在运行。您可以使用docker ps
命令来查看正在运行的容器列表。
- 查询端口映射:
- 使用
docker port my-service1
命令查询容器的端口映射信息。
注意事项
- 容器名称和 ID:
- 确保您提供的容器名称或 ID 是正确的。如果不确定,可以使用
docker ps
命令来查看正在运行的容器列表。
- 端口映射:
- 如果容器没有暴露端口或者没有进行端口映射,命令将不会返回任何结果。
- 多个端口:
- 如果容器公开了多个端口,您可能需要多次运行
docker port
命令,每次指定不同的端口。
如果容器 my-service1
映射了端口 8080 到宿主机的 30000 端口,命令的输出可能如下所示:
这表示容器内的 8080 端口映射到了宿主机的 30000 端口。
查看所有端口映射
如果您想查看容器的所有端口映射,可以使用 docker inspect
命令,并查看 NetworkSettings
下的 Ports
信息:
这将返回一个 JSON 对象,其中包含了容器所有端口的映射信息。
注意事项
- JSON 输出解析:
- 使用
docker inspect
命令时,输出可能比较复杂,您可能需要使用jq
或其他工具来解析 JSON 输出。
5.docker 容器打包成镜像
命令解释
docker commit
: 是 Docker CLI 的一个命令,用于将容器的状态保存为一个新的镜像。my-service1
: 是您要提交的容器的名称或 ID。demo1:nrn-1.1
: 是新镜像的名称和标签。demo1
是镜像名称,nrn-1.1
是镜像的标签。
使用说明
- 确保容器正在运行或已停止:
- 在执行
docker commit
命令之前,请确保容器my-service1
正在运行或已停止。您可以使用docker ps
和docker ps -a
命令来查看正在运行的容器列表以及所有容器(包括已停止的)列表。
- 提交容器为新镜像:
- 使用
docker commit my-service1 demo1:nrn-1.1
命令提交容器为新的镜像。
注意事项
- 容器状态:
- 确保您提供的容器名称或 ID 是正确的。如果不确定,可以使用
docker ps
和docker ps -a
命令来查看正在运行的容器列表以及所有容器(包括已停止的)列表。
- 镜像名称和标签:
- 确保您提供的镜像名称和标签是唯一的,以避免与现有的镜像发生冲突。
- 镜像内容:
- 新镜像将包含容器
my-service6
的当前状态,包括任何已安装的软件包、配置更改等。
- 镜像大小:
- 请注意,提交的镜像可能会很大,尤其是如果容器中有很多层或文件被更改过。
注意事项
- 镜像推送:
- 在推送镜像之前,请确保您已经登录到 Docker Hub 或其他注册表,并且具有适当的权限。
- 镜像安全:
- 确保新镜像中没有敏感信息,并且符合安全最佳实践。
6.构建一个新的 Docker 镜像
基于当前目录下的 Dockerfile 构建的
命令解释
docker build
: 是 Docker CLI 的一个命令,用于构建 Docker 镜像。-t
: 用于给构建的镜像指定一个标签(名称和版本)。在这个例子中,标签为my-service1
。.
: 指定构建上下文的路径。这里的.
表示当前目录。
使用说明
- 确保当前目录包含 Dockerfile:
- 在执行
docker build
命令之前,请确保当前目录下有一个 Dockerfile 文件。
- 构建镜像:
- 使用
docker build -t my-service1 .
命令构建镜像。
注意事项
- Dockerfile:
- 确保当前目录下的 Dockerfile 文件正确配置了所需的指令,例如
FROM
,COPY
,RUN
,CMD
等。
- 构建上下文:
- Docker 会将当前目录作为构建上下文,这意味着 Dockerfile 中的任何文件复制指令(如
COPY
或ADD
)都将参考当前目录下的文件。
- 镜像名称和标签:
- 确保您提供的镜像名称和标签是唯一的,以避免与现有的镜像发生冲突。
- 构建缓存:
- Docker 会使用构建缓存来加快构建过程。如果您修改了 Dockerfile 或相关文件,可能需要清除构建缓存以确保使用最新的更改。
- 镜像大小:
- 请注意,构建的镜像可能会很大,尤其是如果 Dockerfile 中有很多层或文件被更改过。
7.启动一个新的 Docker 容器
多端口映射
命令解释
docker run
:
docker run
命令用于启动一个新的容器。
--name my-service1
:
--name
选项用于给容器指定一个名称。这里名称为my-service1
。
--restart=always
:
--restart
选项用于指定容器的重启策略。always
表示无论容器是否正常退出,都会重启容器。
--privileged=true
:
--privileged
选项用于指定容器是否以特权模式运行。特权模式授予容器更多的权限,类似于在宿主机上以 root 用户身份运行。
-p 8353:80 -p 8743:8848 -p 6395:6379
:
-p
选项用于指定端口映射。这里将容器内的 80 端口映射到宿主机的 8353 端口,8848 端口映射到 8743 端口,以及 6379 端口映射到 6395 端口。
-d
:
-d
选项表示在后台运行容器。
my-service1:latest
:
- 这是您要运行的 Docker 镜像的名称和标签。
my-service1
是镜像名称,latest
是镜像的标签。
使用说明
- 确保镜像存在:
- 在运行容器之前,请确保镜像
my-service1:latest
已经存在于本地或可以从 Docker Hub 或其他注册表拉取。
- 启动容器:
- 使用
docker run --name my-service1 --restart=always --privileged=true -p 8353:80 -p 8743:8848 -p 6395:6379 -d my-service1:latest
命令启动容器。
注意事项
- 容器名称:
- 确保您提供的容器名称是唯一的,以避免与现有的容器发生冲突。
- 端口映射:
- 确保您提供的端口映射正确无误,并且宿主机上的端口未被其他服务占用。
- 特权模式:
- 使用特权模式运行容器会给予容器更多的权限,这可能带来安全风险。请确保您了解特权模式的含义,并且只在必要时使用。
- 容器运行状态:
- 使用
docker ps
和docker ps -a
命令来查看正在运行的容器列表以及所有容器(包括已停止的)列表。
- 容器日志:
- 使用
docker logs my-service1
命令来查看容器的日志输出,以帮助诊断问题。
- 容器重启:
- 使用
docker restart my-service1
命令来手动重启容器。
8.Docker 容器中复制文件到本地
已经有一个容器正在运行,并且您想要从该容器内的目录复制文件到本地文件系统中的目录
命令解释
docker cp
: 是 Docker CLI 的一个命令,用于在 Docker 容器和本地文件系统之间复制文件或目录。nacos
: 是源容器的名称或 ID。:/home/nacos/conf/application.properties
: 是容器内的文件路径。F:\JetBrains\src
: 是目标本地文件系统的路径。
使用说明
- 确保容器正在运行:
- 在执行
docker cp
命令之前,请确保容器nacos
正在运行。您可以使用docker ps
命令来查看正在运行的容器列表。
- 复制文件:
- 使用
docker cp nacos:/home/nacos/conf/application.properties F:\JetBrains\src
命令复制文件。
注意事项
- 容器名称和 ID:
- 确保您提供的容器名称或 ID 是正确的。如果不确定,可以使用
docker ps
命令来查看正在运行的容器列表。
- 文件路径:
- 确保您提供的容器内文件路径是正确的。如果不确定,可以使用
docker exec
命令进入容器并使用ls
命令查看目录内容。
- 本地路径:
- 确保您提供的本地路径是可写的。如果路径不存在,Docker 会尝试为您创建路径。
- 文件权限:
- 确保您有足够的权限来写入本地路径。
查看复制的文件
复制文件后,您可以使用文件浏览器或命令行工具(如 dir
或 ls
)来查看文件是否已成功复制到本地路径。
注意事项
- 文件类型:
- 确保您复制的是普通文件而不是目录。如果您需要复制目录,请使用相应的目录路径。
- 文件大小:
- 如果文件较大,复制过程可能需要一段时间,请耐心等待。
- 文件完整性:
- 确保复制的文件完整无损。您可以使用文件校验工具来检查文件的完整性。