Adding container components to a devfile

A component type that allows to define a container image-based configuration of a container in a workspace. A devfile can contain one or more component(s) of the container type. The container type of component brings in custom tools into the workspace. The component is identified by its image.

Procedure
  1. Define a component using the type container.

    A container component
     components:
       - name: maven
         container:
          image: eclipe/maven-jdk8:latest
          volumeMounts:
            - name: mavenrepo
              path: /root/.m2
           env:
             - name: ENV_VAR
               value: value
           endpoints:
             - name: maven-server
               targetPort: 3101
               protocol: https
               secure: 'true'
               exposure: public
           memoryLimit: 1536M
           command: ['tail']
           args: ['-f', '/dev/null']
    A minimal container component*
    schemaVersion: 2.0.0
    metadata:
        name: mydevfile
    components:
      - name: go
        container:
          image: golang
          memoryLimit: 512Mi
          command: ['sleep', 'infinity']

    It specifies the type of the component, container and the image attribute names the image to be used for the component using the usual Docker naming conventions, that is, the above image attribute is equal to docker.io/library/golang:latest.

    A container component has many features that enable augmenting the image with additional resources and information needed for meaningful integration of the tool provided by the image with Devfile.

  2. Mounting project sources

    For the container component to have access to the project sources, you must set the mountSources attribute to true.

    schemaVersion: 2.0.0
    metadata:
        name: mydevfile
    components:
      - name: go
        container:
          image: golang
          memoryLimit: 512Mi
          mountSources: true
          command: ['sleep', 'infinity']

    The sources is mounted on a location stored in the PROJECTS_ROOT environment variable that is made available in the running container of the image. This location defaults to /projects. If sourceMapping is defined in the container, it overrides the 'PROJECT_ROOT' value if present and mounts the source to the path defined by sourceMapping.

  3. Container Entrypoint

    The command attribute of the container along with other arguments, is used to modify the entrypoint command of the container created from the image. In Devfile the container is needed to run indefinitely so that you can connect to it and execute arbitrary commands in it at any time. Because the availability of the sleep command and the support for the infinity argument for it is different and depends on the base image used in the particular images, Devfile cannot insert this behavior automatically on its own. However, you can take advantage of this feature to, for example, start up necessary servers with modified configurations, etc.

Additional resources