2017年6月21日 星期三

use docker to build android 6

在ubuntu 14.04或16.04環境下使用docker編譯android 6

首先安裝docker

sudo apt-get install apt-transport-https
sudo apt-get install ca-certificates
sudo apt-get install curl
sudo apt-get install software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo apt-key fingerprint 0EBFCD88
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
sudo apt-get install docker-ce

建立Dockerfile

建立名為"Dockerfile"的檔案其內容如下
FROM ubuntu:14.04

ENV DEBIAN_FRONTEND noninteractive
ENV USER root

RUN apt-get update

# install required packages reference android source web
RUN apt-get install -qq -y git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev
RUN apt-get install -qq -y gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip

# install jdk for build android 6
RUN apt-get install -qq -y openjdk-7-jdk

# install required tools for make
RUN apt-get install -qq -y python bc

# install other tools for user
RUN apt-get install -qq -y vim ctags cscope tig

建立docker image

由Dockerfiler建立image, -t 指定image的名稱與tag, 注意最後有"."
sudo docker build -t "build_android:v1" .
-t 參數指定image名稱與版本, build_android為image的名稱, v1為版本

查看image id

sudo docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
build_android       v1                  bdd8752c9904        3 hours ago         724 MB
ubuntu              14.04               4a2820e686c4        7 hours ago         188 MB
記住image id "bdd8752c9904"

啟動容器container

由image啟動新的容器進入bush, 並掛載/host_dir目錄至容器的/client_dir位置
sudo docker run -v /host_dir:/client_dir -it image_id /bin/bash
image_id 為剛剛查看的bdd8752c9904
啟動成功後即進入容器以root身份在bash底下工作

編譯android

在容器環境中/client_dir與host的/host_dir是共通的, 在/host_dir若有存放android source code的目錄例如/host_dir/android_source, 則可在容器中進入/client_dir/android_source目錄進行build android的動作

終止容器

只要在bash底下執行exit即終止
exit
當終止容器回到host時, 可到/host_dir/android_source中取出編譯完android後產出的檔案

進入容器

容器終止後並未消失, 可再次進入, 首先查看終止中的容器
sudo docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                         PORTS               NAMES
f6ada6575153        bdd8752c9904        "/bin/bash"         3 hours ago         Exited (0) About an hour ago                       elated_panini
記住container id "f6ada6575153"

進入容器f6ada6575153
sudo docker start -ia f6ada6575153
這樣就可以再次進入容器編譯android了

刪除容器

要刪除的容器須在終止狀態下
sudo docker rm container_id

刪除image

要刪除的image必須沒有被容器或其它image使用
sudo docker rm image_id


image相關指令

sudo docker build -t "NAME:TAG" .    由Dockerfiler建立image, -t 指定image的名稱與tag, 注意最後有"." 
sudo docker images           列出所有images
sudo docker rmi              刪除image
sudo docker save -o ubuntu_14.04.tar ubuntu:14.04    將映像檔從本地倉庫存成檔案
sudo docker load --input ubuntu_14.04.tar            將映像檔檔案載入至本地倉庫

container相關指令

sudo docker container ls     列出執行中的容器
sudo docker ps -a            列出已終止的容器
sudo docker start -ia container_id  啟動終止的容器
sudo docker run -v /host_dir:/client_dir -it image_id /bin/bash   由image啟動新的容器進入bush,並掛載/host_dir目錄至容器的/client_dir位置

沒有留言:

張貼留言