Red de conocimiento informático - Conocimiento informático - Cómo compilar el código fuente de Docker

Cómo compilar el código fuente de Docker

Después de estudiar el script de compilación oficial de Docker, descubrí que la compilación local también es muy simple. Solo necesita ejecutar el siguiente comando en el directorio del código fuente de Docker:

./hack/make.sh binario

. p >

El comando anterior puede generar directamente archivos binarios de Docker, pero definitivamente no será tan sencillo. Encontrará errores al ejecutar este comando. Si se produce un error la primera vez que lo ejecuta, es posible que no se pueda encontrar la dependencia de go correspondiente. Entonces, comencemos a resolver el primer problema, que son las dependencias de go.

La forma más directa de resolver las dependencias de go es descargarlas de github u otros lugares, pero esto es problemático porque Docker depende de muchos paquetes de go y estas dependencias pueden depender de otros paquetes. A continuación se presenta un método simple y práctico, que también es la conveniencia que brinda el proyecto de gestión de idiomas go. Por ejemplo, si descubre que un paquete dependiente en un determinado directorio de Docker se informa como un error, puede hacer esto:

go get -v ./src/github.com/docker/docker/. ..

Después de ejecutar este comando, los paquetes de software que dependen de los archivos fuente en todo el directorio de Docker se descargarán automáticamente. También puede seguir este paso si descubre que otros directorios informan el mismo error. Sin embargo, debe enfatizarse que estas descargas descargarán los paquetes más recientes, por lo que si compila con el antiguo Docker, habrá problemas; si compila con el último código de Docker, no habrá problemas, porque este es el método de compilación oficial.

Los comandos anteriores se basan en el establecimiento exitoso del entorno de lenguaje go. El encuentro de go que instalé es la versión 1.3.3, utilizando el método de instalación del código fuente. Lo instalé en /export/servers/go y luego coloqué todos los directorios de código fuente del proyecto de idioma go en /export/servers/gopath. Luego, configuré las siguientes variables de entorno en el archivo .bashrc en el directorio raíz del usuario:

export GOPATH=/export/servers/gopath

export GOROOT=/export/servers/ go

exportar GOARCH=amd64

exportar GOOS=linux

Luego, el directorio de códigos de Docker es el siguiente: /export/servers/gopath/src/github .com/docker/docker. De esta manera, puede descargar los paquetes de dependencia en gopath. Después de descargar todos los paquetes dependientes según el método anterior, puede compilarlos.

A medida que continúa compilando, también encontrará el problema de que faltan paquetes de dependencia del lenguaje C. Hay tres problemas principales: (1) sqlite3; (2) device-mapper (3) btrfs.

Para el primer sqlite3, puedes usar el comando para instalar paquetes dependientes: yum install sqlite-devel.x86_64 x86_64

En el segundo caso, hay una solución en el oficial. archivo dockerfile, ejecute el siguiente comando:

git clone --no-checkout https://git.fedorahosted.org/git/lvm2.git /usr/local/ lvm2 && cd /usr/local/ lvm2 && git checkout -q v2_02_103

cd /usr/local/lvm2 && ./configure --enable-static_link && make device-mapper && make install_device-mapper

c.