Docker Container Installs from Yocto

Yocto Application Containers from SCRATCH

Yesterday I wrote about Using Yocto Project for Docker FROM scratch , but I quickly realized it is hard to iterate quickly with this workflow. As I added support for python-connexion I generated a fresh container image at least 10 times. This is silly when I am only altering a few packages on the system, and so I looked to improve my workflow.

Currently I run the application containers using docker-compose. There is virtually no difference in how the containers are used once they are created with docker import. I use two different images below because one is using python-flask and the other is using python3-flask, but I could easily spin up another service from the same ngenetzky/core-image-minimal:v3 image.

# docker-compose.yaml
version: '3'
services:
    ssp:
        image: ngenetzky/core-image-full-cmdline:v2
        command: ["python", "/usr/bin/simple_server_python.py"]
        ports:
            - "8080:80"
    ss:
        command: ["python3", "-m", "swagger_server"]
        image: ngenetzky/core-image-minimal:v3
        ports:
            - "8081:80"

Enabling package-management

This white paper is an excellent resource:

I tweaked the x86-64 project’s local.conf slightly to enable the ipk and package-management.

# local.conf
PACKAGE_CLASSES = "package_ipk"
EXTRA_IMAGE_FEATURES += "package-management"

Since I already have a docker-compose file I simply extended it to add the pkgfeed service to host ipks from my Yocto build workspace.

# docker-compose.yaml
version: '3'
services:
    ...
    pkgfeed:
        command: ["python3", "-m", "http.server", "80"]
        image: python:3
        ports:
            - "8000:80"
        working_dir: "/srv"
        volumes:
            - "/data/yocto-pyro/1/build/tmp/deploy/ipk:/srv"

Currently I simply set the opkg.conf manually, but I am considering apply the settings at build time.

# docker exec -it yoctocontainers_ss_1 /bin/vi /etc/opkg/opkg.conf
# /etc/opkg/opkg.conf
...
src  all    http://pkgfeed:80/all
src  core2-64   http://pkgfeed:80/core2-64
src  genericx86_64  http://pkgfeed:80/genericx86_64

Related