Docker 常见环境问题

Docker 常见环境问题

Docker 轻松学习

文章目录

  • Docker 常见环境问题
  • 一、Docker 是什么?
  • 二、Docker 与 LXC(Linux Container)有何不同?
  • 三、Docker 与 Vagrant 有何不同?
  • 四、如何将一台宿主主机的 Docker 环境迁移到另外一台宿主主机?
  • 五、如何进入 Docker 容器的网络命名空间?
  • 六、如何获取容器绑定到本地那个 veth 接口上?
  • 六、启动docker中遇见:group docker not found?
  • 总结


一、Docker 是什么?

docker是一种技术,能使得应用在任何环境都能用的打包技术。打包出的东西叫镜像。

二、Docker 与 LXC(Linux Container)有何不同?

LXC 利用 Linux 上相关技术实现了容器。Docker 则在如下的几个方面进行了改进:

  • 移植性:通过抽象容器配置,容器可以实现从一个平台移植到另一个平台;
  • 镜像系统:基于 OverlayFS 的镜像系统为容器的分发带来了很多的便利,同时共同的镜像层只需要存储一份,实现高效率的存储;
  • 版本管理:类似于Git的版本管理理念,用户可以更方便的创建、管理镜像文件;
  • 仓库系统:仓库系统大大降低了镜像的分发和管理的成本;
  • 周边工具:各种现有工具(配置管理、云平台)对 Docker 的支持,以及基于 Docker的 PaaS、CI 等系统,让 Docker 的应用更加方便和多样化。

三、Docker 与 Vagrant 有何不同?

两者的定位完全不同。

  • Vagrant 类似 Boot2Docker(一款运行 Docker 的最小内核),是一套虚拟机的管理环境。Vagrant 可以在多种系统上和虚拟机软件中运行,可以在 Windows,Mac 等非 Linux 平台上为 Docker 提供支持,自身具有较好的包装性和移植性。
  • 原生的 Docker 自身只能运行在 Linux 平台上,但启动和运行的性能都比虚拟机要快,往往更适合快速开发和部署应用的场景。

ps:Vagrant 适合用来管理虚拟机,而 Docker 适合用来管理应用环境。

四、如何将一台宿主主机的 Docker 环境迁移到另外一台宿主主机?

停止 Docker 服务。将整个 Docker 存储文件夹复制到另外一台宿主主机,然后调整另外一台宿主主机的配置即可。

五、如何进入 Docker 容器的网络命名空间?

Docker 在创建容器后,删除了宿主主机上 /var/run/netns 目录中的相关的网络命名空间文件。因此,在宿主主机上是无法看到或访问容器的网络命名空间的。用户可以通过如下方法来手动恢复它。

首先,使用下面的命令查看容器进程信息, 在 /proc 目录下,把对应的网络命名空间文件链接到 /var/run/netns 目录。
在宿主主机上就可以看到容器的网络命名空间信息 用户可以通过正常的系统命令来查看或操作容器的命名空间了。例如修改容器的 IP 地址信息为
127.0.0.1/16。

docker inspect --format='{{. State.Pid}} ' $container_id
sudo ln -s /proc/1234/ns/net /var/run/netns/
sudo ip netns show
sudo ip netns exec 1234 ifconfig eth0 127.0.0.1/16

六、如何获取容器绑定到本地那个 veth 接口上?

Docker 容器启动后,会通过 veth 接口对连接到本地网桥,veth 接口命名跟容器命名毫无关系,十分难以找到对应关系。
最简单的一种方式是通过查看接口的索引号,在容器中执行 ip a 命令,查看到本地接口最前面的接口索引号,如 205,将此值加上 1,即 206,然后在本地主机执行 ip a 命令,查找接口索引号为 206 的接口,两者即为连接的 veth 接口对。

六、启动docker中遇见:group docker not found?

sudo groupadd docker
sudo usermod -aG docker $(whoami)
sudo service docker start

总结

遇到 Docker 问题不要怕,记下来,下次省的忘记了

希望这个博客能对你有所益处。我是轻王,我为自己代言。

你可能感兴趣的:(Linux,Docker,docker,容器,运维)