Skip to content
Snippets Groups Projects
application_container.md 4.54 KiB
Newer Older
  • Learn to ignore specific revisions
  • # How to deploy application containers
    `swmodd` support deployment of application containers which support OCI image and runtime formats using CRUN.
    
    ## How to create an application container tar
    To convert an docker image to OCI application container, we need to use `skopeo` and `umoci` utilities.
    
    In below exaple [httpd](https://hub.docker.com/_/httpd) docker container is used
    - Create an empty directory in local laptop/desktop
    ```bash
    $ mkdir lcm
    $ cd lcm
    ```
    - Copy the docker image using skopeo, make sure to use correct tag as per the target architecture
    ```bash
    $ skopeo copy docker://httpd:latest oci:httpd_copy:latest
    ```
    - Unpack the downloaded image in OCI format using umoci
    ```bash
    $ sudo -i
    # cd <working_dir_path>
    # umoci unpack --image httpd_copy:latest httpd
    ```
    - Move to the directory containing config.json and rootfs and create a tar
    ```bash
    # cd httpd
    # tar cf ../httpd.tar *
    ```
    
    - Use this tar in `install_du` ubus command to deploy the application container
    
    ## Sulu application container
    An example makefile to generate sulu application container tar ball can be accessed [here](https://dev.iopsys.eu/iopsys/swmodd/-/blob/devel/examples/sulu/README.md)
    
    
    ## Local application containers with multi-arch support
    It is possible to create an multi-arch oci container and store it in Gitlab image registry, to support variety of devices and platforms.
    
    This can be done in many ways, but in this example I am using docker buildx to build multi-arch containers.
    
    ### Pre-setup
    
    1. Create a access-token with read/write access to image registry in gitlab
    2. Install buildx
    
    ```bash
    export BUILDX_VERSION="v0.10.4"
    export BUILDX_ARCH="linux-amd64"
    wget -O /usr/bin/docker-buildx https://github.com/docker/buildx/releases/download/${BUILDX_VERSION}/buildx-${BUILDX_VERSION}.${BUILDX_ARCH}
    ```
    
    ### Build
    To build a multi-arch oci container and push to Gitlab image registry, run following commands, sulu example container used in this example:
    
    ```bash
    $ docker-buildx create --use
    $ cd examples/sulu
    $ make extract
    $ docker-buildx build --provenance=false --platform linux/386,linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64/v8 --tag dev.iopsys.eu:5050/lcm/swmodd/sulu:v2.1.2 --push .
    ```
    
    Above commands creates sulu multi-arch containers and push it to Gitlab [image registry](https://dev.iopsys.eu/lcm/swmodd/container_registry/).
    
    ### Verify
    Image details can be verified with docker manifest command:
    
    ```bash
    vdutta@SW019:~$ docker manifest inspect dev.iopsys.eu:5050/lcm/swmodd/sulu
    {
       "schemaVersion": 2,
       "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json",
       "manifests": [
          {
             "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
             "size": 1871,
             "digest": "sha256:5d362624ae3d27ecea7486a6b8f6a103b7d52543574baa483dd9034402727eb5",
             "platform": {
                "architecture": "386",
                "os": "linux"
             }
          },
          {
             "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
             "size": 1871,
             "digest": "sha256:db776d064d0763874bca5f8c4a5f396e339a901350cbcc8714c5e19c3adcefc9",
             "platform": {
                "architecture": "amd64",
                "os": "linux"
             }
          },
          {
             "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
             "size": 1871,
             "digest": "sha256:0323e482ca40f631a46993736b65459554149ac1586f04042cf61e738236bc64",
             "platform": {
                "architecture": "arm",
                "os": "linux",
                "variant": "v5"
             }
          },
          {
             "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
             "size": 1871,
             "digest": "sha256:63d6bcea175828b4a8034b874948e774e40eea8f71657c6e0d7a4d5881662db8",
             "platform": {
                "architecture": "arm",
                "os": "linux",
                "variant": "v6"
             }
          },
          {
             "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
             "size": 1871,
             "digest": "sha256:29152f374de66400c489413c2fcddfd26b8edad4c048efea57b0c17f07aa05ed",
             "platform": {
                "architecture": "arm",
                "os": "linux",
                "variant": "v7"
             }
          }
       ]
    }
    vdutta@SW019:~$
    ```
    
    Above output provides the sha1 hash per architechture, to use a specific image in device, it can be used with its sha checksum hash, like below
    
    ```bash
    obuspa -c operate "Device.SoftwareModules.InstallDU(URL=docker://dev.iopsys.eu:5050/lcm/swmodd/sulu@sha256:0323e482ca40f631a46993736b65459554149ac1586f04042cf61e738236bc64)"
    ```
    
    This installs sulu for arm/v5 arch.