Skip to content

Support Google Container Registry #30

@DazWilkin

Description

@DazWilkin

[Am a Googler ;-)] Google Container Registry (GCR) provides Google Cloud Platform (GCP) users with a convenient private Docker registry. The GCP command-line aka gcloud provides convenience wrappers for docker push|pull so it's trivial to extend metaparticle to support GCR with a slightly revised 'push' function.

Here for JavaScript but other languages are same-same...

Add e.g. gcr-builder.js:

(function () {
    var shell = require('shelljs');

    module.exports.build = (img) => {
        shell.exec(`docker build -t ${img} .`);
    };

    module.exports.publish = (img) => {
        shell.exec(`gcloud docker -- push ${img}`);
    };
})();

Augment index.js:

    selectBuilder = (buildSpec) => {
        switch(buildSpec) {
            case 'docker':
                return require('./docker-builder');
            case 'gcr':
                return require('./gcr-builder');
            default:
                throw `Unknown builder: ${buildSpec}`;
        }
    }

Then, reflect the new config in mp.containerize:

const projectID = [PROJECT-ID]
const GCR = `gcr.io/${projectID}`
...
mp.containerize(
	{
		builder: "gcr",
		ports: [8080],
		repository: GCR,
		publish: true,
		public: true,
	},
	() => {
		server.listen(port, (err) => {
			if (err) {
				return console.log("server startup error: ", err);
			}
			console.log(`server up on ${port}`);
		});
	}
);

Then npm start:

npm start

> [email protected] start /.../metaparticle/package/tutorials/javascript
> node ./index.js

Sending build context to Docker daemon  670.2kB
Step 1/4 : FROM node:6-alpine
 ---> 29428556c0cb
Step 2/4 : COPY ./ /metaparticle-example/
 ---> bfa18eb16959
Step 3/4 : RUN npm --prefix /metaparticle-example/ install
 ---> Running in 8343230e3a75
npm WARN [email protected] No repository field.
 ---> a122411d31fd
Removing intermediate container 8343230e3a75
Step 4/4 : CMD npm --prefix /metaparticle-example/ start
 ---> Running in 37356ae1e80d
 ---> e27343f47400
Removing intermediate container 37356ae1e80d
Successfully built e27343f47400
Successfully tagged gcr.io/[PROJECT-ID]/metaparticle-example:latest
The push refers to a repository [gcr.io/[PROJECT-ID]/metaparticle-example]
0163fc9a0d9d: Preparing
d8b55f59c7cc: Preparing
06a3955bac48: Preparing
8aebbd0f4dee: Preparing
52a5560f4ca0: Preparing
8aebbd0f4dee: Layer already exists
06a3955bac48: Layer already exists
52a5560f4ca0: Layer already exists
0163fc9a0d9d: Pushed
d8b55f59c7cc: Pushed
latest: digest: sha256:2a17daae09a4e3b7fc76b7f861fb734aca28f4c423792f65a3a05ed6c79bf25e size: 1368
3bcddd5dce12db8e7079996794112169a437bdb5095c0874dc56971387098040

> [email protected] start /metaparticle-example
> node ./index.js

server up on 8080

and:

image

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions