1.进入容器

假设您已经有一个名为 my-project1 的容器正在运行,并且您想要进入该容器并运行一些命令,您可以使用以下命令:

docker exec -it my-project1 bash
  • 1.

命令解释

  • docker exec: 是 Docker CLI 的一个命令,用于在已经运行的容器中执行命令。
  • -i: 表示保持 STDIN 打开,即使没有附加的客户端。
  • -t: 分配一个伪 tty。
  • my-project1: 是您要执行命令的目标容器的名称或 ID。
  • bash: 是您要在容器中运行的命令,这里是指启动一个 Bash shell。


2.列出端口使用进程

在 Windows 命令提示符 (cmd) 中使用的命令,用于列出所有正在使用端口 8100 的进程

tasklist|findstr "8100"
  • 1.

命令解释

  1. tasklist:
  • tasklist 命令用于显示当前运行在本地计算机上的任务(进程)的列表。
  1. | (管道符号):
  • 管道符号 | 用于将前一个命令的输出作为下一个命令的输入。
  1. findstr "8100":
  • findstr 命令用于搜索文本文件中的字符串模式。
  • 在这种情况下,findstr "8100" 用于搜索 tasklist 命令输出中的字符串 "8100",这通常用于查找正在使用端口 8100 的进程。

使用说明

当您在命令提示符中运行 tasklist|findstr "8100" 时,它将列出所有正在使用端口 8100 的进程。这可以帮助您识别哪些进程正在监听该端口,这对于诊断端口冲突或查看服务状态非常有用。

注意事项

  • 端口占用情况:
  • 如果您发现某个进程正在使用端口 8100 并且您需要释放该端口,您可以使用 taskkill 命令来终止该进程。
  • 权限问题:
  • 如果您需要终止正在使用端口 8100 的进程,您可能需要以管理员权限运行命令提示符。
  • 其他命令:
  • 如果您需要更多关于正在使用端口 8100 的进程的信息,可以使用 netstat 命令来查看端口使用情况。
查找端口使用情况

如果您还需要查看端口 8100 的详细使用情况,例如进程 ID (PID),可以使用以下命令:

netstat -ano | findstr :8100
  • 1.

这将列出所有使用端口 8100 的 TCP 连接,并显示对应的进程 ID。

终止进程

如果您需要终止正在使用端口 8100 的进程,可以使用 taskkill 命令,例如:

taskkill /F /PID <PID>
  • 1.

其中 <PID> 是您从 netstat -ano | findstr :8100 命令中获得的进程 ID。

注意事项

  • 权限:
  • 终止进程可能需要管理员权限。如果命令提示符不是以管理员身份运行,请使用 runas 命令或右键点击命令提示符选择“以管理员身份运行”。
  • 确认 PID:
  • 在终止进程之前,请确保您确认了正确的 PID,以免意外终止错误的进程。

3.在Docker 容器中启动 Redis 客户端

在名为 my-service3 的 Docker 容器中启动 Redis 客户端,并连接到 Redis 服务器的 6399 端口,使用密码 "123456"。

docker exec -it my-service3 redis-cli -p 6399 -a "123456"
  • 1.

命令解释

  1. docker exec:
  • docker exec 命令用于在已经运行的容器中执行命令。
  1. -i 和 -t:
  • -i: 保持 STDIN 打开,即使没有附加的客户端。
  • -t: 分配一个伪 tty。
  1. my-service3:
  • 这是您要执行命令的目标容器的名称或 ID。
  1. redis-cli:
  • redis-cli 是 Redis 的命令行客户端工具,用于与 Redis 服务器交互。
  1. -p 6399:
  • -p 选项用于指定 Redis 服务器的端口号。在这里,端口号为 6399。
  1. -a "123456":
  • -a 选项用于指定 Redis 服务器的密码。在这里,密码为 "123456"。

使用说明

  1. 确保容器正在运行:
  • 在执行 docker exec 命令之前,请确保容器 my-service3 正在运行。您可以使用 docker ps 命令来查看正在运行的容器列表。
  1. 启动 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 my-service1
  • 1.

命令解释

  • docker port: 是 Docker CLI 的一个命令,用于查询容器的端口映射信息。
  • my-service1: 是您要查询端口映射信息的容器名称或 ID。

使用说明

  1. 确保容器正在运行:
  • 在执行 docker port 命令之前,请确保容器 my-service1 正在运行。您可以使用 docker ps 命令来查看正在运行的容器列表。
  1. 查询端口映射:
  • 使用 docker port my-service1 命令查询容器的端口映射信息。

注意事项

  • 容器名称和 ID:
  • 确保您提供的容器名称或 ID 是正确的。如果不确定,可以使用 docker ps 命令来查看正在运行的容器列表。
  • 端口映射:
  • 如果容器没有暴露端口或者没有进行端口映射,命令将不会返回任何结果。
  • 多个端口:
  • 如果容器公开了多个端口,您可能需要多次运行 docker port 命令,每次指定不同的端口。

如果容器 my-service1 映射了端口 8080 到宿主机的 30000 端口,命令的输出可能如下所示:

130000/tcp -> 0.0.0.0:30000
  • 1.

这表示容器内的 8080 端口映射到了宿主机的 30000 端口。

查看所有端口映射

如果您想查看容器的所有端口映射,可以使用 docker inspect 命令,并查看 NetworkSettings 下的 Ports 信息:

1docker inspect -f '{{json .NetworkSettings.Ports}}' my-service1
  • 1.

这将返回一个 JSON 对象,其中包含了容器所有端口的映射信息。

注意事项

  • JSON 输出解析:
  • 使用 docker inspect 命令时,输出可能比较复杂,您可能需要使用 jq 或其他工具来解析 JSON 输出。


5.docker 容器打包成镜像

docker commit my-service6 demo1:nrn-1.1
  • 1.

命令解释

  • docker commit: 是 Docker CLI 的一个命令,用于将容器的状态保存为一个新的镜像。
  • my-service1: 是您要提交的容器的名称或 ID。
  • demo1:nrn-1.1: 是新镜像的名称和标签。demo1 是镜像名称,nrn-1.1 是镜像的标签。

使用说明

  1. 确保容器正在运行或已停止:
  • 在执行 docker commit 命令之前,请确保容器 my-service1 正在运行或已停止。您可以使用 docker ps 和 docker ps -a 命令来查看正在运行的容器列表以及所有容器(包括已停止的)列表。
  1. 提交容器为新镜像:
  • 使用 docker commit my-service1 demo1:nrn-1.1 命令提交容器为新的镜像。

注意事项

  • 容器状态:
  • 确保您提供的容器名称或 ID 是正确的。如果不确定,可以使用 docker ps 和 docker ps -a 命令来查看正在运行的容器列表以及所有容器(包括已停止的)列表。
  • 镜像名称和标签:
  • 确保您提供的镜像名称和标签是唯一的,以避免与现有的镜像发生冲突。
  • 镜像内容:
  • 新镜像将包含容器 my-service6 的当前状态,包括任何已安装的软件包、配置更改等。
  • 镜像大小:
  • 请注意,提交的镜像可能会很大,尤其是如果容器中有很多层或文件被更改过。
docker login --username=[用户名] [地址]
docker tag [ImageId] [地址]/demo1:[镜像版本号]
docker push [地址]/demo1:[镜像版本号]
  • 1.
  • 2.
  • 3.

注意事项

  • 镜像推送:
  • 在推送镜像之前,请确保您已经登录到 Docker Hub 或其他注册表,并且具有适当的权限。
  • 镜像安全:
  • 确保新镜像中没有敏感信息,并且符合安全最佳实践。

6.构建一个新的 Docker 镜像

基于当前目录下的 Dockerfile 构建的

docker build -t my-service1 .
  • 1.

命令解释

  • docker build: 是 Docker CLI 的一个命令,用于构建 Docker 镜像。
  • -t: 用于给构建的镜像指定一个标签(名称和版本)。在这个例子中,标签为 my-service1
  • .: 指定构建上下文的路径。这里的 . 表示当前目录。

使用说明

  1. 确保当前目录包含 Dockerfile:
  • 在执行 docker build 命令之前,请确保当前目录下有一个 Dockerfile 文件。
  1. 构建镜像:
  • 使用 docker build -t my-service1 . 命令构建镜像。

注意事项

  • Dockerfile:
  • 确保当前目录下的 Dockerfile 文件正确配置了所需的指令,例如 FROMCOPYRUNCMD 等。
  • 构建上下文:
  • Docker 会将当前目录作为构建上下文,这意味着 Dockerfile 中的任何文件复制指令(如 COPY 或 ADD)都将参考当前目录下的文件。
  • 镜像名称和标签:
  • 确保您提供的镜像名称和标签是唯一的,以避免与现有的镜像发生冲突。
  • 构建缓存:
  • Docker 会使用构建缓存来加快构建过程。如果您修改了 Dockerfile 或相关文件,可能需要清除构建缓存以确保使用最新的更改。
  • 镜像大小:
  • 请注意,构建的镜像可能会很大,尤其是如果 Dockerfile 中有很多层或文件被更改过。

7.启动一个新的 Docker 容器

多端口映射

docker run --name my-service1 --restart=always --privileged=true -p 8353:80 -p 8743:8848 -p 6395:6379 -d my-service1:latest
  • 1.

命令解释

  1. docker run:
  • docker run 命令用于启动一个新的容器。
  1. --name my-service1:
  • --name 选项用于给容器指定一个名称。这里名称为 my-service1
  1. --restart=always:
  • --restart 选项用于指定容器的重启策略。always 表示无论容器是否正常退出,都会重启容器。
  1. --privileged=true:
  • --privileged 选项用于指定容器是否以特权模式运行。特权模式授予容器更多的权限,类似于在宿主机上以 root 用户身份运行。
  1. -p 8353:80 -p 8743:8848 -p 6395:6379:
  • -p 选项用于指定端口映射。这里将容器内的 80 端口映射到宿主机的 8353 端口,8848 端口映射到 8743 端口,以及 6379 端口映射到 6395 端口。
  1. -d:
  • -d 选项表示在后台运行容器。
  1. my-service1:latest:
  • 这是您要运行的 Docker 镜像的名称和标签。my-service1 是镜像名称,latest 是镜像的标签。

使用说明

  1. 确保镜像存在:
  • 在运行容器之前,请确保镜像 my-service1:latest 已经存在于本地或可以从 Docker Hub 或其他注册表拉取。
  1. 启动容器:
  • 使用 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 nacos:/home/nacos/conf/application.properties F:\JetBrains\src
  • 1.

命令解释

  • docker cp: 是 Docker CLI 的一个命令,用于在 Docker 容器和本地文件系统之间复制文件或目录。
  • nacos: 是源容器的名称或 ID。
  • :/home/nacos/conf/application.properties: 是容器内的文件路径。
  • F:\JetBrains\src: 是目标本地文件系统的路径。

使用说明

  1. 确保容器正在运行:
  • 在执行 docker cp 命令之前,请确保容器 nacos 正在运行。您可以使用 docker ps 命令来查看正在运行的容器列表。
  1. 复制文件:
  • 使用 docker cp nacos:/home/nacos/conf/application.properties F:\JetBrains\src 命令复制文件。

注意事项

  • 容器名称和 ID:
  • 确保您提供的容器名称或 ID 是正确的。如果不确定,可以使用 docker ps 命令来查看正在运行的容器列表。
  • 文件路径:
  • 确保您提供的容器内文件路径是正确的。如果不确定,可以使用 docker exec 命令进入容器并使用 ls 命令查看目录内容。
  • 本地路径:
  • 确保您提供的本地路径是可写的。如果路径不存在,Docker 会尝试为您创建路径。
  • 文件权限:
  • 确保您有足够的权限来写入本地路径。

查看复制的文件

复制文件后,您可以使用文件浏览器或命令行工具(如 dirls)来查看文件是否已成功复制到本地路径。

注意事项

  • 文件类型:
  • 确保您复制的是普通文件而不是目录。如果您需要复制目录,请使用相应的目录路径。
  • 文件大小:
  • 如果文件较大,复制过程可能需要一段时间,请耐心等待。
  • 文件完整性:
  • 确保复制的文件完整无损。您可以使用文件校验工具来检查文件的完整性。