Add README and update name to kaniko
This commit is contained in:
parent
976afd1992
commit
fad0d25aec
14
Makefile
14
Makefile
|
|
@ -23,7 +23,7 @@ GOOS ?= $(shell go env GOOS)
|
|||
GOARCH = amd64
|
||||
ORG := github.com/GoogleCloudPlatform
|
||||
PROJECT := k8s-container-builder
|
||||
REGISTRY?=gcr.io/kbuild-project
|
||||
REGISTRY?=gcr.io/kaniko-project
|
||||
|
||||
REPOPATH ?= $(ORG)/$(PROJECT)
|
||||
|
||||
|
|
@ -32,23 +32,23 @@ GO_LDFLAGS := '-extldflags "-static"'
|
|||
GO_BUILD_TAGS := "containers_image_ostree_stub containers_image_openpgp exclude_graphdriver_devicemapper exclude_graphdriver_btrfs exclude_graphdriver_overlay"
|
||||
|
||||
EXECUTOR_PACKAGE = $(REPOPATH)/executor
|
||||
KBUILD_PACKAGE = $(REPOPATH)/kbuild
|
||||
KANIKO_PROJECT = $(REPOPATH)/kaniko
|
||||
|
||||
out/executor: $(GO_FILES)
|
||||
GOOS=$* GOARCH=$(GOARCH) CGO_ENABLED=0 go build -ldflags $(GO_LDFLAGS) -tags $(GO_BUILD_TAGS) -o $@ $(EXECUTOR_PACKAGE)
|
||||
|
||||
|
||||
out/kbuild: $(GO_FILES)
|
||||
GOOS=$* GOARCH=$(GOARCH) CGO_ENABLED=0 go build -ldflags $(GO_LDFLAGS) -tags $(GO_BUILD_TAGS) -o $@ $(KBUILD_PACKAGE)
|
||||
out/kaniko: $(GO_FILES)
|
||||
GOOS=$* GOARCH=$(GOARCH) CGO_ENABLED=0 go build -ldflags $(GO_LDFLAGS) -tags $(GO_BUILD_TAGS) -o $@ $(KANIKO_PROJECT)
|
||||
|
||||
.PHONY: test
|
||||
test: out/executor out/kbuild
|
||||
test: out/executor out/kaniko
|
||||
@ ./test.sh
|
||||
|
||||
.PHONY: integration-test
|
||||
integration-test: out/executor out/kbuild
|
||||
integration-test: out/executor out/kaniko
|
||||
@ ./integration-test.sh
|
||||
|
||||
.PHONY: images
|
||||
images: out/executor out/kbuild
|
||||
images: out/executor out/kaniko
|
||||
docker build -t $(REGISTRY)/executor:latest -f deploy/Dockerfile .
|
||||
|
|
|
|||
37
README.md
37
README.md
|
|
@ -1 +1,36 @@
|
|||
kbuild is a tool to build container images from a Dockerfile in a Kubernetes cluster.
|
||||
# kaniko
|
||||
|
||||
kaniko is a tool to build container images from a Dockerfile without a Docker daemon. This enables building container images in unpriviliged environments, which can't easily or securely run a Docker daemon, such as a standard Kubernetes cluster.
|
||||
|
||||
The majority of Dockerfile commands can be executed with kaniko, but we're still working on supporting the following commands:
|
||||
* ADD
|
||||
* SHELL
|
||||
* HEALTHCHECK
|
||||
* STOPSIGNAL
|
||||
* ONBUILD
|
||||
* ARG
|
||||
* VOLUME
|
||||
|
||||
We're currently in the process of building kaniko, so as of now it isn't production ready. Please let us know if you have any feature requests or find any bugs!
|
||||
|
||||
## Running kaniko in a Kubernetes cluster
|
||||
|
||||
kaniko runs as an image, which is responsible for building the final image from a Dockerfile and pushing it to a GCR registry.
|
||||
|
||||
`make images`
|
||||
|
||||
The image takes in three arguments: a path to a Dockerfile, a path to a build context, and the GCR registry the final image should be pushed to (in the form gcr.io/$PROJECT/$IMAGE:$TAG)
|
||||
|
||||
|
||||
## Comparison with Other Tools
|
||||
|
||||
Similar tools include:
|
||||
* [img](https://github.com/genuinetools/img)
|
||||
* [orca-build](https://github.com/cyphar/orca-build)
|
||||
* [buildah](https://github.com/projectatomic/buildah)
|
||||
|
||||
All of these tools build container images; however, the way in which they accomplish this differs from kaniko. Both kaniko and img build unprivileged images, but they interpret “unprivileged” differently. img builds as a non root user from within the container, while kaniko is run in an unprivileged environment with root access inside the container.
|
||||
|
||||
Unlike orca-build, kaniko doesn't use runC to build images. Instead, it runs as a root user within the container.
|
||||
|
||||
buildah requires the same root privilges as a Docker daemon does to run, while kaniko runs without any special privileges or permissions.
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
# Builds the static Go image to execute in a Kubernetes job
|
||||
|
||||
FROM scratch
|
||||
ADD out/executor /kbuild/executor
|
||||
ADD out/executor /kaniko/executor
|
||||
ADD files/ca-certificates.crt /etc/ssl/certs/
|
||||
ADD files/docker-credential-gcr /usr/local/bin/
|
||||
ADD files/config.json /root/.docker/
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
[
|
||||
{
|
||||
"Image1": "gcr.io/kbuild-test/docker-test-copy:latest",
|
||||
"Image2": "gcr.io/kbuild-test/kbuild-test-copy:latest",
|
||||
"Image1": "gcr.io/kaniko-test/docker-test-copy:latest",
|
||||
"Image2": "gcr.io/kaniko-test/kaniko-test-copy:latest",
|
||||
"DiffType": "File",
|
||||
"Diff": {
|
||||
"Adds": null,
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
[
|
||||
{
|
||||
"Image1": "gcr.io/kbuild-test/docker-extract-filesystem:latest",
|
||||
"Image2": "gcr.io/kbuild-test/kbuild-extract-filesystem:latest",
|
||||
"Image1": "gcr.io/kaniko-test/docker-extract-filesystem:latest",
|
||||
"Image2": "gcr.io/kaniko-test/kaniko-extract-filesystem:latest",
|
||||
"DiffType": "File",
|
||||
"Diff": {
|
||||
"Adds": null,
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
[
|
||||
{
|
||||
"Image1": "gcr.io/kbuild-test/docker-test-run:latest",
|
||||
"Image2": "gcr.io/kbuild-test/kbuild-test-run:latest",
|
||||
"Image1": "gcr.io/kaniko-test/docker-test-run:latest",
|
||||
"Image2": "gcr.io/kaniko-test/kaniko-test-run:latest",
|
||||
"DiffType": "File",
|
||||
"Diff": {
|
||||
"Adds": null,
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
[
|
||||
{
|
||||
"Image1": "gcr.io/kbuild-test/docker-test-run-2:latest",
|
||||
"Image2": "gcr.io/kbuild-test/kbuild-test-run-2:latest",
|
||||
"Image1": "gcr.io/kaniko-test/docker-test-run-2:latest",
|
||||
"Image2": "gcr.io/kaniko-test/kaniko-test-run-2:latest",
|
||||
"DiffType": "File",
|
||||
"Diff": {
|
||||
"Adds": null,
|
||||
|
|
|
|||
|
|
@ -93,12 +93,12 @@ type testyaml struct {
|
|||
}
|
||||
|
||||
var executorImage = "executor-image"
|
||||
var executorCommand = "/kbuild/executor"
|
||||
var executorCommand = "/kaniko/executor"
|
||||
var dockerImage = "gcr.io/cloud-builders/docker"
|
||||
var ubuntuImage = "ubuntu"
|
||||
var testRepo = "gcr.io/kbuild-test/"
|
||||
var testRepo = "gcr.io/kaniko-test/"
|
||||
var dockerPrefix = "docker-"
|
||||
var kbuildPrefix = "kbuild-"
|
||||
var kanikoPrefix = "kaniko-"
|
||||
var daemonPrefix = "daemon://"
|
||||
var containerDiffOutputFile = "container-diff.json"
|
||||
|
||||
|
|
@ -137,23 +137,23 @@ func main() {
|
|||
Args: []string{"build", "-t", dockerImageTag, "-f", test.dockerfilePath, test.context},
|
||||
}
|
||||
|
||||
// Then, buld the image with kbuild
|
||||
kbuildImage := testRepo + kbuildPrefix + test.repo
|
||||
kbuild := step{
|
||||
// Then, buld the image with kaniko
|
||||
kanikoImage := testRepo + kanikoPrefix + test.repo
|
||||
kaniko := step{
|
||||
Name: executorImage,
|
||||
Args: []string{executorCommand, "--destination", kbuildImage, "--dockerfile", test.dockerfilePath, "--context", test.context},
|
||||
Args: []string{executorCommand, "--destination", kanikoImage, "--dockerfile", test.dockerfilePath, "--context", test.context},
|
||||
}
|
||||
|
||||
// Pull the kbuild image
|
||||
pullKbuildImage := step{
|
||||
// Pull the kaniko image
|
||||
pullKanikoImage := step{
|
||||
Name: dockerImage,
|
||||
Args: []string{"pull", kbuildImage},
|
||||
Args: []string{"pull", kanikoImage},
|
||||
}
|
||||
|
||||
daemonDockerImage := daemonPrefix + dockerImageTag
|
||||
daemonKbuildImage := daemonPrefix + kbuildImage
|
||||
daemonKanikoImage := daemonPrefix + kanikoImage
|
||||
// Run container diff on the images
|
||||
args := "container-diff-linux-amd64 diff " + daemonDockerImage + " " + daemonKbuildImage + " --type=file -j >" + containerDiffOutputFile
|
||||
args := "container-diff-linux-amd64 diff " + daemonDockerImage + " " + daemonKanikoImage + " --type=file -j >" + containerDiffOutputFile
|
||||
containerDiff := step{
|
||||
Name: ubuntuImage,
|
||||
Args: []string{"sh", "-c", args},
|
||||
|
|
@ -169,7 +169,7 @@ func main() {
|
|||
Args: []string{"cmp", test.configPath, containerDiffOutputFile},
|
||||
}
|
||||
|
||||
y.Steps = append(y.Steps, dockerBuild, kbuild, pullKbuildImage, containerDiff, catContainerDiffOutput, compareOutputs)
|
||||
y.Steps = append(y.Steps, dockerBuild, kaniko, pullKanikoImage, containerDiff, catContainerDiffOutput, compareOutputs)
|
||||
}
|
||||
|
||||
for _, test := range structureTests {
|
||||
|
|
@ -181,19 +181,19 @@ func main() {
|
|||
Args: []string{"build", "-t", dockerImageTag, "-f", test.dockerfilePath, test.dockerBuildContext},
|
||||
}
|
||||
|
||||
// Build the image with kbuild
|
||||
kbuildImage := testRepo + kbuildPrefix + test.repo
|
||||
kbuild := step{
|
||||
// Build the image with kaniko
|
||||
kanikoImage := testRepo + kanikoPrefix + test.repo
|
||||
kaniko := step{
|
||||
Name: executorImage,
|
||||
Args: []string{executorCommand, "--destination", kbuildImage, "--dockerfile", test.dockerfilePath},
|
||||
Args: []string{executorCommand, "--destination", kanikoImage, "--dockerfile", test.dockerfilePath},
|
||||
}
|
||||
// Pull the kbuild image
|
||||
pullKbuildImage := step{
|
||||
// Pull the kaniko image
|
||||
pullKanikoImage := step{
|
||||
Name: dockerImage,
|
||||
Args: []string{"pull", kbuildImage},
|
||||
Args: []string{"pull", kanikoImage},
|
||||
}
|
||||
// Run structure tests on the kbuild and docker image
|
||||
args := "container-structure-test -image " + kbuildImage + " " + test.structureTestYamlPath
|
||||
// Run structure tests on the kaniko and docker image
|
||||
args := "container-structure-test -image " + kanikoImage + " " + test.structureTestYamlPath
|
||||
structureTest := step{
|
||||
Name: ubuntuImage,
|
||||
Args: []string{"sh", "-c", args},
|
||||
|
|
@ -206,7 +206,7 @@ func main() {
|
|||
Env: []string{"PATH=/workspace:/bin"},
|
||||
}
|
||||
|
||||
y.Steps = append(y.Steps, dockerBuild, kbuild, pullKbuildImage, structureTest, dockerStructureTest)
|
||||
y.Steps = append(y.Steps, dockerBuild, kaniko, pullKanikoImage, structureTest, dockerStructureTest)
|
||||
}
|
||||
|
||||
d, _ := yaml.Marshal(&y)
|
||||
|
|
|
|||
|
|
@ -21,9 +21,9 @@ import (
|
|||
)
|
||||
|
||||
var RootCmd = &cobra.Command{
|
||||
Use: "kbuild",
|
||||
Short: "kbuild is a CLI tool for building container images with full Dockerfile support without the need for Docker",
|
||||
Long: `kbuild is a CLI tool for building container images with full Dockerfile support. It doesn't require Docker,
|
||||
Use: "kaniko",
|
||||
Short: "kaniko is a CLI tool for building container images with full Dockerfile support without the need for Docker",
|
||||
Long: `kaniko is a CLI tool for building container images with full Dockerfile support. It doesn't require Docker,
|
||||
and builds the images in a Kubernetes cluster before pushing the final image to a registry.`,
|
||||
Run: func(cmd *cobra.Command, args []string) {
|
||||
},
|
||||
|
|
@ -18,7 +18,7 @@ package main
|
|||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/GoogleCloudPlatform/k8s-container-builder/kbuild/cmd"
|
||||
"github.com/GoogleCloudPlatform/k8s-container-builder/kaniko/cmd"
|
||||
"os"
|
||||
)
|
||||
|
||||
|
|
@ -28,5 +28,5 @@ const (
|
|||
|
||||
WhitelistPath = "/proc/self/mountinfo"
|
||||
|
||||
Author = "kbuild"
|
||||
Author = "kaniko"
|
||||
)
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@ func TestSnapshotFileChange(t *testing.T) {
|
|||
newFiles := map[string]string{
|
||||
"foo": "newbaz1",
|
||||
"bar/bat": "baz",
|
||||
"kbuild/bat": "bat",
|
||||
"kaniko/bat": "bat",
|
||||
}
|
||||
if err := testutil.SetupFiles(testDir, newFiles); err != nil {
|
||||
t.Fatalf("Error setting up fs: %s", err)
|
||||
|
|
@ -135,14 +135,14 @@ func TestSnapshotFiles(t *testing.T) {
|
|||
// Make some changes to the filesystem
|
||||
newFiles := map[string]string{
|
||||
"foo": "newbaz1",
|
||||
"kbuild/file": "bat",
|
||||
"kaniko/file": "bat",
|
||||
}
|
||||
if err := testutil.SetupFiles(testDir, newFiles); err != nil {
|
||||
t.Fatalf("Error setting up fs: %s", err)
|
||||
}
|
||||
filesToSnapshot := []string{
|
||||
filepath.Join(testDir, "foo"),
|
||||
filepath.Join(testDir, "kbuild/file"),
|
||||
filepath.Join(testDir, "kaniko/file"),
|
||||
}
|
||||
contents, err := snapshotter.TakeSnapshot(filesToSnapshot)
|
||||
if err != nil {
|
||||
|
|
@ -199,7 +199,7 @@ func setUpTestDir() (string, *Snapshotter, error) {
|
|||
files := map[string]string{
|
||||
"foo": "baz1",
|
||||
"bar/bat": "baz2",
|
||||
"kbuild/file": "file",
|
||||
"kaniko/file": "file",
|
||||
}
|
||||
// Set up initial files
|
||||
if err := testutil.SetupFiles(testDir, files); err != nil {
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@ import (
|
|||
"strings"
|
||||
)
|
||||
|
||||
var whitelist = []string{"/kbuild"}
|
||||
var whitelist = []string{"/kaniko"}
|
||||
|
||||
// ExtractFileSystemFromImage pulls an image and unpacks it to a file system at root
|
||||
func ExtractFileSystemFromImage(img string) error {
|
||||
|
|
|
|||
|
|
@ -46,7 +46,7 @@ func Test_fileSystemWhitelist(t *testing.T) {
|
|||
}
|
||||
|
||||
actualWhitelist, err := fileSystemWhitelist(path)
|
||||
expectedWhitelist := []string{"/kbuild", "/proc", "/dev", "/dev/pts", "/sys"}
|
||||
expectedWhitelist := []string{"/kaniko", "/proc", "/dev", "/dev/pts", "/sys"}
|
||||
sort.Strings(actualWhitelist)
|
||||
sort.Strings(expectedWhitelist)
|
||||
testutil.CheckErrorAndDeepEqual(t, false, err, expectedWhitelist, actualWhitelist)
|
||||
|
|
@ -61,7 +61,7 @@ var tests = []struct {
|
|||
files: map[string]string{
|
||||
"/workspace/foo/a": "baz1",
|
||||
"/workspace/foo/b": "baz2",
|
||||
"/kbuild/file": "file",
|
||||
"/kaniko/file": "file",
|
||||
},
|
||||
directory: "/workspace/foo/",
|
||||
expectedFiles: []string{
|
||||
|
|
@ -84,7 +84,7 @@ var tests = []struct {
|
|||
"/workspace/foo/a": "baz1",
|
||||
"/workspace/foo/b": "baz2",
|
||||
"/workspace/baz": "hey",
|
||||
"/kbuild/file": "file",
|
||||
"/kaniko/file": "file",
|
||||
},
|
||||
directory: "/workspace",
|
||||
expectedFiles: []string{
|
||||
|
|
@ -99,16 +99,16 @@ var tests = []struct {
|
|||
files: map[string]string{
|
||||
"/workspace/foo/a": "baz1",
|
||||
"/workspace/foo/b": "baz2",
|
||||
"/kbuild/file": "file",
|
||||
"/kaniko/file": "file",
|
||||
},
|
||||
directory: "",
|
||||
expectedFiles: []string{
|
||||
"workspace/foo/a",
|
||||
"workspace/foo/b",
|
||||
"kbuild/file",
|
||||
"kaniko/file",
|
||||
"workspace",
|
||||
"workspace/foo",
|
||||
"kbuild",
|
||||
"kaniko",
|
||||
".",
|
||||
},
|
||||
},
|
||||
|
|
|
|||
Loading…
Reference in New Issue