Configuration Options Detail

To configure your containerd development environment, you will work primarily with the containerd.toml file, which is the primary configuration file for containerd. Below, the steps outline specific configuration options with corresponding code examples.

1. Set up the containerd Configuration File

Create or modify the containerd.toml configuration file located at the path specified during the containerd installation. This file controls all operational aspects of containerd.

version = 2

[plugins]
  [plugins.cri]
    enable_selinux = false
    max_concurrent_downloads = 3

2. Configuring the Snapshotter

You can configure the snapshotter to specify which type of snapshotter you wish to use for managing the container file system layers.

[plugins]
  [plugins.snapshotter]
    name = "overlayfs"

3. Runtime Configuration

In the configuration file, you can specify the runtime options under the [plugins.cri.containerd.runtimes] section. You can choose the runtime you want for executing containers.

[plugins.cri.containerd]
  default_runtime_name = "runc"
  
  [plugins.cri.containerd.runtimes.runc]
    runtime_type = "io.containerd.runc.v2"
    [plugins.cri.containerd.runtimes.runc.options]
      SystemdCgroup = true

4. Logging Configuration

You can configure logging options for better debugging and operational visibility.

[debug]
  level = "debug"
  address = "/run/containerd/containerd-debug.sock"

[log]
  level = "info"
  fields = ["name", "namespace", "container_id", "action"]

5. Network Configuration

Configure the network settings to manage the networking behaviors for containers.

[plugins.cni]
  bin_dir = "/opt/cni/bin"
  conf_dir = "/etc/cni/net.d"

6. Setting up Mediators

Many containerd configurations allow for setting up mediators for operations such as image delivery or volume management.

[plugins]
  [plugins.mediators]
    leader = "false"
    sync = "true"

7. Build Constraints for Testing

When running tests, it is critical to adhere to the defined build constraints. Ensure you are not targeting the Windows environment or versions prior to Go 1.17. Use the following flags for testing:

go test -tags '!windows' -tags 'go1.17'

8. Golang Module Dependency

When building your project, make sure to use the correct Golang module path, which impacts the build output. Sync your Go module with the following command ensuring not to use the vendor flag:

go build -mod=readonly ./...

Adjustments in your Dockerfile may also be warranted to build your Go application effectively within containerized environments.

Sample Dockerfile

A Dockerfile example for building your application could look as follows:

FROM golang:1.17 AS builder

WORKDIR /app

COPY go.mod go.sum ./
RUN go mod download

COPY . .

RUN GOOS=linux GOARCH=amd64 go build -o myapp .

FROM alpine:latest

COPY --from=builder /app/myapp /usr/local/bin/myapp

ENTRYPOINT ["/usr/local/bin/myapp"]

Refer to the official containerd repository and documentation for more advanced use cases and configurations.

Source: containerd/containerd