app编译打包部署手册

app编译打包部署手册
1、背景及概述
本手册介绍用户如何进行容器 app 应用开发,打包,运行。

2、开发步骤
按照下列操作步骤进行二次开发程序的开发与使用:
①二开环搭建,使用 car_kit_pack.tar 镜像创建 docker 容器
②声明环境变量
③交叉编译应用的执行文件和 library
④交叉打包镜像
⑤应用安装部署验证
3、二开环境搭建
3.1 Docker安装
注:目前在编译服务器(10.148.151.67)上已经安装,若在该服务器上开发编译打包可略过本章节。
用户首先确保二开的宿主机上安装了 docker 工具,若没有,请先自行安装好 docker 工具
以 ubuntu18.04 为例:
a) 更新 apt 包索引:
$ apt-get update
b) 安装依赖包:
$ apt-get install -y apt-transport-https ca-certificates curl software-properties-common
c) 添加 Docker 官方的 GPG 密钥:
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add –
d) 设置 stable 存储库:
$ add-apt-repository “deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable”
e) 重新更新 apt 包索引:
$ apt-get update
f) 安装最新版本的 Docker CE:
$ apt-get install -y docker
3.2 二开容器安装
使用鼎桥提供的 docker 镜像包 car_kit_pack.tar,见附件。
a) 导入本地镜像:

	$ docker image load -i car_kit_pack.tar

b) 查看镜像:
$ docker images

c) 创建并进入容器
采用docker in docker的技术将主机的docker.sock挂载到容器里,实现共享主机的docker.sock。找到对应的镜像,使用该镜像 ID 创建容器:
$ docker run -it
–rm
–name docker_test
–user root
-v /var/run/docker.sock:/var/run/docker.sock
-v /usr/bin/docker:/usr/bin/docker
7ee6ea1438db bash

3.3 其他 Docker 常用命令
a) 删除容器
$ sudo docker rm <container_name>
b) 查询容器
$ docker ps -a
c) 查询镜像
$ docker image ls
d) 删除镜像
$ docker rmi <image_name>
e) 文件拷贝
$ docker cp <container_name>:
or
$ docker cp <container_name>:
f) 执行容器命令,如 bash
$ docker exec -it <container_name> /bin/bash
g) 容器操作(启动/重启/停止)
$ docker start/restart/stop <container_name>
4、APP开发编译
本章介绍用户如何使用二次开发环境进行容器app 应用开发。
提示:命令行指令里面的容器id和镜像id要替换成自己的。
4.1 二开环境搭建
按照第3章中 docker 镜像的安装办法搭建好 eCube 的二次开发环境。
4.2 环境变量
进入 docker 二开容器后,使用命令来声明需要的环境变量:
$ source /etc/profile

检查环境变量是否设置成功:
$ aarch64
使用 Tab 键检查是否能找到交叉编译工具:

4.3 编译
文件准备:用户准备好自己需要编译的文件后,可以使用两种办法在容器内使用。
①使用 docker cp <container_name>:将文件拷贝到容器内指定位置。②将需要编译的文件放到某个本地目录,加载镜像时使用 –v 将该本地目录挂载到容器内部,如
$ docker run –it –v : --name=<container_name>
文件编译:用户可以自行编译,或者套用容器提供的模板。

  1. 客户使用 aarch64-none-linux-XXX 等工具自行编译自己的 c 文件,生成对应的执行文件或者Library。
  2. cd 到/usr1/app_source,是一个“hello world”的示例,下面 printlib 和 printtest 两个目录。分别是一个动态库和执行文件的示例:

2.1 到 printlib 下执行 make,可生成 libprinttest.so 的库,该库提供了一个打印函数。

2.2 到 printtest 下执行 make,会链接上述动态库生成可执行文件 printtest,运行起来会周期性打印“hello world”。

2.3 至此,该范例需要的两个文件编译完成。
4.4 文件打包成镜像包
打包方法分为两种,一种是用buildx交叉打包,另一种是自带build工具交叉打包。本项目采用自带build工具打包,buildx交叉打包较复杂,作为了解。
1、拷贝文件
将编译好的app和依赖的库文件拷贝到二开环境对应的目录下。
a)拷贝依赖库文件
$ cp /usr1/app_source/printlib/libprinttest.so /usr1/pack/lib/
b)拷贝可执行文件
$ cp /usr1/app_source/printtest/printtest /usr1/pack/bin/

补充:若依赖库和可执行文件已在其他环境编译,则可通过宿主机和容器之间的拷贝进行文件的传输。
	$ docker cp /home/he/lib/ 256d68515ad8:/usr1/pack
	$ docker cp /home/he/printtest 256d68515ad8:/usr1/pack/bin
2、构建镜像文件
将可执行文件和相关依赖库进行打包。操作包括导入ubuntu-arm64.tar镜像包和构建镜像
	$ docker load -i ubuntu-arm64.tar
	$ chmod 777 -R bin
	$ chmod 777 -R lib	
	$ docker build -t car_ubuntu:v1.0.0 .

最后查看构建镜像是否成功:
	$ docker images

3、镜像打包导出
将构建的镜像打包成tar包导出。
a) 打包
	$ docker save -o car_app_pack.tar 0dae162fcd10
	$ chmod 777 car_app_pack.tar

b) 镜像包导出
将打的tar包导出到宿主机以供后续使用。
	$ docker cp 256d68515ad8:/usr1/pack/car_app_pack.tar /home/

4.5 应用安装部署
打包好的app镜像需要进行容器化部署。
1. 导入镜像
将打包生成的镜像包car_app_pack.tar拷贝到板子上,然后镜像镜像导入。
$ docker image load -i car_app_pack.tar

2. 容器化部署
利用导入的镜像,生成应用容器。
	$ docker run -it -d xxxxx 

3. 校验是否部署成功
a) 进入容器使用top指令查看printtest进程是否被拉起。
	$ docker exec -it <container_id> bash
	$ top

b) 使用docker logs <container_id>查看容器日志打印信息,是否有标准输出的打印。

5、补充(选读)
注:该部分为buildx工具交叉打包方法,作为了解。
注:C3一楼1S-68电脑已经安装好这节所需软件。若在新电脑上则按本节安装配置。
由于跨架构打包需要去外网拉取基础镜像,故需要准备一台可以连接外网的电脑(C3一楼1S-68),linux下安装docker和buildx工具。或者windows上可直接安装Docker Desktop(Docker Desktop已经包含了Docker Buildx,无需额外安装,可通过命令docker buildx version 确认其是否安装成功。)。
5.1 安装buildx工具
docker安装参考3.1节,本节主要介绍linux下安装buildx工具:

  1. 首先查看是否已经开启实验室特性,如下图所示,如果都为true,说明Client和Server都已经开启完毕,跳过此小节即可。

  2. docker客户端开启实验室特性。在客户端的配置文件/.docker/config.json中加入如下配置项,如果/.docker/config.json文件不存在,则创建该文件。
    $ cat ~/.docker/config.json
    {
    “experimental”: “enabled”
    }

确认实验室性能开启。

$ docker version

3. docker服务端开启实验室特性。在配置文件/etc/docker/daemon.json中加入如下配置项即可,如果/etc/docker/daemon.json文件不存在,则创建该文件。
cat /etc/docker/daemon.json

{
“experimental”: true
}

systemctl daemon-reload
systemctl restart docker

确认实验室性能开启。

docker version

  1. 下载机器对应的二进制安装包https://github.com/docker/buildx/releases/tag/v0.8.2

  2. 将其拷贝至$HOME/.docker/cli-plugins
    $ mkdir -p ~/.docker/cli-plugins
    $ mv buildx-v0.8.2.linux-xxx ~/.docker/cli-plugins/docker-buildx
    $ chmod +x ~/.docker/cli-plugins/docker-buildx

  3. 确认安装成功
    $ docker buildx version
    $ docker buildx ls
    5.2 安装模拟器
    安装模拟器的主要作用是让buildx支持跨CPU架构编译。

    1. 首先查看是否已经安装模拟器

如果Platforms列只有一个本机架构,则需要继续执行下面步骤;如果已经包含了多种平台,且包含你想要的平台,则你无需再安装。

2. 模拟器对饮的仓库名称是:tonistiigi/binfmt:latest 安装方法是:
	$ docker run --privileged --rm tonistiigi/binfmt --install all
3. 验证模拟器是否安装成功

4. 检查aarch64是否安装成功,如果你是amd机器,需要验证arm模拟器是否安装成功,则执行如下命令,输出结果包含enable即可

5.3 打包

  1. 将二开环境编译生成的可执行文件和.so文件拷贝到联网主机上。

    其中Dockerfile内容为:
    FROM ubuntu
    ADD libprinttest.so /usr/lib
    ADD printtest /
    CMD [“/printtest”]
    2. 跨架构构建镜像:
    $ docker buildx build --platform linux/arm64 -t printtest:v1.0 .

    1. 将生成的镜像打包
      $ docker save b52fb9ec2ccc -o my_img.tar
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值