Docker容器搭建android编译环境的实践记录

目录
  • 1 部署容器
    • 1.1 手动部署
      • 1.1.1 配置docker
      • 1.1.2 启动容器
      • 1.1.3 配置环境
    • 1.2 Dockerfile
  • 2 镜像管理
  • 3 容器管理
    • 3.1 每个用户各用容器
      • 3.1.1 服务端配置
      • 3.1.2 客户端使用
    • 3.2 多用户共用容器
      • 3.2.1 服务端配置
      • 3.2.2 客户端使用

1 部署容器

1.1 手动部署

1.1.1 配置docker

# 安装之前必须修改docker路径,防止docker空间增长暴满。
sudo ln -s /opt/docker /var/lib/docker
# 安装docker.io
sudo apt-get install docker.io
# 设置docker命令免root
sudo usermod -aG docker ${whoami}
sudo shutdown -r now

1.1.2 启动容器

# 启动容器ubuntu18.04。android编译环境不宜超过ubuntu18版本,否则问题多多。
# -v 映射容器内地址/opt/aosp/到主机/opt/aosp
# -p 映射容器内ssh端口22到主机2202端口
# -u $(id -u ${USER}):$(id -g ${USER})映射主机用户ID到容器中, 默认为root。
# -d 后台启动容器
docker run -td --name aosp  -v /opt/aosp:/opt/aosp -p 2200:22 ubuntu:18.04
# 查看容器
docker ps -a
# 进入容器
docker exec -it aosp /bin/bash

1.1.3 配置环境

进入容器之后,我们就可以安装AOSP的编译环境。不同的AOSP版本安装库可能会有差异,具体可以参考AOSP官网。这里以Android7.1为例。

可以直接将这个脚本放在宿主机的/opt/aosp中,在容器内直接执行:

#!/bin/bash
# 切换容器内apt源
mv /etc/apt/sources.list /etc/apt/sources.list.raw
echo  -e  "deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse" >> /etc/apt/sources.list
apt-get update
# 安装编译库。需要根据不同的linux系统版本和android版本来配置。详情参看官网。
apt-get install -y -qq --no-install-recommends sudoers vim ssh telnet git repo openjdk-8-jdk
apt-get install -y -qq --no-install-recommends zip unzip flex bc bison rsync gperf gnupg m4 ccache curl genisoimage xsltproc tofrodos
apt-get install -y -qq --no-install-recommends build-essential gcc-multilib g++-multilib
apt-get install -y -qq --no-install-recommends libc6-dev-i386 lib32z-dev lib32ncurses5-dev
apt-get install -y -qq --no-install-recommends dpkg-dev x11proto-core-dev zlib1g-dev
apt-get install -y -qq --no-install-recommends libsdl1.2-dev libx11-dev  libgl1-mesa-dev libgl1-mesa-dev libxml2-utils libssl-dev
# 清除安装缓存,减少容器大小。
apt-get clean
rm -rf /var/lib/apt/lists/*
# 配置环境路径
echo -e "# ++++++++++
# export USER=root
export REPO_URL=https://mirrors.tuna.tsinghua.edu.cn/git/git-repo
# JAVA PATH
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export JRE_HOME=\${JAVA_HOME}/jre
export CLASSPATH=\${JAVA_HOME}/lib:\${JRE_HOME}/lib
export PATH=\${PATH}:\${JAVA_HOME}/bin" >>  /root/.bashrc
source .bashrc
#
# 配置ssh服务。可以管理员自己来手动操作配置。
# 最好把ssh服务配置为开机启动,这样每次容器启动就可以直接使用ssh服务。
#
# ssh禁止root登陆
# sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config
# sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/g' /etc/ssh/sshd_config
# root password is MUST, 这里设置一个默认密码
# echo 'root:1234' | chpasswd
# 启动ssh服务
# service ssh restart

折叠

1.2 Dockerfile

这里有一个参考脚本,根据android官网提供的脚本修改。

FROM ubuntu:18.04
# 根据官网提供的需要安装的编译库
RUN apt-get update \
    && apt-get install -y -qq --no-install-recommends zip unzip flex bc rsync bison gperf gnupg m4 ccache curl genisoimage xsltproc tofrodos \
       build-essential gcc-multilib g++-multilib libc6-dev-i386 lib32z-dev lib32ncurses5-dev kmod dpkg-dev x11proto-core-dev zlib1g-dev \
       libsdl1.2-dev libx11-dev  libgl1-mesa-dev libgl1-mesa-dev libxml2-utils libssl-dev
# 设置几个环境变量
# 一定要设置USER这个变量,不然AOSP的soong编译报错
RUN apt-get install -y -qq --no-install-recommends vim git repo openjdk-8-jdk \
    && echo "# ++++++++++++++++++++++++++++++++++++++++" >> /etc/profile \
    && echo "export USER=root" >> /etc/profile \
    && echo "export REPO_URL=https://mirrors.tuna.tsinghua.edu.cn/git/git-repo" >> /etc/profile \
    && echo "export HEXAGON_ROOT=/opt/sdkits/qcom/hexagon" >> /etc/profile \
    && echo "# JAVA PATH" >> /etc/profile \
    && echo "export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64" >> /etc/profile \
    && echo "export JRE_HOME=\${JAVA_HOME}/jre" >> /etc/profile \
    && echo "export CLASSPATH=\${JAVA_HOME}/lib:\${JRE_HOME}/lib" >> /etc/profile \
    && echo "export PATH=\${PATH}:\${JAVA_HOME}/bin" >> /etc/profile
# 设置root默认密码,配置ssh-server
RUN apt-get install openssh-server \
    && echo 'root:root1234' | chpasswd \
    && sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config \
    && sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/g' /etc/ssh/sshd_config
EXPOSE 22
VOLUME ["/opt/externs", "/opt/sdkits"]
# 入口函数。用户自定。
ENTRYPOINT ["starts.sh"]

Dockerfile编译运行的时间太长了,我一般不用这个操作。

2 镜像管理

我们需要将这个镜像提交成标准镜像,作为基础环境公用。

docker commit -a "newuser" -m "aosp imange based on ubuntu18.04" <CONTAINER_ID> xxx/aosp:v1.0 

如有必要,还需要导出镜像文件备用:

## 保存镜像
docker save -o ~/Download/aospbase-v1.0.tar xxx/aospbase:v1.0
## 加载镜像
docker load -i ~/Download/aospbase-v1.o.tar

3 容器管理

在实际的团队开发管理中,我们需要考虑分配容器给团队成员使用。分配容器的方式有两种:

  • 每个用户分配一个容器,容器通过端口号来区分。
  • 所有用户共用一个基础容器,按照用户名来使用。

不建议使用IP地址的方式是因为需要固定容器IP地址,这在企业局域网内限制比较多,很多非技术层面的问题比较复杂。

3.1 每个用户各用容器

3.1.1 服务端配置

每个用户需要配置一个独立的容器。每个容器以端口号(而不是以IP地址)来进行区分。

docker run -td --name YOURNAME -v /opt/dockerdirs/YOURNAME:/opt/aosp -p 2221:22 xxx/aospbase:v1 bin/bash

需要配置的几个参数:
1、容器名称:--name YOURNAME,修改成:用户名称-镜像-id
2、host挂载目录:/opt/dockerdirs/YOURNAME, 按照用户名归类,防止目录混乱。
3、ssh端口:2201:22, 建议从2220 ~ 2299进行分配。

3.1.2 客户端使用

用户登陆容器:

ssh -p 2201 root@192.168.1.1

默认用户: root
默认密码: root1234

使用说明:
1、务必把资料信息保存在/opt/externs目录中,docker崩溃之后文件不会丢失。
2、不要停止掉ssh服务,否则无法进入docker容器。
3、容器默认没有UI界面和桌面程序。 如果需要安装UI界面和工具,请自己安装X11或者ubuntu-desktop。可以自己在容器内进行安装操作。
4、不要把编译服务器用来存储文件备份等。容器一旦超过一定大小,会被管理员清空删除。

3.2 多用户共用容器

多个用户共用同一个容器,容器就需要配置多用户。每个容器的root用户是不能提供给用户使用的。

3.2.1 服务端配置

# 给root设置密码,不让其他人访问。
passwd root
# adduser新增用户及密码1234,并创建/home/user目录
# useradd不会创建/home/user目录
adduser newuser
Adding user `newuser' ...
Adding new group `newuser' (1000) ...
Adding new user `newuser' (1000) with group `newuser' ...
Creating home directory `/home/newuser' ...
Copying files from `/etc/skel' ...
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Changing the user information for newuser
Enter the new value, or press ENTER for the default
	Full Name []:
	Room Number []:
	Work Phone []:
	Home Phone []:
	Other []:
Is the information correct? [Y/n]
# 修改/etc/sudoers增加sudo权限
newuser ALL=(ALL:ALL) ALL

3.2.2 客户端使用

用户登陆容器,使用的是公共端口,但是用户名各不相同:

ssh -p 2201 newuser@192.168.1.1

到此这篇关于Docker容器搭建android编译环境的文章就介绍到这了,更多相关Docker android编译环境内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 使用Docker来加速构建Android应用的基本部署思路解析

    意义 极大的缩短安卓开发到测试到产品到渠道的距离. 给安卓程序员减轻负担. Google做的环境已经特别到位了,放到docker里面明显不会有多大的坑(误,逃). Dockerfile https://github.com/lijianying10/FixLinux/blob/master/dockerfiles/androidautobuild/Dockerfile 团队协作的故事 在敏捷开发的站立会议上,我作为一个后端程序员发现安卓程序员发布的时间大概是半个小时左右的时间,我觉得时间太长了应

  • Docker 实现浏览器里开发Android应用的功能

    在浏览器里开发Android应用          这里需要用到Docker的知识, Che 发布后对Android应用开发多了一个工具,这里就对如何实现该功能就行详细介绍: Eclipse Che 最近Che发布了正式版,那我就介绍下在Che上开发Android吧-- 使用Che需要懂得一些Docker的知识,只需要一点点即可,因为Che是基于Docker的,所以了解Docker有助于理解Che的工作方式. 不废话,教程只有四步,开始. 第一步:部署docker服务器 我选择的是digital

  • Docker容器搭建android编译环境的实践记录

    目录 1 部署容器 1.1 手动部署 1.1.1 配置docker 1.1.2 启动容器 1.1.3 配置环境 1.2 Dockerfile 2 镜像管理 3 容器管理 3.1 每个用户各用容器 3.1.1 服务端配置 3.1.2 客户端使用 3.2 多用户共用容器 3.2.1 服务端配置 3.2.2 客户端使用 1 部署容器 1.1 手动部署 1.1.1 配置docker # 安装之前必须修改docker路径,防止docker空间增长暴满. sudo ln -s /opt/docker /va

  • Docker容器搭建运行python的深度学习环境的方法

    任务管理器中查看虚拟化,已启用 若禁用,重启电脑,到Bios中开启 安装Docker Desktop及开启WSL功能. 打开 powershell 创建镜像 docker run --rm -it quay.io/azavea/raster-vision:pytorch-latest /bin/bash docker images 依据镜像id创建容器 docker create -it --name [name] [镜像id] docker start [name] 进入容器 docker e

  • 一文教你如何通过 Docker 快速搭建各种测试环境

    今天给大家分享的主题是,如何通过 Docker 快速搭建各种测试环境,本文列举的,也是作者在工作中经常用到的,其中包括 MySQL.Redis.Elasticsearch.MongoDB 安装步骤,通过几行命令秒秒钟就能轻松搞定. 友情提示:搭建之前,你需要先安装 Docker 哟,本文基于您已经安装好 Docker 的基础上!如果你想和更多Docker技术专家交流,可以加我微信liyingjiese,备注『加群』.群里每周都有全球各大公司的最佳实践以及行业最新动态. 废话少说,正文开始! 一.

  • 用Eclipse搭建Android开发环境并创建第一个Android项目(eclipse+android sdk)

    一.搭建Android开发环境 准备工作:下载Eclipse.JDK.Android SDK.ADT插件 1.安装和配置JAVA开发环境:  ①把准备好的Eclipse和JDK安装到本机上(最好安装在全英文路径下),并给JDK配置环境变量,其中JDK的变量值为JDK安装路径的根目录,如我的为:D:\Program Files\Java\jdk1.7.0_02: ②打开命令提示符(cmd),输入java -version命令,显示如下图则说明JAVA环境变量已经配置好了. 2.安装ADT插件: ①

  • 使用Docker容器搭建MySql主从复制

    1. 编写主MySQL的Docker文件 新建文件夹,命名为MySQL-master-v1.在文件夹mysql-master-v1中新建文件Dockerfile和master.cnf.笔者推荐使用的编辑器是Visual Studio Code.利用编辑器将这两个文件的编码设置成UTF-8.因为本文介绍安装到Linux系统下,所以笔者建议读者把换行符设置成LF,以兼顾Linux操作系统.按照如下内容编写这两个文件. Dockerfile FROM mysql:5.7 # set timezone

  • CentOS Linux系统搭建Android开发环境详细介绍

    CentOS Linux系统搭建Android开发环境详细介绍 很多人都是在Windows下进行Android开发,但是对于Linux,Android开发环境方面的资料比较少,今天在网上找到了一位网友分享的在CentOS Linux系统中搭建Android开发环境的过程.下面就是其介绍的配置的详细步骤原文: 由于我最近每天使用的是CentOS 5.5,所以选择CentOS5.5作为我的开发环境. 主要包括以下步骤: 1.JDK安装 2.Eclipse安装 3.ADT安装 4.Android SD

  • 利用adt-bundle轻松搭建Android开发环境与Hello world(Linux)

    本文与<利用adt-bundle轻松搭建Android开发环境与Hello world(Windows) >是姊妹篇,只是这次操作换成了Linux .拿Ubuntu做例子.还是与Windows一样.由于JDK+Eclipse+ADT+SDK或者JDK+Android Studio在安装的过程中非得联网不可.因此也选用了JDK1.7+解压即用的官方绿色版Android开发环境adt-bundle20131030去安装. 一.基本准备 首先还是与<Debian配置JDK1.7 与Linux

  • 利用adt-bundle轻松搭建Android开发环境与Hello world(Windows)

    Android开发环境有三种方式,分别是JDK+SDK+Eclipse+ADT.JDK+adt-bundle与JDK+Android Studio. 不要使用JDK+SDK+Eclipse+ADT这种方式,不是说什么太复杂的,是因为郭嘉的网络你懂的,打开SDK工具之后就根本就下载不了.Android Studio也是不行的,说好集合大量打开环境.安装的时候却还是需要联网. 建议使用JDK+adt-bundle这种方式来搭建Android开发环境.同时adt-bundle认准20131030版本.

  • PyCharm使用Docker镜像搭建Python开发环境

    在我们平时使用PyCharm的过程中,一般都是连接本地的Python环境进行开发,但是如果是离线的环境呢?这样就不好搭建Python开发环境,因为第三方模块的依赖复杂,不好通过离线安装包的方式安装.本文将介绍如何利用PyCharm来连接Docker镜像,从而搭建Python开发环境. 首先,我们需要准备一下工具: PyCharm专业版 Docker 我们用一个示例项目来演示在PyCharm中如何利用Docker镜像搭建Python开发环境.项目的截图如下: 注意到,在该项目中还没有设置Pytho

  • 教你在docker 中搭建 PHP8 + Apache 环境的过程

    目录 镜像介绍 具体操作步骤 PHP 安装扩展 以安装 pdo-mysql 扩展为例 搭建 PHP 站点 镜像介绍 PHP8 + Apache 的官方仓库: https://hub.docker.com/_/php?tab=tags 在该仓库如下位置搜索 Apache 相关的镜像 我下载的是下面这个, PHP 版本是 8.0.6 具体操作步骤 下载镜像: docker pull php:apache-buster, 下载下来后使用 docker images 可以查看到如下信息: 创建容器: d

随机推荐