前言
关于Docker源码在Linux环境下的安装,我在这个系列的第一篇文章已经介绍过了,整体下来还算是很简单的。后来我又尝试了一下在windows环境下编译moby,踩了无数的坑,终于编译成功了,真是一部血泪史,网上也没找到有关docker源码在windows上编译的中文资料,应该算是独家了吧。
注意:windows下编译moby,网络环境比较复杂,需要代理开启TUN模式,具体方法,自行搜索
构建环境
-
要确保docker运行在windows containers模式下,右键docker图标,然后看到这里是
Switch to Linux containers
就说明已经处于windows containers了,如果不是的话,就点一下,切换到windows containers中
-
构建基础镜像
进入moby的文件夹中,然后
docker pull mcr.microsoft.com/windows/servercore:ltsc2022
docker image tag mcr.microsoft.com/windows/servercore:ltsc2022 microsoft/windowsservercore
docker build -t nativebuildimage -f .\Dockerfile.windows .
这里吐槽一下官方文档,只有一句docker build -t nativebuildimage -f .\Dockerfile.windows .,执行之后绝对会报错,因为这个镜像早就被弃用了
pull access denied for microsoft/windowsservercore, repository does not exist or may require ‘docker login’: denied: requested access to the resource is denied
后来我找到了他的workflow,看了一眼测试的执行的命令,才发现需要这样弄
构造过程中,如果出现网络错误,说明没有设置真正的全局代理,自行搜索如何设置代理的TUN模式
- 编译二进制文件
$DOCKER_GITCOMMIT=(git rev-parse --short HEAD)
docker run --name binaries -e DOCKER_GITCOMMIT=$DOCKER_GITCOMMIT nativebuildimage hack\make.ps1 -Binary
- 拷贝生成文件
下面两行命令会将构建出的docker 以及dockerd拷贝到当前文件夹下
docker cp binaries:C:\gopath\src\github.com\docker\docker\bundles\docker.exe docker.exe
docker cp binaries:C:\gopath\src\github.com\docker\docker\bundles\dockerd.exe dockerd.exe
- 执行
Stop-Service Docker
.\dockerd.exe -D
docker daemon启动成功
这里注意,docker daemon监听在 ./pipe/docker_engine_windows
所以这里我们要这样执行命令:
.\docker -H=npipe:./pipe/docker_engine_windows version
执行成功~~
然后和之前一样,我们修改一下源码cmd/docerd/docker.go里的shorts
按照2,3,4,5流程重新执行编译,最终成功,如图所示: