Installing and configuring the Go container image

Go is available as an image on the IBM Cloud Container Registry (icr.io) for use on z/OS in conjunction with the IBM z/OS Container Platform (zOSCP). If zOSCP is installed, Go can be utilized in a container instance.

Procedure

To use Go in the container instance, create a Containerfile with the following steps:
  1. Choose the version of z/OS and Go and the "latest" version is recommended:
    FROM zos:latest
    COPY --from=golang:latest /go /go
    
  2. Set base work directory within the container:
    WORKDIR /app
  3. Create script to run Go with correct environment settings:
    RUN  mkdir ./bin;echo '#/bin/sh\neval $(/go/etc/goz-env) >/dev/null\nexec /go/bin/go "$@"'>./bin/go;chmod 755 ./bin/go
    ENV PATH="$PATH:./bin"
    
  4. Copy dependencies independently from building the application. This allows Podman to cache this step for every build where the dependencies don't change.
    COPY go.mod go.sum ./
    RUN go mod download
    
  5. Build the Go application.
    COPY *.go ./
    RUN go build -o /<name of executable>
    
  6. Command to run on container initialization:
    CMD ["/<name of executable>"]
The Containerfile is created. You should be able to utilize Go image in the container instance, for example, by executing:
podman  build -t <name of image> .

podman run  --rm <name of image>
Note: The Go container images are signed. To verify the signature, follow the instructions in this blog.

Acquire the Go container image

You can acquire the IBM Open Enterprise SDK for Go container image from the IBM Cloud Registry (icr.io) with an entitlement key. Follow the instructions below to acquire the image:
Note: The following skopeo and podman commands assume the policy.json file allows images to be accepted from icr.io and stored to your private registry. In addition, the SSL_CERT_FILE environment variable needs to be set appropriately. See Set up TLS to securely connect to image registries for details.
  1. Use the skopeo command to copy the IBM Open Enterprise SDK for Go image from IBM Cloud Registry to your private registry.
    skopeo copy docker://icr.io/zoscp/golang:latest docker://registry/[directory] --src-creds iamapikey:<entitlement key> --dest-creds XX:XX
    where XX:XX is the private local registry credential (user ID : password) and registry is the private local registry name. Alternatively, Podman could be used to pull the IBM Open Enterprise SDK for Go image.
  2. To use Podman to copy the Go image locally from icr.io in your own images with the following command:
    podman login –u iamapikey –p <entitlement key> docker://icr.io
    podman pull docker://icr.io/zoscp/golang:latest
    If you have any issues copying or pulling the image from IBM Cloud Registry, open a case against the IBM z/OS Container Platform product with Program ID 5655-MC3.