日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線(xiàn)咨詢(xún)客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

目錄
  • 準(zhǔn)備環(huán)境
  • 獲取源碼
  • 編譯前的準(zhǔn)備工作
    • 添加dockerd的代理
  • 開(kāi)始編譯
    • 使用Delve調(diào)試
      • 參考

        準(zhǔn)備環(huán)境

        準(zhǔn)備一臺(tái)Linux主機(jī),并在上面安裝好docker-ce,安裝好make,git就可以開(kāi)始編譯工作了。對(duì),就是如此簡(jiǎn)單,可能你會(huì)對(duì)此感到異或?yàn)樯兑bdocker,我不是準(zhǔn)備編譯這個(gè)玩意么,為啥不裝go,docker不是用go開(kāi)發(fā)的么? 這些疑問(wèn)會(huì)在后面的步驟中解答。

        # docker-ce 安裝參考
        # FROM: https://developer.aliyun.com/article/110806
        
        # Ubuntu 14.04 16.04 (使用apt-get進(jìn)行安裝)
        # step 1: 安裝必要的一些系統(tǒng)工具
        sudo apt-get update
        sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
        # step 2: 安裝GPG證書(shū)
        curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
        # Step 3: 寫(xiě)入軟件源信息
        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
        
        注意:其他注意事項(xiàng)在下面的注釋中
        # 安裝指定版本的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]
        
        # 通過(guò)經(jīng)典網(wǎng)絡(luò)、VPC網(wǎng)絡(luò)內(nèi)網(wǎng)安裝時(shí),用以下命令替換Step 2、Step 3中的命令
        # 經(jīng)典網(wǎng)絡(luò):
        # 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網(wǎng)絡(luò):
        # 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進(jìn)行安裝)
        # step 1: 安裝必要的一些系統(tǒng)工具
        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: 開(kāi)啟Docker服務(wù)
        sudo service docker start
        
        注意:其他注意事項(xiàng)在下面的注釋中
        # 官方軟件源默認(rèn)啟用了最新的軟件,您可以通過(guò)編輯軟件源的方式獲取各個(gè)版本的軟件包。例如官方并沒(méi)有將測(cè)試版本的軟件源置為可用,你可以通過(guò)以下方式開(kāi)啟。同理可以開(kāi)啟各種測(cè)試版本等。
        # 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安裝出現(xiàn)了其他依賴(lài)包,如果安裝失敗的話(huà)請(qǐng)關(guān)注錯(cuò)誤信息。例如 docker-ce 17.03 之后,需要先安裝 docker-ce-selinux。
        # yum list docker-ce-selinux- --showduplicates | sort -r
        # sudo yum -y install docker-ce-selinux-[VERSION]
        
        # 通過(guò)經(jīng)典網(wǎng)絡(luò)、VPC網(wǎng)絡(luò)內(nèi)網(wǎng)安裝時(shí),用以下命令替換Step 2中的命令
        # 經(jīng)典網(wǎng)絡(luò):
        # sudo yum-config-manager --add-repo http://mirrors.aliyuncs.com/docker-ce/linux/centos/docker-ce.repo
        # VPC網(wǎng)絡(luò):
        # 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
        

        其實(shí)如果你有對(duì)docker二次開(kāi)發(fā)的需求了,我這邊也不用再多費(fèi)口舌在moby這個(gè)奇怪的項(xiàng)目名稱(chēng)上
        其實(shí)就個(gè)人而言對(duì)docker改名這件事也是頗有微詞的,docker公司愿意開(kāi)源docker-ce固然是好事,但是直接換個(gè)名稱(chēng)明擺著是想把docker早期創(chuàng)造出來(lái)的名聲都讓公司的付費(fèi)產(chǎn)品“docker”
        上,而不是所謂的moby(docker-ce)。

        編譯前的準(zhǔn)備工作

        如果你工作網(wǎng)絡(luò)環(huán)境足夠優(yōu)秀(可以穩(wěn)定的訪問(wèn)到dockerhub和各種操作系統(tǒng)的源)可以跳過(guò)這一小節(jié),肉身在國(guó)外的一般沒(méi)有這種煩惱。而對(duì)于大部分國(guó)內(nèi)的開(kāi)發(fā)者則需要通過(guò)代理完成這個(gè)開(kāi)發(fā)環(huán)境的構(gòu)建,一下的步驟僅供參考。

        添加dockerd的代理

        docker的鏡像拖取工作是由dockerd完成的(而不是你平常使用的docker命令行工具),而dockerd一般掛在systemd的進(jìn)程下(如果有老哥頭鐵從命令行運(yùn)行dockerd那么當(dāng)我沒(méi)說(shuō),這樣也能讀到代理的環(huán)境變量)。如果要為dockerd添加代理的話(huà)可以參考如下操作

        # 修改為你自己的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

        到這一步只是為鏡像的拖取操作添加了代理,但是在開(kāi)發(fā)環(huán)境中資源的拖取問(wèn)題還是沒(méi)有辦法解決,這點(diǎn)我們稍微修改Makefile可以處理,參考如下操作

        1. 在Makefile文件頭部增加"include .env"
        2. Makefile同目錄創(chuàng)建.env文件并寫(xiě)入你的環(huán)境變量,參考如下
        BUILD_PROXY := --build-arg "http_proxy=http://192.168.144.1:10811" --build-arg "https_proxy=http://192.168.144.1:10811"
        3. 追加參數(shù)到指定的構(gòu)建參數(shù)變量,修改Makefile, 在BUILD_OPTS := *后面的一行增加
        BUILD_OPTS += $(BUILD_PROXY)
        

        開(kāi)始編譯

        ntpdate ntp1.aliyun.com # 同步時(shí)間,如果時(shí)間誤差過(guò)大會(huì)導(dǎo)致部分源依賴(lài)獲取失效,非必須
        make BIND_DIR=. shell
        

        構(gòu)建過(guò)程由于或需要拖取鏡像和資源耗時(shí)一般比較長(zhǎng)(即使在網(wǎng)絡(luò)條件較好的情況下),一般要10分鐘左右。
        如果構(gòu)建成功你回進(jìn)入如下的一個(gè)容器內(nèi)終端

        root@3cede98051a6:/go/src/github.com/docker/docker# 
        

        這個(gè)便是makefile通過(guò)dockerfile為你構(gòu)建的docker-ce的編譯環(huán)境,這個(gè)環(huán)境中你開(kāi)發(fā)和調(diào)試的工具應(yīng)有盡有,如你還有特殊的需求可以通過(guò)修改dockerfile重新構(gòu)建(別擔(dān)心,由于之前構(gòu)建的緩存文件,你第二次構(gòu)建只會(huì)構(gòu)建新增部分,不會(huì)花太多的時(shí)間),項(xiàng)目的根目錄掛載到主機(jī)目錄,所以你在此路徑下構(gòu)建出的二進(jìn)制文件也會(huì)寫(xiě)入到宿主機(jī)。
        接下來(lái)我們開(kāi)始編譯

        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# 
        

        安裝測(cè)試

        # 還是在容器內(nèi)
        make install
        

        啟動(dòng)測(cè)試

        /usr/local/bin/dockerd -D
        

        你也可以在容器內(nèi)下載鏡像,啟動(dòng)容器

        # 在宿主機(jī)另開(kāi)一個(gè)終端,并進(jìn)入容器
        [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#
        # 下載鏡像,啟動(dòng)容器
        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
        

        使用Delve調(diào)試

        都從源碼構(gòu)建了,總不可能單純奔著純安裝去的吧,多少是想對(duì)docker做點(diǎn)簡(jiǎn)單的定制化,這里就可以使用Delve來(lái)調(diào)試我們編譯出來(lái)的dockerd二進(jìn)制程序了。

        dlv /usr/local/bin/dockerd -- -D
        

        哎,咋報(bào)錯(cuò)了

        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
        

        這個(gè)報(bào)錯(cuò)是由于默認(rèn)的hack/make.sh中的這一段(我所編譯的版本在105)

        IAMSTATIC='true'
        if [ -z "$DOCKER_DEBUG" ]; then
        	LDFLAGS='-w'
        fi
        

        在編譯時(shí)加了-w參數(shù)刪除了調(diào)試信息,所以在編譯時(shí)添加參數(shù)或者寫(xiě)到環(huán)境變量里就行啦

        # 在容器創(chuàng)建時(shí)添加debug參數(shù)
        DOCKER_DEBUG=1 make BIND_DIR=. shell
        
        # 在編譯時(shí)添加參數(shù)
        DOCKER_DEBUG=1 hack/make.sh binary
        

        以上兩種方法都可以,之后就可以使用dlv來(lái)調(diào)試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 這個(gè)參數(shù),如果你是使用開(kāi)發(fā)中的分支,docker的開(kāi)發(fā)者可能忽略了更新dlv的版本,導(dǎo)致dlv的版本有那么一絲落后于go的版本。如果你要解決這個(gè)問(wèn)題可以通過(guò)修改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調(diào)試工具如何使用就不在本文里細(xì)述,可通過(guò)help的方式知道如何使用,類(lèi)似于gdb,上手十分的簡(jiǎn)單。

        參考

        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

        分享到:
        標(biāo)簽:分析 服務(wù)器 構(gòu)建 源碼 過(guò)程
        用戶(hù)無(wú)頭像

        網(wǎng)友整理

        注冊(cè)時(shí)間:

        網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

        • 51998

          網(wǎng)站

        • 12

          小程序

        • 1030137

          文章

        • 747

          會(huì)員

        趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
        最新入駐小程序

        數(shù)獨(dú)大挑戰(zhàn)2018-06-03

        數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

        答題星2018-06-03

        您可以通過(guò)答題星輕松地創(chuàng)建試卷

        全階人生考試2018-06-03

        各種考試題,題庫(kù),初中,高中,大學(xué)四六

        運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

        記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

        每日養(yǎng)生app2018-06-03

        每日養(yǎng)生,天天健康

        體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

        通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定