1. 程式人生 > >[心得]利用docker做編譯庫環境總結

[心得]利用docker做編譯庫環境總結

升級gcc4.8.4,遇到的一些坑總結在這裡。

首先是要檢查docker有哪些映象:
docker images
發現我們要的那個image沒有

先清理掉之前限制的docker container:

docker rm $(docker ps -a -q)

然後是刪掉一些沒有tag的images

docker rmi $(docker images | grep "^<none>" | awk "{print $3}")

現在開始幹正事:

在目錄下準備好docker File:

FROM centos:6

然後執行

docker build -t
"docker_gcc_4_8_4"

這一步會生成一個基本的docker環境

然後登入到相應的機器上,執行:

docker run -it -v /data/tmp/:/tmp/ --name build_gcc 127.0.0.1:8000/docker_gcc_4_8_4 /bin/bash

這樣就進入了docker環境

下面是執行升級:
先備份原先gcc

#!/bin/bash
mkdir -p /data/gcc-bak
bak_list="/usr/bin/gcc /usr/lib64/libgomp.so.1.0.0 /usr/share/info/libgomp.info.gz /usr/share/info/dir /usr/bin/c++ /usr/bin/g++ /usr/share/man/man1/g++.1.gz /usr/bin/cpp /usr/share/info/cpp.info.gz /usr/share/info/cppinternals.info.gz /usr/share/locale/ /usr/share/man/man1/cpp.1.gz /usr/lib64/libstdc++.so.6"
for file in $bak_list do cp -r $file /data/gcc-bak/ done

然後是,在/etc/ld.so.conf.d/目錄下建立如下檔案

cat gmp-mpfr-mpc.conf
/usr/local/mpfr-2.4.2/lib/
/usr/local/mpc-0.8.1/lib/
/usr/local/gmp-4.3.2/lib/

接著把/tmp/lib.tar.gz解壓到/usr/local目錄下,然後執行ldconfig更新快取。
嘗試yum安裝rpm

yum install gcc-4.8.4-1.x86_64.rpm

發現缺少太多的依賴

最後忽略依賴強制更新:

/bin/rpm -ivh /data/gcc-4.8.4-1.x86_64.rpm --force --nodeps

寫了一個簡單程式,驗證沒有問題,升級完畢。

#include <stdio.h>

int main()
{
  printf("hello world\n");
  return 0;
}

在使用docker做push到docker私有倉庫時,還遇到no route to host的問題。

$ docker commit
$ docker push $REGISTRY_IP:5000/docker_gcc_4_8_4:latest

Error response from daemon: invalid registry endpoint "http://192.0.1.10:5000/v0/". HTTPS attempt: unable to ping registry endpoint https://192.0.1.10:5000/v0/
v2 ping attempt failed with error: Get https://192.0.1.10:5000/v2/: dial tcp 192.0.1.10:5000: no route to host
 v1 ping attempt failed with error: Get https://192.0.1.10:5000/v1/_ping: dial tcp 192.0.1.10:5000: no route to host. HTTP attempt: unable to ping registry endp
v2 ping attempt failed with error: Get http://192.0.1.10:5000/v2/: dial tcp 192.0.1.10:5000: no route to host
 v1 ping attempt failed with error: Get http://192.0.1.10:5000/v1/_ping: dial tcp 192.0.1.10:5000: no route to host
5000埠是docker私有云的埠
通過以下這條命令來啟動機器docker repository宿主機的5000埠:
sudo docker run -d -p 5000:5000 -v /opt/data/registry:/tmp/registry registry