实战"/>
Linux docker(02) docker实战
该系列文章的目的旨在docker的基础学习和docker的实战应用。
0 why docker
使用docker构建编译系统并将编译系统和源代码作隔离和解耦合,那为啥要这么搞呢?
- 一方面是因为很多时候我们在本地编译代码,比如很多嵌入式Linux开发,如果不小心host系统崩溃了,要重新装一遍环境,而这个对于长年累月构建的环境 即便有参考文档,想还原也是很耗时的,而且如果文档中漏掉一些细节,这个坑就更大了。新电脑也一样,重装环境是一件好蛋疼的事情阿~。
- 另一方面是如果新人加入团队,这种大规模复杂的环境构建就要浪费掉一个人很多精力,有的少则一周,多则一个月,对于要快速推进的项目来说无疑是致命的,我们使用docker就是尽可能少做无用功,来了就可以直接作有意义的事情,大幅度提升效率。
- 当一个开发和测试、运维开始撕比的时候,经常出现的一个锅是 我们开发时候没这个bug阿,你们测试杂会出现这种鬼问题,你们环境的问题,自己搞定阿,好不容易测试也没问题了,运维出问题了,你们代码有问题,研发:你们沙比吧,自己环境的问题自己搞定阿,我们只负责代码。而docker就是同步这个运行环境的,看,代码和环境大家都一样了,事儿少了,锅也甩的少了,这就是docker的魅力。
有了上一章节:Linux docker(01) 基础操作 的基础,我们谈谈实战中是如何构建最简镜像的。
1 自己构建docker编译镜像
1.1 构建x86_64 ubuntu20.04 LTS android11编译镜像
@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.2 构建x86_64 ubuntu20.04 LTS clang14编译镜像
@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 / llvm-toolchain-focal-14 main
deb-src / llvm-toolchain-focal-14 main
执行命令集:
#安装前执行update
sudo apt update
#有时候会报key不识别的问题,直接记录key值,然后执行以下指令即可
#sudo apt-key adv --keyserver keyserver.ubuntu --recv-keys [key ID]
sudo apt-key adv --keyserver keyserver.ubuntu --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.3 构建aarch64 嵌入式debian11 clang14 编译镜像
@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 / llvm-toolchain-bullseye-14 main
deb-src / llvm-toolchain-bullseye-14 main
执行命令集:
#安装前执行update
sudo apt update
#有时候会报key不识别的问题,直接记录key值,然后执行以下指令即可
#sudo apt-key adv --keyserver keyserver.ubuntu --recv-keys [key ID]
sudo apt-key adv --keyserver keyserver.ubuntu --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压缩文件就都输出出来了。接下来就要给到测试/运维 以及其他研发组使用了。那么怎么使用呢?
2 客户/团队伙伴使用docker
所有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/xxx_a:/root/xxx --name ubuntu_desktop bdb3bdf5de72 /bin/bash
然后在web网页端输入127.0.0.1:6080即可访问desktop桌面。
进入到该docker镜像中后就可以操作仓库中的编译脚本(build.sh)和代码了,执行对应的编译脚本即可,实际上和以前直接在linux主机上的流程一致。而编译后生成的二进制文件在本机上进行相同操作即可。
更多推荐
Linux docker(02) docker实战
发布评论