# 管理安全容器的生命周期

- [管理安全容器的生命周期](#管理安全容器的生命周期)
    - [启动安全容器](#启动安全容器)
    - [停止安全容器](#停止安全容器)
    - [删除安全容器](#删除安全容器)
    - [在容器中执行一条新的命令](#在容器中执行一条新的命令)


## 启动安全容器

用户可以使用docker-engine或者iSulad作为安全容器的容器引擎，两者的调用方式类似，请用户自行选择一种方式启动安全容器。

启动安全容器的操作步骤如下：

1.  确保安全容器组件已经正确安装部署。
2.  准备容器镜像。假设容器镜像为busybox，使用docker-engine和iSula容器引擎下载容器镜像的命令分别如下：

    ```
    docker pull busybox
    ```

    ```
    isula pull busybox
    ```

3.  启动一个安全容器。使用docker-engine和iSula容器引擎启动安全容器的命令分别如下：

    ```
    docker run -tid --runtime kata-runtime --network none busybox <command>
    ```

    ```
    isula run -tid --runtime kata-runtime --network none busybox <command>
    ```

    >![](public_sys-resources/icon-note.gif) **说明：**   
    >安全容器网络使用仅支持CNI网络，不支持CNM网络，不支持使用-p和--expose暴露容器端口，使用安全容器时需指定参数--net=none。  

4.  启动一个Pod
    1.  启动pause容器并根据回显获取pod的sandbox-id。使用docker-engine和iSula容器引擎启动的命令分别如下：

        ```
        docker run -tid --runtime kata-runtime --network none --annotation io.kubernetes.docker.type=podsandbox <pause-image> <command>
        ```

        ```
        isula run -tid --runtime kata-runtime --network none --annotation io.kubernetes.cri.container-type=sandbox <pause-image> <command>
        ```

          

    1.  创建业务容器并加入到这个pod中。使用docker-engine和iSula容器引擎创建的命令分别如下：

        ```
        docker run -tid --runtime kata-runtime --network none --annotation io.kubernetes.docker.type=container --annotation io.kubernetes.sandbox.id=<sandbox-id> busybox <command>
        ```

        ```
        isula run -tid --runtime kata-runtime --network none --annotation io.kubernetes.cri.container-type=container --annotation io.kubernetes.cri.sandbox-id=<sandbox-id> busybox <command>
        ```

        --annotation用于容器类型的标注，这里的docker-engine和isula提供该字段，上游社区的开源docker引擎则不提供。



## 停止安全容器

-   停止一个安全容器。

    ```
    docker stop <contaienr-id>
    ```

-   停止一个Pod。

    Pod停止需要注意顺序，pause容器与Pod生命周期相同，因此先停止业务容器后再停止pause容器。


## 删除安全容器

删除前请确保容器已经停止：

```
docker rm <container-id>
```

如果需要强制删除一个正在运行的容器，可以使用**-f**强制删除：

```
docker rm -f <container-id>
```

## 在容器中执行一条新的命令

由于pause容器仅作为占位容器，如果启动一个Pod时，请在业务容器内执行新的命令，pause容器并没有相应的指令；如果只启动一个容器时，则可以直接执行新增命令：

```
docker exec -ti <container-id> <command>
```

>![](public_sys-resources/icon-note.gif) **说明：**   
>1.  如遇到docker exec -ti进入容器的同时，另一终端执行docker restart或者docker stop命令造成exec界面卡住的情况，可使用Ctrl+P+Q退出docker exec操作界面。  
>2.  如果使用-d参数则命令在后台执行，不会打印错误信息，其退出码也不能作为命令执行是否正确的判断依据。  

