回覆列表
  • 1 # 陽光魯寧

    本文根據docker官方給出的docker程式碼編譯環境搭建指南做更深入的分析。官方給出的指導比較簡單,但是由於國內的網路問題經常會編譯失敗,瞭解了編譯步驟後,也可以結合自身遇到的網路問題進行“規避”。

    docker的編譯環境實際上是建立一個docker容器,在容器中對程式碼進行編譯。 如果想快速的檢視編譯環境搭建指導,而不關注環境搭建的機制和細節,可以直接跳到最後一章“總結”。

    前提

    機器上已經安裝了docker,因為編譯環境是個docker容器,所以要事先有docker(daemon),後面會建立個編譯環境容器,在容器裡面編譯程式碼。本文中使用物理機,物理機上執行著docker (daemon)。

    機器(物理機)上安裝了git 。 後續使用git下載docker原始碼

    機器(物理機)上安裝了make。

    下載ubuntu 14.04的docker映象

    下載docker原始碼

    git clone

    會把程式碼下載到當前目錄下,後面會把程式碼複製到容器中。

    編譯前分析

    官方給的編譯方法是make build 和 make binary等。下面先分析Makefile,看懂Makefile後,編譯環境的準備流程就比較清楚了。

    Makefile

    在下載的docker原始碼中可以看到它的Makefile,Makefile中比較關鍵的幾個引數:

    DOCKER_MOUNT := $(if $(BIND_DIR),-v "$(CURDIR)/$(BIND_DIR):/go/src/github.com/docker/docker/$(BIND_DIR)") DOCKER_MOUNT 表示建立容器時的mount引數。因為編譯環境是一個容器,在後續的步驟中啟動容器時使用DOCKER_MOUNT引數,會將物理機上的目錄mount給容器容器,容器中該目錄是編譯生成docker二進位制檔案的目錄。

    DOCKER_FLAGS := docker run --rm -i --privileged $(DOCKER_ENVS) $(DOCKER_MOUNT) 這是後面建立docker容器時的命令列的一部分,其中包含了前面的DOCKER_MOUNT引數。

    DOCKER_IMAGE := docker-dev$(if $(GIT_BRANCH),:$(GIT_BRANCH)) 這是docker image引數,鏡

  • 中秋節和大豐收的關聯?
  • 乾煸白菜花怎麼做好吃?