---
title: 容器部署支持
description: "使能机密容器，需要先将TEE OS升级为机密OS，升级方式可参考升级TEE OS（可选）。升级完毕后可参考如下步骤完成容器化部署。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengboostkithistory/240RC2/confidt/kunpengtrustzone_20_0062.html
sourcePath: /source/zh/kunpengboostkithistory/240RC2/confidt/kunpengtrustzone_20_0062.html
indexId: aed4b05150df6728c69b2a1b4c7102d2dd2b8bffdff59b01f1aef03637cde33f78
---
# 容器部署支持

使能机密容器，需要先将TEE OS升级为机密OS，升级方式可参考升级TEE OS（可选）。升级完毕后可参考如下步骤完成容器化部署。


1. 在服务器上安装Docker应用。

```
yum install docker
```


2. 准备CA/TA应用。
  可参考搭建TA和CA应用开发环境
  完成自己的CA/TA应用开发，本演示demo以itrustee_sdk中提供的helloworld为例。
  a. 获取源码，从gitee官网下载itrustee_sdk，libboundscheck，并将libboundscheck移动到“thirdparty/open_source/”。

```
git clone https://gitee.com/openeuler/itrustee_sdk.git
git clone https://gitee.com/openeuler/libboundscheck.git
mv libboundscheck itrustee_sdk/thirdparty/open_source/
```


  b. 准备TA应用编译资源。
    可参考调测环境TA应用开发者证书申请
    获取config和private_key.pem文件，并将这个两个文件分别移动到“signed_config/”
    和“TA_cert/”
    。

```
cd itrutee_sdk/build/signtools/
mkdir signed_config
mkdir TA_cert
cp
/path/to
/config ./signed_config/
cp
/path/to
/private_key.pem ./TA_cert/
```


  c. 编译helloworld demo的CA应用。

    1. 打开“ca_demo.c”文件。

```
cd ../../test/CA/helloworld/
vim ca_demo.c
```


    2. 按“i”键进入编辑模式，参照下图修改TA应用的UUID，增加TA路径。
    3. 按“Esc”键退出编辑模式，输入:wq!并按“Enter”键保存退出文件。
    4. 生成demo_hello应用（CA）。

```
make
```


  d. 编译helloworld demo的TA应用。

    1. 打开“manifest.txt”文件。

```
cd ../../TA/helloworld/
vim manifest.txt
```


    2. 按“i”键进入编辑模式，根据申请config时“configs.xml”中的配置，修改“manifest.txt”中对应的变量。
    3. 按“Esc”键退出编辑模式，输入:wq!并按“Enter”键保存退出文件。
    4. 生成<UUID>.sec文件（TA）。

```
make
```


3. 下载并导入openEuler镜像。

```
wget https://mirrors.huaweicloud.com/openeuler/openEuler-22.03-LTS-SP1/docker_img/aarch64/openEuler-docker.aarch64.tar.xz
docker load -i openEuler-docker.aarch64.tar.xz
```


4. 将CA/TA及其运行的依赖文件拷贝到一个目录下，用于构建镜像。

```
mkdir build && cd build
cp ../itrustee_sdk/test/CA/helloworld/demo_hello ./
cp ../itrustee_sdk/test/TA/helloworld/*.sec ./
cp /usr/lib64/libboundscheck.so ./
cp /usr/lib64/libteec.so ./
cp /usr/bin/tlogcat ./
cp /usr/bin/agentd ./
```


  镜像构建目录下的文件如下。

  应用的依赖文件可通过ldd命令查看，例如查看agentd的依赖： ldd agentd openEuler基础镜像已经包含除libboundscheck.so和libteec.so外的so库，因此只拷贝了这两个so库到镜像中，其他操作系统镜像根据实际情况拷贝缺失的库。 拷贝到容器里的ree-patch组件版本需与主机侧的版本保持一致，否则将导致容器内TEE OS功能不可用。

5. 创建Dockerfile文件。

  a. 新建文件。

```
vim Dockerfile
```


  b. 按“i”键进入编辑模式，新增如下内容。

```
FROM openeuler-22.03-lts-sp1
RUN mkdir -p /vendor/bin && mkdir -p /data
COPY *.so /usr/lib64/
COPY tlogcat agentd /usr/bin/
COPY *.sec /data/
COPY demo_hello /vendor/bin/
RUN chmod +x /vendor/bin/demo_hello
CMD /usr/bin/agentd & /vendor/bin/demo_hello
```


  c. 按“Esc”键退出编辑模式，输入:wq!并按“Enter”键保存退出文件。
6. 执行如下命令完成镜像的构建。

```
docker build -t demo_hello .
```


7. 根据镜像启动容器，并获取容器运行日志。

```
docker run -it --mount type=bind,source=/var/itrustee/teecd,target=/var/itrustee/teecd,readonly --device /dev/teelog:/dev/teelog:wr --device /dev/tc_ns_cvm:/dev/tc_ns_cvm:wr -d demo_hello
docker logs -f <container_id>
```


- 当容器中涉及TA2TA、安全存储特性使用时，必须先启动容器内的agentd，再执行CA应用。
- 若容器启动失败，可按如下步骤排查：

  1. 确定主机上teecd和tzdriver都已加载。
  2. 确定主机上/var/itrustee/teecd/teecd.sock、/dev/teelog、/dev/tc_ns_cvm文件存在。
  3. 确定镜像构建时，libteec.so和tlogcat与主机上的一致。
  4. 确定容器启动时，挂载的文件和步骤    步骤7
一样。
  5. 若容器内涉及TA2TA的动态加载或安全存储，容器内还需启动agentd守护进程。
