该系列文章的目的旨在docker的基础学习和docker的实战应用。
使用docker构建编译系统并将编译系统和源代码作隔离和解耦合,那为啥要这么搞呢?
有了上一章节:Linux docker(01) 基础操作 的基础,我们谈谈实战中是如何构建最简镜像的。
@1 拉基础镜像
$docker pull ubuntu:20.04
@2 run镜像
通过docker images 查看IMAGE ID,这里根据需求需使用it即可:
- #docker run -it --name [docker name ] [IMAGE ID] /bin/bash
- $docker run -it --name ubuntu_android_docker ca2056b7d9a8 /bin/bash
@3 安装android源码编译相关软件
- sudo apt-get install git-core gnupg flex bison build-essential \
- zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 libncurses5 \ lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev \
- libxml2-utils xsltproc unzip fontconfig cmake make openjdk-8-dbg openjdk-8-demo \
- openjdk-8-doc openjdk-8-jdk-headless openjdk-8-jdk openjdk-8-jre-headless openjdk-8-jre-zero openjdk-8-jre openjdk-8-source android-platform-tools-base \
- android-sdk-platform-tools-common git gitk gradle
@4 输出镜像
安装软件结束后通过docker ps -a 命令找到对应的CONTAINER ID,通过命令:
- #docker export [container ID] > [mirror.tar]/[{system+ver}_{platform+ver}_build]
- $docker export 0a34bdfb87f7 > ubuntu2004_android11_build.tar
导出镜像ubuntu2004_android11_build.tar。
@1 拉基础镜像
根据需求这里有两个版本,一个是纯命令行版本,仅用户编译。如下:
$docker pull ubuntu:20.04
另一个是桌面版本:GitHub fcwu/docker-ubuntu-vnc-desktop,可用于编译和直接测试,该版本是可以使用VNC软件以及web网页直接访问的。如下:
$docker pull dorowu/ubuntu-desktop-lxde-vnc:focal
@2 run镜像
通过docker images 查看IMAGE ID,这里根据需求需使用it即可:
- #docker run -it --name [docker name ] [IMAGE ID] /bin/bash
- $docker run -it --name ubuntu_x86_64_docker 1ad81968215c /bin/bash
如果是桌面版本,需要兼顾web网页端的设置,run命令为:
$docker run -p 6080:80 -v /dev/shm:/dev/shm dorowu/ubuntu-desktop-lxde-vnc
然后在web网页端输入127.0.0.1:6080即可访问desktop桌面。
@3 安装软件
对于安装软件,命令行版和桌面版是一致的,编辑/etc/apt/source.list文件,追加以下两行内容:
- deb http://apt.llvm.org/focal/ llvm-toolchain-focal-14 main
- deb-src http://apt.llvm.org/focal/ llvm-toolchain-focal-14 main
执行命令集:
- #安装前执行update
- sudo apt update
- #有时候会报key不识别的问题,直接记录key值,然后执行以下指令即可
- #sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys [key ID]
- sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 78BD65473CB3BD13
- #install clang14 step process (order,step by step)
- # LLVM
- sudo apt-get install -y libllvm-14-ocaml-dev libllvm14 llvm-14 llvm-14-dev llvm-14-doc llvm-14-examples llvm-14-runtime
- # Clang and co
- sudo apt-get install -y clang-14 clang-tools-14 clang-14-doc libclang-common-14-dev libclang-14-dev libclang1-14 clang-format-14 python3-clang-14 clangd-14 clang-tidy-14
- # libfuzzer
- sudo apt-get install -y libfuzzer-14-dev
- # lldb
- sudo apt-get install -y lldb-14
- # lld (linker)
- sudo apt-get install -y lld-14
- # libc++
- sudo apt-get install -y libc++-14-dev libc++abi-14-dev
- # OpenMP
- sudo apt-get install -y libomp-14-dev
- # libclc
- sudo apt-get install -y libclc-14-dev
- # libunwind
- sudo apt-get install -y libunwind-14-dev
- # mlir
- sudo apt-get install -y libmlir-14-dev mlir-14-tools
构建环境结束
@4 输出镜像
安装软件结束后通过docker ps -a 命令找到对应的CONTAINER ID,通过命令:
- #docker export [container ID] > [mirror.tar]/[{system+ver}_{platform+ver}_build]
- #terminal version
- $docker export 1ad81968215c > ubuntu2004_x86_64_build.tar
- #desktop version
- $docker export 6e9f30f53bc1 > ubuntu2004_desktop_x86_64_build.tar
@1 拉镜像
$docker pull balenalib/aarch64-debian
@2 run镜像
- #docker run -it --name [docker name ] [IMAGE ID] /bin/bash
- $docker run -it --name debian_aarch64_docker 7edac6f7fa24 /bin/bash
@3 安装软件
编辑/etc/apt/source.list文件,追加以下两行内容:
- deb http://apt.llvm.org/bullseye/ llvm-toolchain-bullseye-14 main
- deb-src http://apt.llvm.org/bullseye/ llvm-toolchain-bullseye-14 main
执行命令集:
- #安装前执行update
- sudo apt update
- #有时候会报key不识别的问题,直接记录key值,然后执行以下指令即可
- #sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys [key ID]
- sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 78BD65473CB3BD13
- #install clang14 step process (order,step by step)
- # LLVM
- sudo apt-get install -y libllvm-14-ocaml-dev libllvm14 llvm-14 llvm-14-dev llvm-14-doc llvm-14-examples llvm-14-runtime
- # Clang and co
- sudo apt-get install -y clang-14 clang-tools-14 clang-14-doc libclang-common-14-dev libclang-14-dev libclang1-14 clang-format-14 python3-clang-14 clangd-14 clang-tidy-14
- # libfuzzer
- sudo apt-get install -y libfuzzer-14-dev
- # lldb
- sudo apt-get install -y lldb-14
- # lld (linker)
- sudo apt-get install -y lld-14
- # libc++
- sudo apt-get install -y libc++-14-dev libc++abi-14-dev
- # OpenMP
- sudo apt-get install -y libomp-14-dev
- # libclc
- sudo apt-get install -y libclc-14-dev
- # libunwind
- sudo apt-get install -y libunwind-14-dev
- # mlir
- sudo apt-get install -y libmlir-14-dev mlir-14-tools
构建环境结束
@4 输出镜像
安装软件结束后通过docker ps -a 命令找到对应的CONTAINER ID,通过命令:
- #docker export [container ID] > [mirror.tar]/[{system+ver}_{platform+ver}_build]
- $docker export 376b1d358c53 > Debian11_aarch64_build.tar
到这里各种docker的镜像tar压缩文件就都输出出来了。接下来就要给到测试/运维 以及其他研发组使用了。那么怎么使用呢?
所有docker,从引入到绑定数据卷使用的流程都一致,因此这里仅以Debian11_aarch64_build为例进行流程的说明。
@1 导入镜像 docker import
首先从组内服务器上下载该docker镜像/压缩文件到本地,然后进行import操作:
cat ./Debian11_aarch64_build.tar | docker import - Debian11_aarch64_build
接下来直接docker images就可以看到该镜像了,记录该IMAGE ID。
@2 绑定数据卷,并使用该镜像
运行docker run命令:
- #docker run -it -v [本地绝对路径]:[docker绝对路径] --name [docker name] [IMAGE ID] /bin/bash
- $docker run -it -v /data/repository:/root/repository --name myaarch64docker fb8066fe6a80 /bin/bash
如果是桌面版,则要考虑到web页面相关配置,命令如下:
$docker run -p 6080:80 -v /dev/shm:/dev/shm -v /data/irisview_a:/root/irisview --name ubuntu_desktop bdb3bdf5de72 /bin/bash
然后在web网页端输入127.0.0.1:6080即可访问desktop桌面。
进入到该docker镜像中后就可以操作仓库中的编译脚本(build.sh)和代码了,执行对应的编译脚本即可,实际上和以前直接在linux主机上的流程一致。而编译后生成的二进制文件在本机上进行相同操作即可。