Docker 实用技巧

167 阅读5分钟

Docker 实用技巧

在PowerShell中设置 tab键自动补全

  1. 启动一个的PowerShell,以管理员身份运行
  2. 在PowerShell提示符下输入: 

Set-ExecutionPolicy RemoteSigned

  1. 检查策略 设置是否正确,运行:

get-executionpolicy 正常返回 RemoteSigned。

  1. 安装posh-dockerPowerShell模块以自动完成Docker命令,输入:

Install-Module posh-docker 仅为当前用户安装模块,输入: Install-Module -Scope CurrentUser posh-docker.

  1. 安装完成后,只能为当前PowerShell启用自动完成功能,输入:

Import-Module posh-docker

  1. 为了在所有PowerShell会话中保持Tab完成状态$PROFILE,请在PowerShell提示符处输入:

if (-Not (Test-Path $PROFILE)) { New-Item $PROFILE –Type File –Force } Add-Content $PROFILE ”nImport-Module posh-docker“

这将创建一个$PROFILE如果不存在,并将此行添加到文件中: 

Import-Module posh-docker

要检查文件是否已正确创建,或只需手动编辑,请在PowerShell中键入以下内容: 

Notepad $PROFILE

重新打开PowerShell会话,当你输入前几个字母后按Tab键,Docker命令以及容器和映像名称自动补全。

容器互联

容器互联是一种在Docker中用于实现容器之间通信的机制。通过容器互联,可以在多个容器之间建立网络连接,从而容器可以相互访问并进行通信,就像它们在同一网络上运行一样。

在早期版本的Docker中,使用--link选项来实现容器互联,但是自Docker 1.9版本开始,推荐使用自定义网络(Custom Network)来代替--link,因为自定义网络提供了更强大的功能和更灵活的网络配置。

以下是使用自定义网络来实现容器互联的步骤

  1. 创建自定义网络

使用docker network create命令来创建自定义网络。可以选择使用bridge驱动(默认)或其他网络驱动,具体取决于你的需求。

docker network create my_custom_network

在Docker中创建自定义网络时,你可以通过--subnet选项来设置子网(Subnet)。子网允许你在创建网络时定义容器IP地址的范围,从而更好地控制容器在自定义网络中的IP分配。

以下是在创建自定义网络时设置子网的示例:

docker network create --subnet=172.18.0.0/16 my_custom_network

在上面的示例中,我们使用--subnet选项设置了子网为172.18.0.0/16。这意味着在my_custom_network网络中的容器将从172.18.0.0到172.18.255.255范围内分配IP地址。

如果你需要更小的子网,可以相应地调整子网的CIDR(Classless Inter-Domain Routing)前缀。例如,使用/24子网:

docker network create --subnet=172.18.0.0/24 my_custom_network

这样,my_custom_network网络中的容器将从172.18.0.0到172.18.0.255范围内分配IP地址。

这将创建一个名为my_custom_network的自定义网络。

  1. 运行容器并连接到自定义网络

在启动容器时,通过--network选项将容器连接到自定义网络。这样容器就可以在该网络上进行通信。

docker run -d --name container1 --network my_custom_network image1 docker run -d --name container2 --network my_custom_network image2

这样,容器container1和container2就连接到了my_custom_network网络。

  1. 容器之间的通信

通过自定义网络,容器可以使用其名称(容器名)来进行通信。Docker会根据容器名解析到正确的IP地址,从而容器之间可以通过容器名进行通信。

例如,容器container1可以通过container2的名称进行访问:

docker exec container1 ping container2

清理: 如果不再需要自定义网络,可以使用docker network rm命令删除它:

docker network rm my_custom_network

请注意,自定义网络是一个有用的功能,可以帮助你在Docker中更好地组织和管理容器,并提供更好的隔离性和安全性。你可以根据需要创建多个自定义网络,并将容器按需连接到这些网络上。

其他网络操作

  • 查看所有容器名称和ip地址

docker network ls docker inspect --format='{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)

  • 删除自定义内部网络

docker network ls docker network rm NETWORK

  • 路由设置

添加路由

routeadd 172.17.0.0/16 mask 255.255.255.0 10.0.75.2 -p

删除路由

Route delete

查看路由

route print

容器映射卷

容器映射卷(ContainerVolumeMapping)是一种将容器内的目录与主机(宿主机)文件系统中的目录进行映射的方法。这样可以实现容器与主机之间的数据共享和持久化存储,使得容器内的数据在容器删除后不会丢失。

容器映射卷的主要作用是将容器内部的目录和主机上的目录建立关联,容器内的数据写入映射卷时,实际上是写入到了主机上对应的目录中。

在Docker中,可以使用-v或--volume选项来创建容器映射卷。

以下是一个示例,展示如何在Docker中使用容器映射卷:

docker run -d \ --name my_container \ -v /host/path:/container/path \ my_image

上面的命令创建了一个名为my_container的容器,并将主机上的/host/path目录映射到容器内的/container/path目录。这样,在容器内对/container/path目录的操作实际上是在主机上的/host/path目录进行的。

通过容器映射卷,容器内的数据可以持久化存储在主机上,即使容器被删除,数据仍然保留在映射的主机目录中。

使用容器映射卷的好处包括:

  • 可以在主机和容器之间实现数据共享。
  • 数据持久化:容器内的数据在容器删除后不会丢失。
  • 方便进行配置和部署:可以通过映射不同的目录来实现配置的灵活性和可重用性。

容器映射卷是在Docker中管理数据的重要方法之一,特别适用于需要持久化存储数据的应用程序,如数据库容器或文件存储应用程序。在使用容器映射卷时,要注意权限设置和路径的正确配置,以确保数据能够在主机和容器之间正确传递和访问。