- Java锁的逻辑(结合对象头和ObjectMonitor)
- 还在用饼状图?来瞧瞧这些炫酷的百分比可视化新图形(附代码实现)⛵
- 自动注册实体类到EntityFrameworkCore上下文,并适配ABP及ABPVNext
- 基于Sklearn机器学习代码实战
准备一台Linux主机,并在上面安装好docker-ce,安装好make,git就可以开始编译工作了。对,就是如此简单,可能你会对此感到异或为啥要装docker,我不是准备编译这个玩意么,为啥不装go,docker不是用go开发的么? 这些疑问会在后面的步骤中解答.
# docker-ce 安装参考
# FROM: https://developer.aliyun.com/article/110806
# Ubuntu 14.04 16.04 (使用apt-get进行安装)
# step 1: 安装必要的一些系统工具
sudo apt-get update
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
# step 2: 安装GPG证书
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
# Step 3: 写入软件源信息
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
# Step 4: 更新并安装 Docker-CE
sudo apt-get -y update
sudo apt-get -y install docker-ce
注意:其他注意事项在下面的注释中
# 安装指定版本的Docker-CE:
# Step 1: 查找Docker-CE的版本:
# apt-cache madison docker-ce
# docker-ce | 17.03.1~ce-0~ubuntu-xenial | http://mirrors.aliyun.com/docker-ce/linux/ubuntu xenial/stable amd64 Packages
# docker-ce | 17.03.0~ce-0~ubuntu-xenial | http://mirrors.aliyun.com/docker-ce/linux/ubuntu xenial/stable amd64 Packages
# Step 2: 安装指定版本的Docker-CE: (VERSION 例如上面的 17.03.1~ce-0~ubuntu-xenial)
# sudo apt-get -y install docker-ce=[VERSION]
# 通过经典网络、VPC网络内网安装时,用以下命令替换Step 2、Step 3中的命令
# 经典网络:
# curl -fsSL http://mirrors.aliyuncs.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
# sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyuncs.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
# VPC网络:
# curl -fsSL http://mirrors.cloud.aliyuncs.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
# sudo add-apt-repository "deb [arch=amd64] http://mirrors.cloud.aliyuncs.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
# CentOS 7 (使用yum进行安装)
# step 1: 安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# Step 2: 添加软件源信息
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# Step 3: 更新并安装 Docker-CE
sudo yum makecache fast
sudo yum -y install docker-ce
# Step 4: 开启Docker服务
sudo service docker start
注意:其他注意事项在下面的注释中
# 官方软件源默认启用了最新的软件,您可以通过编辑软件源的方式获取各个版本的软件包。例如官方并没有将测试版本的软件源置为可用,你可以通过以下方式开启。同理可以开启各种测试版本等。
# vim /etc/yum.repos.d/docker-ce.repo
# 将 [docker-ce-test] 下方的 enabled=0 修改为 enabled=1
#
# 安装指定版本的Docker-CE:
# Step 1: 查找Docker-CE的版本:
# yum list docker-ce.x86_64 --showduplicates | sort -r
# Loading mirror speeds from cached hostfile
# Loaded plugins: branch, fastestmirror, langpacks
# docker-ce.x86_64 17.03.1.ce-1.el7.centos docker-ce-stable
# docker-ce.x86_64 17.03.1.ce-1.el7.centos @docker-ce-stable
# docker-ce.x86_64 17.03.0.ce-1.el7.centos docker-ce-stable
# Available Packages
# Step2 : 安装指定版本的Docker-CE: (VERSION 例如上面的 17.03.0.ce.1-1.el7.centos)
# sudo yum -y install docker-ce-[VERSION]
# 注意:在某些版本之后,docker-ce安装出现了其他依赖包,如果安装失败的话请关注错误信息。例如 docker-ce 17.03 之后,需要先安装 docker-ce-selinux。
# yum list docker-ce-selinux- --showduplicates | sort -r
# sudo yum -y install docker-ce-selinux-[VERSION]
# 通过经典网络、VPC网络内网安装时,用以下命令替换Step 2中的命令
# 经典网络:
# sudo yum-config-manager --add-repo http://mirrors.aliyuncs.com/docker-ce/linux/centos/docker-ce.repo
# VPC网络:
# sudo yum-config-manager --add-repo http://mirrors.could.aliyuncs.com/docker-ce/linux/centos/docker-ce.repo
# 安装其他工具, 以centos7为例子
yum install -y make git
git clone https://github.com/moby/moby.git
其实如果你有对docker二次开发的需求了,我这边也不用再多费口舌在moby这个奇怪的项目名称上 其实就个人而言对docker改名这件事也是颇有微词的,docker公司愿意开源docker-ce固然是好事,但是直接换个名称明摆着是想把docker早期创造出来的名声都让公司的付费产品“docker” 上,而不是所谓的moby(docker-ce).
如果你工作网络环境足够优秀(可以稳定的访问到dockerhub和各种操作系统的源)可以跳过这一小节,肉身在国外的一般没有这种烦恼。而对于大部分国内的开发者则需要通过代理完成这个开发环境的构建,一下的步骤仅供参考.
docker的镜像拖取工作是由dockerd完成的(而不是你平常使用的docker命令行工具),而dockerd一般挂在systemd的进程下(如果有老哥头铁从命令行运行dockerd那么当我没说,这样也能读到代理的环境变量)。如果要为dockerd添加代理的话可以参考如下操作 。
# 修改为你自己的http代理地址
cat > /etc/systemd/system/docker.service.d/http-proxy.conf << EOF
[Service]
Environment="HTTP_PROXY=http://192.168.144.1:10811"
Environment="HTTPS_PROXY=http://192.168.144.1:10811"
EOF
systemctl daemon-realod
systemctl restart docker
到这一步只是为镜像的拖取操作添加了代理,但是在开发环境中资源的拖取问题还是没有办法解决,这点我们稍微修改Makefile可以处理,参考如下操作 。
1. 在Makefile文件头部增加"include .env"
2. Makefile同目录创建.env文件并写入你的环境变量,参考如下
BUILD_PROXY := --build-arg "http_proxy=http://192.168.144.1:10811" --build-arg "https_proxy=http://192.168.144.1:10811"
3. 追加参数到指定的构建参数变量,修改Makefile, 在BUILD_OPTS := *后面的一行增加
BUILD_OPTS += $(BUILD_PROXY)
ntpdate ntp1.aliyun.com # 同步时间,如果时间误差过大会导致部分源依赖获取失效,非必须
make BIND_DIR=. shell
构建过程由于或需要拖取镜像和资源耗时一般比较长(即使在网络条件较好的情况下),一般要10分钟左右。 如果构建成功你回进入如下的一个容器内终端 。
root@3cede98051a6:/go/src/github.com/docker/docker#
这个便是makefile通过dockerfile为你构建的docker-ce的编译环境,这个环境中你开发和调试的工具应有尽有,如你还有特殊的需求可以通过修改dockerfile重新构建(别担心,由于之前构建的缓存文件,你第二次构建只会构建新增部分,不会花太多的时间),项目的根目录挂载到主机目录,所以你在此路径下构建出的二进制文件也会写入到宿主机。 接下来我们开始编译 。
hack/make.sh binary
编译完成 。
root@3cede98051a6:/go/src/github.com/docker/docker# hack/make.sh binary
Removing bundles/
---> Making bundle: binary (in bundles/binary)
Building: bundles/binary-daemon/dockerd
GOOS="" GOARCH="" GOARM=""
Created binary: bundles/binary-daemon/dockerd
Copying nested executables into bundles/binary-daemon
Building: bundles/binary-daemon/docker-proxy
GOOS="" GOARCH="" GOARM=""
Created binary: bundles/binary-daemon/docker-proxy
root@3cede98051a6:/go/src/github.com/docker/docker#
安装测试 。
# 还是在容器内
make install
启动测试 。
/usr/local/bin/dockerd -D
你也可以在容器内下载镜像,启动容器 。
# 在宿主机另开一个终端,并进入容器
[root@localhost moby]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3cede98051a6 docker-dev "hack/dind bash" 8 minutes ago Up 8 minutes condescending_swanson
dae301c0f728 yandex/clickhouse-server "/entrypoint.sh" 33 hours ago Up 33 hours 0.0.0.0:8123->8123/tcp, :::8123->8123/tcp, 0.0.0.0:9000->9000/tcp, :::9000->9000/tcp, 9009/tcp ch-server
[root@localhost moby]# docker exec -it 3ced /bin/bash
root@3cede98051a6:/go/src/github.com/docker/docker#
# 下载镜像,启动容器
root@3cede98051a6:/go/src/github.com/docker/docker# docker pull centos:7
7: Pulling from library/centos
Digest: sha256:be65f488b7764ad3638f236b7b515b3678369a5124c47b8d32916d6487418ea4
Status: Image is up to date for centos:7
root@3cede98051a6:/go/src/github.com/docker/docker# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos 7 eeb6ee3f44bd 15 months ago 204MB
root@3cede98051a6:/go/src/github.com/docker/docker# docker run --rm -it eeb /bin/bash
[root@26c12cba6431 /]# exit
exit
都从源码构建了,总不可能单纯奔着纯安装去的吧,多少是想对docker做点简单的定制化,这里就可以使用Delve来调试我们编译出来的dockerd二进制程序了.
dlv /usr/local/bin/dockerd -- -D
哎,咋报错了 。
2022-12-14T09:10:43Z error layer=debugger error loading binary "/usr/local/bin/dockerd": could not parse .eh_frame section: pointer encoding not supported 0x9b at 0x3150
could not launch process: could not parse .eh_frame section: pointer encoding not supported 0x9b at 0x3150
这个报错是由于默认的hack/make.sh中的这一段(我所编译的版本在105) 。
IAMSTATIC='true'
if [ -z "$DOCKER_DEBUG" ]; then
LDFLAGS='-w'
fi
在编译时加了-w参数删除了调试信息,所以在编译时添加参数或者写到环境变量里就行啦 。
# 在容器创建时添加debug参数
DOCKER_DEBUG=1 make BIND_DIR=. shell
# 在编译时添加参数
DOCKER_DEBUG=1 hack/make.sh binary
以上两种方法都可以,之后就可以使用dlv来调试docekrd了 。
root@f42403397fa5:/go/src/github.com/docker/docker# dlv exec --check-go-version=false /usr/local/bin/dockerd -- -D
WARNING: undefined behavior - version of Delve is too old for Go version 1.19.4 (maximum supported version 1.18)
Type 'help' for list of commands.
(dlv)
至于为什么加上 --check-go-version=false 这个参数,如果你是使用开发中的分支,docker的开发者可能忽略了更新dlv的版本,导致dlv的版本有那么一丝落后于go的版本。如果你要解决这个问题可以通过修改Dockerfile中的 Delve镜像拖取的版本,像是如下这样,把AELVE_VERSION修改为1.9.1即可.
ARG DELVE_VERSION=v1.8.1
# Delve on Linux is currently only supported on amd64 and arm64;
# https://github.com/go-delve/delve/blob/v1.8.1/pkg/proc/native/support_sentinel.go#L1-L6
RUN --mount=type=cache,target=/root/.cache/go-build \
--mount=type=cache,target=/go/pkg/mod \
case $(dpkg --print-architecture) in \
amd64|arm64) \
GOBIN=/build/ GO111MODULE=on go install "github.com/go-delve/delve/cmd/dlv@${DELVE_VERSION}" \
&& /build/dlv --help \
;; \
*) \
mkdir -p /build/ \
;; \
esac
至于delve调试工具如何使用就不在本文里细述,可通过help的方式知道如何使用,类似于gdb,上手十分的简单.
https://github.com/moby/moby/tree/master/docs/contributing
https://github.com/moby/moby/blob/master/docs/contributing/debug.md
https://github.com/moby/moby/blob/master/docs/contributing/set-up-dev-env.md
最后此篇关于从源码构建docker-ce的文章就讲到这里了,如果你想了解更多关于从源码构建docker-ce的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我有 Windows CE 5.0 设备,它不支持任何硬件加速。 我正在寻找一些好的 2d 图形库来做以下事情。 我更喜欢 Compact .Net Framework 中的后端编程。 使用抗锯齿绘制
我有一个 POS 软件,需要为 windows CE 开发一个收集模块,以便在 Honeywell Dolphin 6100 设备上运行。 我需要开发一个在 Honeywell 6100 设备上运行的
我必须找出 Windows CE 4.0/5.0 设备上的内存泄漏问题。是否有任何工具可以向我显示所有进程信息,如内存、句柄数...以便我可以识别罪魁祸首进程。 有没有CE 4.0/5.0的内存泄漏检
我正在开发一个网站并且有一个 htaccess 规则如下:RewriteRule ^(ac|bc|cd)/(.*) $2?folder=$1 [L,QSA] 但是,我想在 domain.com 之后传
我是 CE 环境的新手,我想为在 CE(5 及更高版本)上运行的计算机(英特尔)创建应用程序。我到底需要什么才能开始,我要去哪里?我以前从未使用过 CE,但我确实有使用 C、C++、C# 和 Java
是否有等效于 isatty()在 Windows CE 上?换句话说,有没有办法在代码中检测 stdin/stdout/stderr 是否已被重定向? 最佳答案 你可以调用 GetStdIoPath(
我开发了一个基于媒体的应用程序,该应用程序在带有 Win CE 的设备上运行。我需要一个静音/取消静音按钮来控制应用程序音量。我已经使用 .Net 紧凑型框架开发了该应用程序。 最佳答案 我在 Win
我正在寻找WinCE的开发板,最好有以下接口(interface): VGA/DVI 屏幕 用于 kb/鼠标的 USB 以太网(10Mbit 就可以,100 会更好 ;-) ) 存储(例如:SD/MM
长期以来,您可以做到这一点 execute multiple statements with SQL CE .事实上我正在使用 SQL Server Compact Toolbox做到这一点。但是当我
我正在使用 CE 6.0 处理一个项目,我需要重建树。我的问题是我必须将树更新到 2009 年 5 月,这需要 2008 年汇总和以下 5 个月度更新,但我找不到它们(有 2009 年汇总和以下 20
甚至需要定期压缩 SQL CE 数据库吗?自动收缩就足够了吗?我们的平均数据库大小约为 100Mb,大用户达到 400-500Mb(但这种情况非常罕见)。如果我们必须手动压缩,我们如何判断何时应该压缩
我打算在一个小型但生产的网站中使用SQL CE 4.0,我想知道SQL CE 4.0可以处理多少负载: 并发连接数, 每个表的行数和 数据库的总大小。 最佳答案 可能对您有用的是Scott Guthr
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a software
我不知道这段代码有什么问题,它现在给了我一天的错误: select row_number() over(order by s.title) as rowNumber, s.id from story
我希望能够在启动时检查损坏的数据库,然后以编程方式修复它。我可以 do that很容易。 我的问题是我想测试事情是否按我期望的方式工作。有谁知道故意破坏数据库的方法,以便我可以测试我的代码? 最佳答案
我正在尝试在 Windows CE 6 设备上配置 SMB 文件共享服务器。 我最初的尝试主要是使用桌面版本的 NK.exe。 当我启动时,SMB0: 作为 smbserver.dll 运行 我已经设
我接管了一个 Windows-CE 6.0 应用程序,我想将其移植到其他平台。它是一个相对简单、独立的 GUI 应用程序,使用嵌入式 C++ 4.0 版编写 我感兴趣的第一个目标是常规 Windows
我正在尝试使用 SQL Server Compact Edition 3.5 作为销售应用程序的数据库后端。将安装 3-4 个 Windows 窗体应用程序,所有这些应用程序(通过 LINQ2SQL)
我正在编写一个 wpf destop 应用程序,并且想使用 SQL Server CE 作为后端。我正在尝试想出一种进行有效数据分页的好方法。在 SQL Server Express 中,我可以执行以
由于谷歌没有提供我想知道的内容,我尝试询问 stackoverflow :) sql ce 3.5 数据库的最大并发连接数是多少? 谢谢 j. 最佳答案 我相信您正在寻找的信息是 SQL Server
我是一名优秀的程序员,十分优秀!