profile
viewpoint
Chris Crone chris-crone @docker (ex-@infinit) Paris, France

cnabio/community 5

CNAB Community Assets

chris-crone/kubecon-eu-19 1

KubeCon EU 2019: Intro to CNAB examples

chris-crone/app 0

Make your Docker Compose applications reusable, and share them on Docker Hub

chris-crone/buildkit 0

concurrent, cache-efficient, and Dockerfile-agnostic builder toolkit

chris-crone/cli 0

The Docker CLI

chris-crone/cnab-spec 0

Cloud Native Application Bundle Specification

chris-crone/compose 0

Define and run multi-container applications with Docker

chris-crone/compose-guacamole 0

Make guacamole using docker-compose.

PR opened docker/compose

Reviewers
Bump Linux and Python
  • Alpine 3.10 to 3.11
  • Debian Stretch 20191118 to 20191224
  • Python 3.7.5 to 3.7.6
+6 -6

0 comment

2 changed files

pr created time in 4 days

create barnchchris-crone/compose

branch : bump-linux-python

created branch time in 4 days

pull request commentdocker/compose

Bump pyinstaller to 3.6

@ulyssessouza I'd like to see a CI run of this before validating

ulyssessouza

comment created time in 11 days

issue closeddocker/compose

Fund PyInstaller development

Docker compose uses PyInstaller for distributing installable packages.

PyInstaller is in urgent need of funding:

If reasonable funding is not achieved for PyInstaller until end of January 2020, @htgoebel will retire as an maintainer. This basically means: Unless somebody else steps in, there will be nobody reviewing any pull-request, there will be not improvement and sooner or later you will not be able to use PyInstaller any more - and open issues in Docker Compose related to PyInstaller might not be solved.

For details see https://github.com/pyinstaller/pyinstaller/issues/4404.

closed time in 19 days

htgoebel

issue commentdocker/compose

Fund PyInstaller development

Thank you for the work that you've done on PyInstaller and for letting us know. This is not the right forum to discuss this so I'm closing this issue and have reached out via email.

htgoebel

comment created time in 19 days

IssuesEvent

pull request commentdocker/app

Replace build time in binary with commit time

The only real use of the build time is when you're testing your local build between commits and want to make sure you're using the latest version. We can:

  1. Remove the build time completely
  2. Only store the build time when building with uncommitted changes (i.e.: git describe --always shows <sha>-dirty)

I'm happy with either of the above solutions.

ulyssessouza

comment created time in 25 days

fork chris-crone/containerd

An open and reliable container runtime

https://containerd.io

fork in 2 months

issue commentdocker/cli

Docker stack deploy do not undersand volumes in windows format

@chris-crone any ideas on that one?

It looks like that error is coming from Compose on Kubernetes: https://github.com/docker/compose-on-kubernetes/blob/master/internal/convert/volumes.go#L49

@silvin-lubecki or @aiordache can you PTAL?

eiximenis

comment created time in 2 months

Pull request review commentdocker/app

Implement multi tag for build

 func runBuild(dockerCli command.Cli, contextPath string, opt buildOptions) error 	} 	defer app.Cleanup() -	bundle, err := buildImageUsingBuildx(app, contextPath, opt, dockerCli)+	bndl, err := buildImageUsingBuildx(app, contextPath, opt, dockerCli) 	if err != nil { 		return err 	} -	var ref reference.Reference-	ref, err = packager.GetNamedTagged(opt.tag)+	out, err := getOutputFile(dockerCli.Out(), opt.quiet) 	if err != nil { 		return err 	} -	id, err := packager.PersistInBundleStore(ref, bundle)+	id, err := persistTags(bndl, opt.tags, opt.imageIDFile, out, dockerCli.Err()) 	if err != nil { 		return err 	} -	if opt.imageIDFile != "" {-		if err = ioutil.WriteFile(opt.imageIDFile, []byte(id.Digest().String()), 0644); err != nil {-			fmt.Fprintf(dockerCli.Err(), "Failed to write App image ID in %s: %s", opt.imageIDFile, err)-		}+	if opt.quiet {+		_, err = fmt.Fprintln(dockerCli.Out(), id.Digest().String()) 	}+	return err+} -	if opt.quiet {-		fmt.Fprintln(dockerCli.Out(), id.Digest().String())-		return err+func persistTags(bndl *bundle.Bundle, tags cliOpts.ListOpts, iidFile string, outWriter io.Writer, errWriter io.Writer) (reference.Digested, error) {+	var id reference.Digested+	var onceWriteIIDFile sync.Once+	if tags.Len() == 0 {+		err := tags.Set("")+		if err != nil {+			return nil, err+		} 	}-	fmt.Fprintf(dockerCli.Out(), "Successfully built %s\n", id.String())-	if ref != nil {-		fmt.Fprintf(dockerCli.Out(), "Successfully tagged %s\n", ref.String())+	for _, tag := range tags.GetAll() {+		ref, err := packager.GetNamedTagged(tag)+		if err != nil {+			return nil, err+		}+		id, err = persistInBundleStore(&onceWriteIIDFile, outWriter, errWriter, bndl, ref, iidFile)+		if err != nil {+			return nil, err+		}+		if tag != "" {+			fmt.Fprintf(outWriter, "Successfully tagged app %s\n", ref.String())+		} 	}-	return err+	return id, nil+}++func persistInBundleStore(once *sync.Once, out io.Writer, errWriter io.Writer, b *bundle.Bundle, ref reference.Reference, iidFileName string) (reference.Digested, error) {+	id, err := packager.PersistInBundleStore(ref, b)+	if err != nil {+		return nil, err+	}+	once.Do(func() {+		fmt.Fprintf(out, "Successfully built app %s\n", id.String())

With BuildKit the final line is:

=> => writing image sha256:6f71466d421e3ab378cf91c03bfd4d00ecfc1ba7dc3a37ccb69c02b2ef0a2f6b

Without, it's:

Successfully built 965ea09ff2eb

I would say that we should use option 3 to make sure that it's clear.

ulyssessouza

comment created time in 2 months

PR opened docker/compose

Reviewers
Build fixes for macOS
+18 -5

0 comment

3 changed files

pr created time in 2 months

create barnchdocker/compose

branch : macos-folder-build

created branch time in 2 months

pull request commentdocker/compose

Update engine to 19.03.3, and Alpine 3.10.2

I believe most of this PR is replaced by: https://github.com/docker/compose/pull/7068

thaJeztah

comment created time in 2 months

PR opened docker/compose

Reviewers
Bump Linux and macOS dependencies

Bump Linux dependencies

  • Alpine 3.10.3
  • Debian Stretch 20191118
  • Python 3.7.5

Bump macOS dependencies

  • Python 3.7.5
  • OpenSSL 1.1.1d
+8 -8

0 comment

2 changed files

pr created time in 2 months

create barnchdocker/compose

branch : bump-macos-linux

created branch time in 2 months

PR opened docker/compose

Reviewers
Use Python3 for macOS build environment

With the deprecation of Python 2 coming soon, explicitly use Python 3.

+1 -1

0 comment

1 changed file

pr created time in 2 months

create barnchdocker/compose

branch : mac-bootstrap-python3

created branch time in 2 months

create barnchchris-crone/compose

branch : mac-bootstrap-python3

created branch time in 2 months

Pull request review commentdocker/compose

Build OSX binary as a directory

+# -*- mode: python ; coding: utf-8 -*-

I'm guessing there isn't a way we can avoid duplicating the information here vs in docker-compose.spec?

ndeloof

comment created time in 2 months

Pull request review commentdocker/app

Update README to reflect the UX changes in Docker App

 services:       - ${port}:5678 ``` -You can test everything is working, by inspecting the application definition.--```console-$ docker app inspect-hello 0.1.0--Maintained by: yourusername--A simple text server--Service (1) Replicas Ports Image------------ -------- ----- ------hello       1        5678  hashicorp/http-echo--Parameters (2) Value--------------- ------port           5678-text           hello development-```--You can render the application to a Compose file with the provided default-values.+Next, define the default values for the App in the `parameters.yml` file: -```console-$ docker app render-version: "3.2"-services:-  hello:-    command:-    - -text-    - hello development-    image: hashicorp/http-echo-    ports:-    - mode: ingress-      target: 5678-      published: 5678-      protocol: tcp+```yaml+port: 5678+text: hello development ``` -You can then use that Compose file like any other. You could save it to disk or-pipe it straight to `docker stack` or `docker-compose` to run the-application.--```console-$ docker app render | docker-compose -f - up-```+### Building an App image -This is where it gets interesting. We can override those parameters at runtime,-using the `--set` option. Let's specify some different options and run `render`-again:+Next, build an App image:  ```console-$ docker app render --set port=4567 --set text="hello production"-version: "3.2"-services:-  hello:-    command:-    - -text-    - hello production-    image: hashicorp/http-echo-    ports:-    - mode: ingress-      target: 5678-      published: 4567-      protocol: tcp-```+$ docker app build . -f hello.dockerapp -t myrepo/hello:0.1.0+[+] Building 0.7s (6/6) FINISHED+(...) (Build output)                                                                                                                sha256:4a492748ae55170daadd1ddfff4db30e0ef3d38bf0f57a913512caa323e140de      +```                                                                               -If you prefer you can create a standalone configuration file to store those-parameters. Let's create `prod.yml` with the following contents:+At this point, an App image with the `myrepo/hello:1.0.1` tag has been built from the `hello.dockerapp` App definition. This immutable App image includes all the service images at fixed versions that you can run or share. -```yaml-text: hello production-port: 4567-```+### Sharing and running the App -You can then run using that configuration file like so:+To share your App image, push it to a container registry.  ```console-$ docker app render --parameters-file prod.yml-```+$ docker app push myrepo/hello:0.1.0+```   -You can share your Application Package by pushing it to a container registry.+Now run your App:  ```console-$ docker app push --tag myrepo/hello:0.1.0-```+$ docker app run myrepo/hello:0.1.0 +```  -Others can then use your Application Package by specifying the registry tag.+You can specify the Docker endpoint where an application is installed using a context. By default, your App will run on the currently active context. You can select another context with the `docker context use` command, and the `docker app run` command will thereafter run your app on this particular context.  -```console-$ docker app inspect myrepo/hello:0.1.0-```+Whenever you define such a context, the installer image will run in the default context (i.e., on local host). You can then use the `--installer-context` to target another context to run the installer image. -**Note**: Commands like `install`, `upgrade`, `render`, etc. can also be used-directly on Application Packages that are in a registry.--You can specify the Docker endpoint where an application is installed using a-context and the `--context` option. If you do not specify one, it will	-use the currently active context.+```console+$ docker context create remote --description "remote cluster" --docker host=tcp://<remote-ip>:<remote-port>+Successfully created context "remote" -Whenever you define such a context, the installer image will run in the `default`-context (i.e. on local host). You can use the `--installer-context` to target-another context to run the installer image.+$ docker context ls+NAME                DESCRIPTION                               DOCKER ENDPOINT               KUBERNETES ENDPOINT                ORCHESTRATOR+default *           Current DOCKER_HOST based configuration   unix:///var/run/docker.sock   https://localhost:6443 (default)   swarm+remote              remote cluster                            tcp://<remote-ip>:<remote-port> -More examples are available in the [examples](examples) directory.+$ docker context use remote+$ docker app run myrepo/hello:0.1.0+```   ## CNAB -Under the hood `docker app` is [CNAB](https://cnab.io) compliant. It generates a-CNAB from your application source and is able to install and manage any other-CNAB too. CNAB specifies three actions which `docker app` provides as commands:-* `install`-* `upgrade`-* `uninstall`--Here is an example installing an Application Package, inspect it and-then uninstalling it:-```console-$ docker app install examples/hello-world/example-hello-world.dockerapp --name hello-Creating network hello_default-Creating service hello_hello--$ docker app inspect hello-{-    "Metadata": {-        "version": "0.1.0",-        "name": "hello-world",-        "description": "Hello, World!",-        "maintainers": [-            {-                "name": "user",-                "email": "user@email.com"-            }-        ]-    },-    "Services": [-        {-            "Name": "hello",-            "Image": "hashicorp/http-echo",-            "Replicas": 1,-            "Ports": "8080"-        }-    ],-    "Parameters": {-        "port": "8080",-        "text": "Hello, World!"-    },-    "Attachments": [-        {-            "Path": "bundle.json",-            "Size": 3189-        }-    ]-}--$ docker app uninstall hello-Removing service hello_hello-Removing network hello_default-```+Docker Apps are Docker’s implementation of the industry standard Cloud Native Application Bundle (CNAB). [CNAB](https://cnab.io/) is an industry specification put in place to facilitate the bundling, sharing, installing and managing of cloud-native apps that are not only made up of containers but also from such things as hosted databases, functions, etc. +Docker App is designed to abstract as many CNAB specifics as possible, to provide users with a tool that is easy to use while alleviating the need to bother with the CNAB specification.  ## Installation -**Note**: Docker app is a _command line_ plugin (not be confused with docker _engine_ plugins), extending the `docker` command with `app` sub-commands.-It requires [Docker CLI](https://download.docker.com) 19.03.0 or later with experimental features enabled.-Either set environment variable `DOCKER_CLI_EXPERIMENTAL=enabled`-or update your [docker CLI configuration](https://docs.docker.com/engine/reference/commandline/cli/#experimental-features).+Docker App is a *command line* plugin (not be confused with *docker engine plugins*) that extends the `docker` command with `app` sub-commands. It requires [Docker CLI](https://download.docker.com/) 19.03.0 or later, with experimental features enabled. Either set environment variable `DOCKER_CLI_EXPERIMENTAL=enabled` or update your [docker CLI configuration](https://docs.docker.com/engine/reference/commandline/cli/#experimental-features).

s/It requires/It requires the/

carolinebriaud

comment created time in 2 months

Pull request review commentdocker/app

Update README to reflect the UX changes in Docker App

 services:       - ${port}:5678 ``` -You can test everything is working, by inspecting the application definition.--```console-$ docker app inspect-hello 0.1.0--Maintained by: yourusername--A simple text server--Service (1) Replicas Ports Image------------ -------- ----- ------hello       1        5678  hashicorp/http-echo--Parameters (2) Value--------------- ------port           5678-text           hello development-```--You can render the application to a Compose file with the provided default-values.+Next, define the default values for the App in the `parameters.yml` file: -```console-$ docker app render-version: "3.2"-services:-  hello:-    command:-    - -text-    - hello development-    image: hashicorp/http-echo-    ports:-    - mode: ingress-      target: 5678-      published: 5678-      protocol: tcp+```yaml+port: 5678+text: hello development ``` -You can then use that Compose file like any other. You could save it to disk or-pipe it straight to `docker stack` or `docker-compose` to run the-application.--```console-$ docker app render | docker-compose -f - up-```+### Building an App image -This is where it gets interesting. We can override those parameters at runtime,-using the `--set` option. Let's specify some different options and run `render`-again:+Next, build an App image:  ```console-$ docker app render --set port=4567 --set text="hello production"-version: "3.2"-services:-  hello:-    command:-    - -text-    - hello production-    image: hashicorp/http-echo-    ports:-    - mode: ingress-      target: 5678-      published: 4567-      protocol: tcp-```+$ docker app build . -f hello.dockerapp -t myrepo/hello:0.1.0+[+] Building 0.7s (6/6) FINISHED+(...) (Build output)                                                                                                                sha256:4a492748ae55170daadd1ddfff4db30e0ef3d38bf0f57a913512caa323e140de      +```                                                                               -If you prefer you can create a standalone configuration file to store those-parameters. Let's create `prod.yml` with the following contents:+At this point, an App image with the `myrepo/hello:1.0.1` tag has been built from the `hello.dockerapp` App definition. This immutable App image includes all the service images at fixed versions that you can run or share. -```yaml-text: hello production-port: 4567-```+### Sharing and running the App -You can then run using that configuration file like so:+To share your App image, push it to a container registry.  ```console-$ docker app render --parameters-file prod.yml-```+$ docker app push myrepo/hello:0.1.0+```   -You can share your Application Package by pushing it to a container registry.+Now run your App:  ```console-$ docker app push --tag myrepo/hello:0.1.0-```+$ docker app run myrepo/hello:0.1.0 +```  -Others can then use your Application Package by specifying the registry tag.+You can specify the Docker endpoint where an application is installed using a context. By default, your App will run on the currently active context. You can select another context with the `docker context use` command, and the `docker app run` command will thereafter run your app on this particular context.  -```console-$ docker app inspect myrepo/hello:0.1.0-```+Whenever you define such a context, the installer image will run in the default context (i.e., on local host). You can then use the `--installer-context` to target another context to run the installer image. -**Note**: Commands like `install`, `upgrade`, `render`, etc. can also be used-directly on Application Packages that are in a registry.--You can specify the Docker endpoint where an application is installed using a-context and the `--context` option. If you do not specify one, it will	-use the currently active context.+```console+$ docker context create remote --description "remote cluster" --docker host=tcp://<remote-ip>:<remote-port>+Successfully created context "remote" -Whenever you define such a context, the installer image will run in the `default`-context (i.e. on local host). You can use the `--installer-context` to target-another context to run the installer image.+$ docker context ls+NAME                DESCRIPTION                               DOCKER ENDPOINT               KUBERNETES ENDPOINT                ORCHESTRATOR+default *           Current DOCKER_HOST based configuration   unix:///var/run/docker.sock   https://localhost:6443 (default)   swarm+remote              remote cluster                            tcp://<remote-ip>:<remote-port> -More examples are available in the [examples](examples) directory.+$ docker context use remote+$ docker app run myrepo/hello:0.1.0+```   ## CNAB -Under the hood `docker app` is [CNAB](https://cnab.io) compliant. It generates a-CNAB from your application source and is able to install and manage any other-CNAB too. CNAB specifies three actions which `docker app` provides as commands:-* `install`-* `upgrade`-* `uninstall`--Here is an example installing an Application Package, inspect it and-then uninstalling it:-```console-$ docker app install examples/hello-world/example-hello-world.dockerapp --name hello-Creating network hello_default-Creating service hello_hello--$ docker app inspect hello-{-    "Metadata": {-        "version": "0.1.0",-        "name": "hello-world",-        "description": "Hello, World!",-        "maintainers": [-            {-                "name": "user",-                "email": "user@email.com"-            }-        ]-    },-    "Services": [-        {-            "Name": "hello",-            "Image": "hashicorp/http-echo",-            "Replicas": 1,-            "Ports": "8080"-        }-    ],-    "Parameters": {-        "port": "8080",-        "text": "Hello, World!"-    },-    "Attachments": [-        {-            "Path": "bundle.json",-            "Size": 3189-        }-    ]-}--$ docker app uninstall hello-Removing service hello_hello-Removing network hello_default-```+Docker Apps are Docker’s implementation of the industry standard Cloud Native Application Bundle (CNAB). [CNAB](https://cnab.io/) is an industry specification put in place to facilitate the bundling, sharing, installing and managing of cloud-native apps that are not only made up of containers but also from such things as hosted databases, functions, etc. +Docker App is designed to abstract as many CNAB specifics as possible, to provide users with a tool that is easy to use while alleviating the need to bother with the CNAB specification.

It would be good to add the positive side of the specification: interoperability and a common storage mechanism

carolinebriaud

comment created time in 2 months

Pull request review commentdocker/app

Update README to reflect the UX changes in Docker App

-# Docker Application+# Docker App -A Docker CLI Plugin to configure, share and install applications:-* Extend [Compose files](https://docs.docker.com/compose/compose-file/) with metadata and parameters-* Re-use same application across multiple environments (Development/QA/Staging/Production)-* Multi orchestrator installation (Swarm or Kubernetes)-* Push/Pull/[Promotion](https://docs.docker.com/ee/dtr/user/promotion-policies/internal-promotion/)/[Signing](https://docs.docker.com/engine/security/trust/content_trust/) supported for application, with same workflow as images-* Fully [CNAB](https://cnab.io) compliant-* Full support of Docker Contexts+Docker App is a Cloud Native application packaging framework with which developers and devops can  build, share, and run a set of microservices as a single entity. Docker Apps are based on the [Compose format](https://docs.docker.com/compose/compose-file/), which permits [docker-compose](https://github.com/docker/compose) users to easily share their Compose-based multiservice applications via container registries. By leveraging containers, Docker App makes it possible to easily change parts of the application and to share the application through container registries. -## The problem Application Packages solves+### Table of Contents+- **[What are the benefits offered by Docker App?](#what-are-the-benefits-offered-by-docker-app)**+- **[How does Docker App work?](#how-does-docker-app-work)**+- **[Using Docker App](#using-docker-app)**+    * **[Writing an App definition](#writing-an-app-definition)**+    * **[Building an App image](#building-an-app-image)**+    * **[Sharing the App on the Hub](#sharing-the-app-on-the-hub)**+    * **[Running the App](#running-the-app)**+- **[Example](#example)**+    * **[App definition](#app-definition)**+    * **[Using parameters](#using-parameters)**+    * **[Building an App image](#building-an-app-image)**+    * **[Sharing and running the App](#sharing-and-running-the-app)**+- **[CNAB](#cnab)**+- **[Installation](#installation)**+    * **[Linux or macOS](#linux-or-macos)**+    * **[Windows](#windows)**+- **[Next steps](#next-steps)** -Compose files do a great job of describing a set of related services. Not only-are Compose files easy to write, they are generally easy to read as well.-However, a couple of problems often emerge:+## What are the benefits offered by Docker App? -1. You have several environments where you want to deploy the application, with small configuration differences-1. You have lots of similar applications+* Simple management of Docker Apps across different teams and between different environments (Development/QA/Staging/Production)+* Easy sharing of multi-service applications to container registries (e.g., [Docker Hub](https://hub.docker.com/) or [Docker Trusted Registry](https://docs.docker.com/ee/dtr/))+* Having a clear separation of parameters to be modified at runtime +* Support for multiple orchestrators (Swarm or Kubernetes)+* Provides the very same UX flow as the one for Docker images+* Implements the [CNAB](https://cnab.io) industry standard+* Offers full support of Docker Contexts -Fundamentally, Compose files are not easy to share between concerns. Docker-Application Packages aim to solve these problems and make Compose more useful-for development _and_ production.+## How does Docker App work? -## Looking at an example+The Docker App workflow is quite similar to the Docker image workflow. From an App definition, you can build an App image, share it on Docker Hub, and run your App on an orchestrator. -Let's take the following Compose file. It launches an HTTP server which prints-the specified text when hit on the configured port.+![Image showing Docker CLI command flow](DockerAppCLIcommands.png)++## Using Docker App++Four primary steps comprise the Docker App process:+1. Writing an App Definition+1. Building an App Image+1. Sharing the App on the Hub (optional)+1. Running the App++### Writing an App definition++The first step in using Docker App is to write the App definition. This definition can be created (1) from an existing Compose file using the `docker app init` command (2) via  a template from the [Application Designer](https://docs.docker.com/ee/desktop/app-designer/), or (3) from scratch. ++The App definition is a .dockerapp folder that contains three distinct pieces: metadata, a service list, and the parameters. ++| File | Description |+| :------------ | :------------ |+| metadata.yml | metadata including the App name and version |+| docker-compose.yml | Service list defined in a [Compose file](https://docs.docker.com/compose/compose-file/) |+| parameters.yml | Parameters that can be changed when running the App |++*Note: To store additional files in Docker Apps, such as* `prod.yml`*,* `test.yml` *or other config files, you need only to add these files to the *.dockerapp directory. All files will be packaged into the App image through the use of the* `docker app build`  *command.*++### Building an App image++Once the App definition is written, the next step is to build the App image from the App definition using the `docker app build` command. With this command you can tag your App image, set build-time variables, or make the build quiet. +Note that service images inside of an App image are immutable, meaning that the App version ties to a fixed list of service images (i.e., updating the images inside of a Docker App requires rebuilding the App image).++### Sharing the App on the Hub++You can push any App image already built or pulled to Docker Hub (or any registry) using the `docker app push` command. You can also pull App images from any container registry using the `docker app pull` command.++When pushing an App image, all the service images used by the application are pushed at the same time inside a single entity. The version of each service image is resolved at build time from its tag.++### Running the App++The final Docker App step is to actually run your App using the `docker app run` command. You can either pick up an App image from Docker Hub or one that you built locally and deploy it to Swarm or Kubernetes.++## Example++Using the [hello-world](https://github.com/docker/app/tree/master/examples/hello-world) application example, we are going to build, share, and run a Docker App that launches an HTTP server that prints the text variable value when hit on the configured port. 

You can replace https://github.com/docker/app/tree/master/examples/hello-world with ./examples/hello-world. GitHub markdown supports relative paths.

carolinebriaud

comment created time in 2 months

Pull request review commentdocker/app

Update README to reflect the UX changes in Docker App

-# Docker Application+# Docker App -A Docker CLI Plugin to configure, share and install applications:-* Extend [Compose files](https://docs.docker.com/compose/compose-file/) with metadata and parameters-* Re-use same application across multiple environments (Development/QA/Staging/Production)-* Multi orchestrator installation (Swarm or Kubernetes)-* Push/Pull/[Promotion](https://docs.docker.com/ee/dtr/user/promotion-policies/internal-promotion/)/[Signing](https://docs.docker.com/engine/security/trust/content_trust/) supported for application, with same workflow as images-* Fully [CNAB](https://cnab.io) compliant-* Full support of Docker Contexts+Docker App is a Cloud Native application packaging framework with which developers and devops can  build, share, and run a set of microservices as a single entity. Docker Apps are based on the [Compose format](https://docs.docker.com/compose/compose-file/), which permits [docker-compose](https://github.com/docker/compose) users to easily share their Compose-based multiservice applications via container registries. By leveraging containers, Docker App makes it possible to easily change parts of the application and to share the application through container registries. -## The problem Application Packages solves+### Table of Contents+- **[What are the benefits offered by Docker App?](#what-are-the-benefits-offered-by-docker-app)**+- **[How does Docker App work?](#how-does-docker-app-work)**+- **[Using Docker App](#using-docker-app)**+    * **[Writing an App definition](#writing-an-app-definition)**+    * **[Building an App image](#building-an-app-image)**+    * **[Sharing the App on the Hub](#sharing-the-app-on-the-hub)**+    * **[Running the App](#running-the-app)**+- **[Example](#example)**+    * **[App definition](#app-definition)**+    * **[Using parameters](#using-parameters)**+    * **[Building an App image](#building-an-app-image)**+    * **[Sharing and running the App](#sharing-and-running-the-app)**+- **[CNAB](#cnab)**+- **[Installation](#installation)**+    * **[Linux or macOS](#linux-or-macos)**+    * **[Windows](#windows)**+- **[Next steps](#next-steps)** -Compose files do a great job of describing a set of related services. Not only-are Compose files easy to write, they are generally easy to read as well.-However, a couple of problems often emerge:+## What are the benefits offered by Docker App? -1. You have several environments where you want to deploy the application, with small configuration differences-1. You have lots of similar applications+* Simple management of Docker Apps across different teams and between different environments (Development/QA/Staging/Production)+* Easy sharing of multi-service applications to container registries (e.g., [Docker Hub](https://hub.docker.com/) or [Docker Trusted Registry](https://docs.docker.com/ee/dtr/))+* Having a clear separation of parameters to be modified at runtime +* Support for multiple orchestrators (Swarm or Kubernetes)+* Provides the very same UX flow as the one for Docker images+* Implements the [CNAB](https://cnab.io) industry standard+* Offers full support of Docker Contexts -Fundamentally, Compose files are not easy to share between concerns. Docker-Application Packages aim to solve these problems and make Compose more useful-for development _and_ production.+## How does Docker App work? -## Looking at an example+The Docker App workflow is quite similar to the Docker image workflow. From an App definition, you can build an App image, share it on Docker Hub, and run your App on an orchestrator. -Let's take the following Compose file. It launches an HTTP server which prints-the specified text when hit on the configured port.+![Image showing Docker CLI command flow](DockerAppCLIcommands.png)++## Using Docker App++Four primary steps comprise the Docker App process:+1. Writing an App Definition+1. Building an App Image+1. Sharing the App on the Hub (optional)+1. Running the App++### Writing an App definition++The first step in using Docker App is to write the App definition. This definition can be created (1) from an existing Compose file using the `docker app init` command (2) via  a template from the [Application Designer](https://docs.docker.com/ee/desktop/app-designer/), or (3) from scratch. ++The App definition is a .dockerapp folder that contains three distinct pieces: metadata, a service list, and the parameters. ++| File | Description |+| :------------ | :------------ |+| metadata.yml | metadata including the App name and version |+| docker-compose.yml | Service list defined in a [Compose file](https://docs.docker.com/compose/compose-file/) |+| parameters.yml | Parameters that can be changed when running the App |++*Note: To store additional files in Docker Apps, such as* `prod.yml`*,* `test.yml` *or other config files, you need only to add these files to the *.dockerapp directory. All files will be packaged into the App image through the use of the* `docker app build`  *command.*++### Building an App image++Once the App definition is written, the next step is to build the App image from the App definition using the `docker app build` command. With this command you can tag your App image, set build-time variables, or make the build quiet. +Note that service images inside of an App image are immutable, meaning that the App version ties to a fixed list of service images (i.e., updating the images inside of a Docker App requires rebuilding the App image).++### Sharing the App on the Hub++You can push any App image already built or pulled to Docker Hub (or any registry) using the `docker app push` command. You can also pull App images from any container registry using the `docker app pull` command.

s/registry/OCI compliant registry/

OCI

carolinebriaud

comment created time in 2 months

Pull request review commentdocker/app

Update README to reflect the UX changes in Docker App

-# Docker Application+# Docker App -A Docker CLI Plugin to configure, share and install applications:-* Extend [Compose files](https://docs.docker.com/compose/compose-file/) with metadata and parameters-* Re-use same application across multiple environments (Development/QA/Staging/Production)-* Multi orchestrator installation (Swarm or Kubernetes)-* Push/Pull/[Promotion](https://docs.docker.com/ee/dtr/user/promotion-policies/internal-promotion/)/[Signing](https://docs.docker.com/engine/security/trust/content_trust/) supported for application, with same workflow as images-* Fully [CNAB](https://cnab.io) compliant-* Full support of Docker Contexts+Docker App is a Cloud Native application packaging framework with which developers and devops can  build, share, and run a set of microservices as a single entity. Docker Apps are based on the [Compose format](https://docs.docker.com/compose/compose-file/), which permits [docker-compose](https://github.com/docker/compose) users to easily share their Compose-based multiservice applications via container registries. By leveraging containers, Docker App makes it possible to easily change parts of the application and to share the application through container registries. -## The problem Application Packages solves+### Table of Contents+- **[What are the benefits offered by Docker App?](#what-are-the-benefits-offered-by-docker-app)**+- **[How does Docker App work?](#how-does-docker-app-work)**+- **[Using Docker App](#using-docker-app)**+    * **[Writing an App definition](#writing-an-app-definition)**+    * **[Building an App image](#building-an-app-image)**+    * **[Sharing the App on the Hub](#sharing-the-app-on-the-hub)**+    * **[Running the App](#running-the-app)**+- **[Example](#example)**+    * **[App definition](#app-definition)**+    * **[Using parameters](#using-parameters)**+    * **[Building an App image](#building-an-app-image)**+    * **[Sharing and running the App](#sharing-and-running-the-app)**+- **[CNAB](#cnab)**+- **[Installation](#installation)**+    * **[Linux or macOS](#linux-or-macos)**+    * **[Windows](#windows)**+- **[Next steps](#next-steps)** -Compose files do a great job of describing a set of related services. Not only-are Compose files easy to write, they are generally easy to read as well.-However, a couple of problems often emerge:+## What are the benefits offered by Docker App? -1. You have several environments where you want to deploy the application, with small configuration differences-1. You have lots of similar applications+* Simple management of Docker Apps across different teams and between different environments (Development/QA/Staging/Production)+* Easy sharing of multi-service applications to container registries (e.g., [Docker Hub](https://hub.docker.com/) or [Docker Trusted Registry](https://docs.docker.com/ee/dtr/))+* Having a clear separation of parameters to be modified at runtime +* Support for multiple orchestrators (Swarm or Kubernetes)+* Provides the very same UX flow as the one for Docker images+* Implements the [CNAB](https://cnab.io) industry standard+* Offers full support of Docker Contexts -Fundamentally, Compose files are not easy to share between concerns. Docker-Application Packages aim to solve these problems and make Compose more useful-for development _and_ production.+## How does Docker App work? -## Looking at an example+The Docker App workflow is quite similar to the Docker image workflow. From an App definition, you can build an App image, share it on Docker Hub, and run your App on an orchestrator. -Let's take the following Compose file. It launches an HTTP server which prints-the specified text when hit on the configured port.+![Image showing Docker CLI command flow](DockerAppCLIcommands.png)++## Using Docker App++Four primary steps comprise the Docker App process:+1. Writing an App Definition+1. Building an App Image+1. Sharing the App on the Hub (optional)+1. Running the App++### Writing an App definition++The first step in using Docker App is to write the App definition. This definition can be created (1) from an existing Compose file using the `docker app init` command (2) via  a template from the [Application Designer](https://docs.docker.com/ee/desktop/app-designer/), or (3) from scratch. ++The App definition is a .dockerapp folder that contains three distinct pieces: metadata, a service list, and the parameters. ++| File | Description |+| :------------ | :------------ |+| metadata.yml | metadata including the App name and version |+| docker-compose.yml | Service list defined in a [Compose file](https://docs.docker.com/compose/compose-file/) |+| parameters.yml | Parameters that can be changed when running the App |++*Note: To store additional files in Docker Apps, such as* `prod.yml`*,* `test.yml` *or other config files, you need only to add these files to the *.dockerapp directory. All files will be packaged into the App image through the use of the* `docker app build`  *command.*++### Building an App image++Once the App definition is written, the next step is to build the App image from the App definition using the `docker app build` command. With this command you can tag your App image, set build-time variables, or make the build quiet. +Note that service images inside of an App image are immutable, meaning that the App version ties to a fixed list of service images (i.e., updating the images inside of a Docker App requires rebuilding the App image).

Do we want to say why this is the case? i.e.: as this makes deploying applications more deterministic

carolinebriaud

comment created time in 2 months

Pull request review commentdocker/app

Update README to reflect the UX changes in Docker App

-# Docker Application+# Docker App -A Docker CLI Plugin to configure, share and install applications:-* Extend [Compose files](https://docs.docker.com/compose/compose-file/) with metadata and parameters-* Re-use same application across multiple environments (Development/QA/Staging/Production)-* Multi orchestrator installation (Swarm or Kubernetes)-* Push/Pull/[Promotion](https://docs.docker.com/ee/dtr/user/promotion-policies/internal-promotion/)/[Signing](https://docs.docker.com/engine/security/trust/content_trust/) supported for application, with same workflow as images-* Fully [CNAB](https://cnab.io) compliant-* Full support of Docker Contexts+Docker App is a Cloud Native application packaging framework with which developers and devops can  build, share, and run a set of microservices as a single entity. Docker Apps are based on the [Compose format](https://docs.docker.com/compose/compose-file/), which permits [docker-compose](https://github.com/docker/compose) users to easily share their Compose-based multiservice applications via container registries. By leveraging containers, Docker App makes it possible to easily change parts of the application and to share the application through container registries. -## The problem Application Packages solves+### Table of Contents+- **[What are the benefits offered by Docker App?](#what-are-the-benefits-offered-by-docker-app)**+- **[How does Docker App work?](#how-does-docker-app-work)**+- **[Using Docker App](#using-docker-app)**+    * **[Writing an App definition](#writing-an-app-definition)**+    * **[Building an App image](#building-an-app-image)**+    * **[Sharing the App on the Hub](#sharing-the-app-on-the-hub)**+    * **[Running the App](#running-the-app)**+- **[Example](#example)**+    * **[App definition](#app-definition)**+    * **[Using parameters](#using-parameters)**+    * **[Building an App image](#building-an-app-image)**+    * **[Sharing and running the App](#sharing-and-running-the-app)**+- **[CNAB](#cnab)**+- **[Installation](#installation)**+    * **[Linux or macOS](#linux-or-macos)**+    * **[Windows](#windows)**+- **[Next steps](#next-steps)** -Compose files do a great job of describing a set of related services. Not only-are Compose files easy to write, they are generally easy to read as well.-However, a couple of problems often emerge:+## What are the benefits offered by Docker App? -1. You have several environments where you want to deploy the application, with small configuration differences-1. You have lots of similar applications+* Simple management of Docker Apps across different teams and between different environments (Development/QA/Staging/Production)+* Easy sharing of multi-service applications to container registries (e.g., [Docker Hub](https://hub.docker.com/) or [Docker Trusted Registry](https://docs.docker.com/ee/dtr/))+* Having a clear separation of parameters to be modified at runtime +* Support for multiple orchestrators (Swarm or Kubernetes)+* Provides the very same UX flow as the one for Docker images+* Implements the [CNAB](https://cnab.io) industry standard+* Offers full support of Docker Contexts

s/of/for/

carolinebriaud

comment created time in 2 months

push eventdocker/app

Ulysses Souza

commit sha d2c567b4d3a896d9a0de0c2bff0b5c11915a268a

Add warnings for env_file entries not copied As 'env_file' entries are not taken in account, we warn the user to copy that and fix it's compose file. Signed-off-by: Ulysses Souza <ulysses.souza@docker.com>

view details

Chris Crone

commit sha c7927e1906d8637cd044be908b7eeb73720821ec

Merge pull request #610 from ulyssessouza/add-env_file-warning Add warnings for env_file entries not copied

view details

push time in 3 months

PR merged docker/app

Reviewers
Add warnings for env_file entries not copied status/0-triage

As 'env_file' entries are not taken in account, we warn the user to copy that and fix it's compose file.

- What I did Add a warning for each env_file entry on each service

- How I did it By checking the env_file block for each service entry in docker app init

- How to verify it Create a docker-compose.yml file with:

version: '3.7'
services:
  front:
    image: "nginx"
    env_file:
     - "myenv.env1"
     - "myenv.env2"

Run:

docker app init --compose-file docker-compose.yml myapp

- Description for the changelog Add warnings for env_file entries not copied

- A picture of a cute animal (not mandatory but encouraged) sweater-baby-goat

+140 -22

2 comments

7 changed files

ulyssessouza

pr closed time in 3 months

push eventchris-crone/app

Christopher Crone

commit sha 88fcef1b2094b07ef42130c69a10d02674cb67a3

Download Docker CLI instead of building it Download the macOS and Linux Docker CLI from download.docker.com instead of building them. Signed-off-by: Christopher Crone <christopher.crone@docker.com>

view details

push time in 3 months

pull request commentdocker/app

[rfd] Use dockerCli.Out() / Err()

I think we've actually implemented this in the time since you opened this PR @thaJeztah :) Thanks for the suggestion!

I'll close this and we'll open other issues if we find places we forgot to do this.

thaJeztah

comment created time in 3 months

PR closed docker/app

[rfd] Use dockerCli.Out() / Err() status/0-triage

Quick 5-minute write-up;

This should likely not make a difference for most situations, but try to keep a single source of truth where to print output

There's still some occurences of os.Stdout to detect if a terminal is attached, so perhaps we need a central solution for that

+28 -31

5 comments

11 changed files

thaJeztah

pr closed time in 3 months

push eventchris-crone/app

Nick Adcock

commit sha bdbcf4d0a5e482a940e1100606f0ef407b4fbc30

Add note to enable BuildKit to build in docker Adds a note in the "Build using Docker" section of BUILDING.md to explain that BuildKit is required and how to enable it. Signed-off-by: Nick Adcock <nick.adcock@docker.com>

view details

Yves Brissaud

commit sha dc83704d7f3c3538e6762f5ae907ee617b453d33

Update cnab-to-oci to v0.3.0-beta1 and cnab schema version to 1.0.0 Allow to push all images from the push/fixup command Signed-off-by: Yves Brissaud <yves.brissaud@docker.com>

view details

Yves Brissaud

commit sha c9a62caae9af6ffc053c176ef863ab8f1ff2e4ce

Bump cnab-go and others Signed-off-by: Yves Brissaud <yves.brissaud@docker.com>

view details

Yves Brissaud

commit sha afe63d7ce651861346174b6ad651c04ad5e4f0b0

Enable AutoBundleUpdate from cnab-to-oci Signed-off-by: Yves Brissaud <yves.brissaud@docker.com>

view details

Yves Brissaud

commit sha 7c4126b1577aa02d71949bcc70fb48d40088994d

Enable push of images from cnab-to-oci Signed-off-by: Yves Brissaud <yves.brissaud@docker.com>

view details

Yves Brissaud

commit sha 447b9e250f157287e2ce9aa8e9372c55eae57ddc

Remove platform flag for push Signed-off-by: Yves Brissaud <yves.brissaud@docker.com>

view details

Yves Brissaud

commit sha f2408b6d08021059c894ef5da17457c5888e8844

Remove tag flag for push Signed-off-by: Yves Brissaud <yves.brissaud@docker.com>

view details

Yves Brissaud

commit sha 4eba2d7938dea8026e617d6cf20498f9b333c532

Fix compose file in e2e test Only visible when trying to install it but still an issue Signed-off-by: Yves Brissaud <yves.brissaud@docker.com>

view details

Yves Brissaud

commit sha 303135afd0f197bbc09569390a168d353f38f43e

Move and remove e2e methods Signed-off-by: Yves Brissaud <yves.brissaud@docker.com>

view details

Yves Brissaud

commit sha de787f11db21f6af4b59801347bf4c4fe118a349

Fix various modification in e2e tests By example we do not display the full reference anymore but use relocation map Signed-off-by: Yves Brissaud <yves.brissaud@docker.com>

view details

Yves Brissaud

commit sha 42218d2f214f26177b64d872dfe7e45224669fb1

cnab-go OperationConfigs panic if we pass a nil function Signed-off-by: Yves Brissaud <yves.brissaud@docker.com>

view details

Yves Brissaud

commit sha d48d5cc36ca826b183f33d4569b4afd2ad422d27

save relocation map from cnab-to-oci When a relocation map is generated from `cnab-to-oci` save it within the same directory as the `bundle.json` file. More information about reloaction map can be found in corresponding `cnab-to-oci` issue: https://github.com/docker/cnab-to-oci/issues/58 The `bundle.Bundle` struct is now wrapped in a `relocated.Bundle` that will also contain the relocation map. Methods to fetch `bundle.json` and `relocation-map.json` as well as en entire bundle with the relocation map at once are moved to a `fetch` package to avoid dependency cycle. Signed-off-by: Yves Brissaud <yves.brissaud@docker.com>

view details

Yves Brissaud

commit sha d0cc6fb0a8233af6d9c382b6b557c54e3f9f399e

apply relocation map when creating the installation Allow to replace local images by the one from the registry using stored `relocation-map.json` when creating the installation. The `bundle.json` is not modified. Signed-off-by: Yves Brissaud <yves.brissaud@docker.com>

view details

Yves Brissaud

commit sha 0f5dd8a5623bbd7e7739abeaa445ac44fc8bfae0

fix coverage issues Be sure to remove the non needed lines. Signed-off-by: Yves Brissaud <yves.brissaud@docker.com>

view details

Nick Adcock

commit sha bff05c35001c6c7c46d0d90662e7c1a57181f006

Merge pull request #729 from zappy-shu/enable-buildkit-to-build-with-docker Add note to enable BuildKit to build in docker

view details

Djordje Lukic

commit sha 44932b629b0541b28d0898c5dfac6a5f978d1ba1

Merge pull request #719 from eunomie/relocation-push Push local docker images and use relocation map

view details

Christopher Crone

commit sha c2ed96b365d76f6a157608dfa4c2906981e34b3c

Download Docker CLI instead of building it Download the macOS and Linux Docker CLI from download.docker.com instead of building them. Signed-off-by: Christopher Crone <christopher.crone@docker.com>

view details

push time in 3 months

push eventchris-crone/app

Ulysses Souza

commit sha 0fe1aaf45452efa60fe66dbd710d6cf8b290c180

Remove target-context flags Signed-off-by: Ulysses Souza <ulysses.souza@docker.com> Signed-off-by: Nicolas De Loof <nicolas.deloof@gmail.com>

view details

Nicolas De Loof

commit sha f9acea2cf48c2588750e99feae7f73ca70165acc

Introduce --installer-context option Create a new DockerCli used to run installer image within requested context cli.Cli (not DockerCli implementation) doesn't offer any way to switch contexts once intialized. Signed-off-by: Nicolas De Loof <nicolas.deloof@gmail.com>

view details

Nicolas De Loof

commit sha 020761c25da09c5a15f4001a85ed300197c0ea3c

We can't access DinD by `localhost` from within the installer image, this would only resolve to container's loopback so we use computer external IP Signed-off-by: Nicolas De Loof <nicolas.deloof@gmail.com>

view details

Nicolas De Loof

commit sha d10e2f5c88faaccd01ff303b5f9e12d34608fbc3

Use of registryAdress makes tests flacky as tabwritter will change formatting depending on number of digits in IP address 10.100.97.67:32795/c-myapp:latest 10.100.102.144:32795/c-myapp:latest Signed-off-by: Nicolas De Loof <nicolas.deloof@gmail.com>

view details

Nicolas De Loof

commit sha 82878c7a8aeba517d146c37614217e3e5e03ee0e

Use ChooseHostInterface from kube to select interface We need to select interface used to access default gateway, as docker0 bridge or Windows DockerNAT won't route traffic to containers by exposed port Signed-off-by: Nicolas De Loof <nicolas.deloof@gmail.com>

view details

Nicolas De Loof

commit sha c1a821753d6c48f467502048efc9e2365303f354

Fix rebase issues Signed-off-by: Nicolas De Loof <nicolas.deloof@gmail.com>

view details

Nicolas De Loof

commit sha 8beb2f139853113b3389cc6eeb75ce7d6b27997e

Discover the IP address to based on default gateway Without this check, Linux bridge docker0 or Winwdows DockerNAT could be selected as "host IP" but won't allow to route to container Same issue probalby exists on Linux with docker0 bridge Here we discover the default gateway, and search for the interface configured on the same network. Signed-off-by: Nicolas De Loof <nicolas.deloof@gmail.com>

view details

Nicolas De Loof

commit sha a850314fdb21ba957de48af7042adc82c5dce36c

Document new --installer-context option Signed-off-by: Nicolas De Loof <nicolas.deloof@gmail.com>

view details

Christopher Crone

commit sha 1effbfb009ed60c246526bcb4238567e7486147e

Download Docker CLI instead of building it Download the macOS and Linux Docker CLI from download.docker.com instead of building them. Signed-off-by: Christopher Crone <christopher.crone@docker.com>

view details

push time in 3 months

PR opened docker/app

Reviewers
Download Docker CLI instead of building it

<!-- Please make sure you've read and understood our contributing guidelines; https://github.com/docker/app/blob/master/CONTRIBUTING.md

** Make sure all your commits include a signature generated with git commit -s **

For additional information on our contributing process, read our contributing guide https://docs.docker.com/opensource/code/

If this is a bug fix, make sure your description includes "fixes #xxxx", or "closes #xxxx"

Please provide the following information: -->

- What I did Download the CLI for macOS and Linux as they are available on download.docker.com. This should make the build slightly faster.

Note the CLI is only used for testing – we do not ship it.

- How I did it Replace build with curl.

- How to verify it Existing tests should pass.

- Description for the changelog <!-- Write a short (one line) summary that describes the changes in this pull request for inclusion in the changelog: --> N/A

- A picture of a cute animal (not mandatory)

+8 -3

0 comment

1 changed file

pr created time in 3 months

create barnchchris-crone/app

branch : download-cli

created branch time in 3 months

issue commentdocker/compose

Allow colors for container log messages to be specified in docker-compose.yml

Hi @Greek64,

We see the Compose format as a way of modelling container based applications and use it not only for docker-compose but also for Swarm and Kubernetes (with docker stack deploy). As such, I don't think that a service level log colour in the format makes sense as other orchestrators wouldn't use it.

We could consider a docker-compose specific label or something though. What use case is not solved by the colours being deterministic as they are with #6996?

jwiegley

comment created time in 3 months

push eventdocker/app

Nick Adcock

commit sha fe99fdacbb35ac5996e5226488052447dc01da73

Add --digests flag to image ls Added the --digests flag to image ls. This makes the image ls command print the image digests (if present) along with the app name and image. Signed-off-by: Nick Adcock <nick.adcock@docker.com>

view details

Nick Adcock

commit sha fd651ed687a579045773fd05c24843394c1eb02f

remove temp dirs from image list tests Removed the temporary directories from being created in the app image ls tests as they are not used. Signed-off-by: Nick Adcock <nick.adcock@docker.com>

view details

Nick Adcock

commit sha 24ced43b0d04970183b3ad7f7a9eea606eedc399

split image ls output to repo and tag Split the app image ls output up so that the REPOSITORY and TAG are separate columns, the same as the standard docker image ls. The APP IMAGE ID column is now a default column, same as the ID column in docker image ls. As this ID is randomly generated the e2e tests have been updated to use regexes when asserting the command output. Signed-off-by: Nick Adcock <nick.adcock@docker.com>

view details

Chris Crone

commit sha 8acd0a838a7b0632f120fcfbb6443f897de62ad7

Merge pull request #709 from zappy-shu/add-digest-flag-to-ls Rework docker app image ls and add the --digests flag

view details

push time in 3 months

PR merged docker/app

Rework docker app image ls and add the --digests flag status/0-triage

- WIP Need to get an e2e or unit test that covers the digest.

- What I did

Reworked the image ls output to better match the docker image ls command. The output now has separate columns for REPOSITORY and TAG as well as an APP IMAGE ID column.

Added the --digests flag to image ls. This makes the image ls command print the image digests (if present) along with the other columns.

- How I did it

Made the columns list for image ls dynamic depending on what options are sent. The digest is retrieved by attempted to cast to a Digested type (i.e. the image has been stored by digest rather than by tag or ID). If not then just prints <none>.

- How to verify it

Pull an image from hub by digest and then run app image ls --digest. The image in question should show the digest prefixed by the algorithm type. E.g.

REPOSITORY   TAG    DIGEST          APP IMAGE ID APP NAME
<repository> <none> sha256@<digest> <id>         <name>

- Description for the changelog <!-- Write a short (one line) summary that describes the changes in this pull request for inclusion in the changelog: --> Added the --digests flag to the app image ls command. When present, the command will print the image's digest or <none> if the image does not have a digest, along with other image details.

- A picture of a cute animal (not mandatory but encouraged)

pp

+205 -91

4 comments

3 changed files

zappy-shu

pr closed time in 3 months

pull request commentdocker/app

Rework docker app image ls and add the --digests flag

Do we want to update the app tabwriter so the spacing match the CLI?

Yes. That will make the feel the same.

Probably best do the others as part of a separate PR though

👍 Please just create a ticket to track

zappy-shu

comment created time in 3 months

pull request commentdocker/app

Rework docker app image ls and add the --digests flag

Is the spacing between the columns the same as for container images? From the following, It looks to me like app has less spaces.

➜  app git:(add-digest-flag-to-ls) docker app image ls
REPOSITORY       TAG  APP IMAGE ID APP NAME
ccrone/cnab-demo yves 6cca8f6428a9 coins
ccrone/cnab-demo yves 6cca8f6428a9 coins
➜  app git:(add-digest-flag-to-ls) docker images
REPOSITORY             TAG                           IMAGE ID            CREATED             SIZE
docker/cnab-app-base   v0.9.0-zeta1-66-g24ced43b0d   f5d2426e6a7f        2 minutes ago       47.7MB
ccrone/cnab-demo       <none>                        51a16e185d83        59 minutes ago      47.2MB
ccrone/cnab-demo       <none>                        7cc9617f5c36        About an hour ago   218MB
ccrone/cnab-demo       <none>                        de25a81a5a0b        2 weeks ago         98.2MB
zappy-shu

comment created time in 3 months

Pull request review commentdocker/app

Push local docker images

+FROM scratch++COPY . .

nit: \n

eunomie

comment created time in 3 months

Pull request review commentdocker/app

Push local docker images

+services:+  web:+    port: 1234

nit: \n

eunomie

comment created time in 3 months

push eventchris-crone/cli

Christopher Crone

commit sha e4d3c360b24f36568180211045fa8b5675104452

Bump Compose on Kubernetes Signed-off-by: Christopher Crone <christopher.crone@docker.com>

view details

push time in 3 months

push eventchris-crone/compose-on-kubernetes

Christopher Crone

commit sha 5f676d04e487f914dfa666c6ab887dda44dbe30b

WIP: Disable bind mount test Signed-off-by: Christopher Crone <christopher.crone@docker.com>

view details

push time in 3 months

Pull request review commentdocker/compose-on-kubernetes

Better handle unstable releases

 aliases:     - attach_workspace:         at: /root     - setup_remote_docker:-        version: 18.06.0-ce+        version: 18.09.3

nit: why not 19.03?

silvin-lubecki

comment created time in 3 months

pull request commentdocker/compose

Copy over compose format 3.8 from docker/cli

I would argue that fields and changes made in docker/cli should override those in docker/compose for 3.x formats.

I would agree on this. We have an internal ticket tracking this, we just haven't prioritised it yet. I'll chat to our PM and see when we can fit it in.

sirlatrom

comment created time in 3 months

Pull request review commentdocker/app

Fix handling short id in docker app commands

 func runTag(bundleStore store.BundleStore, srcAppImage, destAppImage string) err }  func readBundle(name string, bundleStore store.BundleStore) (*bundle.Bundle, error) {-	cnabRef, err := store.StringToRef(name)+	cnabRef, err := bundleStore.LookUp(name) 	if err != nil {-		return nil, err+		switch err.(type) {+		case *store.UnknownReferenceError:+			return nil, fmt.Errorf("could not tag '%s': no such App image", name)

Same question for line 56 and 63

jcsirot

comment created time in 3 months

Pull request review commentdocker/app

Fix handling short id in docker app commands

 func ResolveBundle(dockerCli command.Cli, bundleStore appstore.BundleStore, name  // GetBundle searches for the bundle locally and tries to pull it if not found func GetBundle(dockerCli command.Cli, bundleStore appstore.BundleStore, name string) (*bundle.Bundle, reference.Reference, error) {-	ref, err := store.StringToRef(name)+	bndl, ref, err := getBundleFromStore(bundleStore, name) 	if err != nil {+		named, err := store.StringToNamedRef(name)+		if err != nil {+			return nil, nil, err+		}+		fmt.Fprintf(dockerCli.Err(), "Unable to find App image %q locally\n", reference.FamiliarString(named))+		fmt.Fprintf(dockerCli.Out(), "Pulling from registry...\n")+		bndl, err = PullBundle(dockerCli, bundleStore, named)+		if err != nil {+			return nil, nil, err+		}+		ref = named+	}+	return bndl, ref, nil+}++func getBundleFromStore(bundleStore appstore.BundleStore, name string) (*bundle.Bundle, reference.Reference, error) {+	ref, err := bundleStore.LookUp(name)+	if err != nil {+		logrus.Debugf(`Unable to find reference %q in the bundle store`, name)

nit: don't need back quotes here.

jcsirot

comment created time in 3 months

Pull request review commentdocker/app

Fix handling short id in docker app commands

 func runTag(bundleStore store.BundleStore, srcAppImage, destAppImage string) err }  func readBundle(name string, bundleStore store.BundleStore) (*bundle.Bundle, error) {-	cnabRef, err := store.StringToRef(name)+	cnabRef, err := bundleStore.LookUp(name) 	if err != nil {-		return nil, err+		switch err.(type) {+		case *store.UnknownReferenceError:+			return nil, fmt.Errorf("could not tag '%s': no such App image", name)

nit: is there a reason we use single quotes here but double quote elsewhere?

jcsirot

comment created time in 3 months

Pull request review commentdocker/app

Fix handling short id in docker app commands

 func runTag(bundleStore store.BundleStore, srcAppImage, destAppImage string) err }  func readBundle(name string, bundleStore store.BundleStore) (*bundle.Bundle, error) {-	cnabRef, err := store.StringToRef(name)+	cnabRef, err := bundleStore.LookUp(name) 	if err != nil {-		return nil, err+		switch err.(type) {+		case *store.UnknownReferenceError:+			return nil, fmt.Errorf("could not tag '%s': no such App image", name)

Looking further down, it appears this was the case from before

jcsirot

comment created time in 3 months

Pull request review commentdocker/app

Fix handling short id in docker app commands

 func ResolveBundle(dockerCli command.Cli, bundleStore appstore.BundleStore, name  // GetBundle searches for the bundle locally and tries to pull it if not found func GetBundle(dockerCli command.Cli, bundleStore appstore.BundleStore, name string) (*bundle.Bundle, reference.Reference, error) {-	ref, err := store.StringToRef(name)+	bndl, ref, err := getBundleFromStore(bundleStore, name) 	if err != nil {+		named, err := store.StringToNamedRef(name)+		if err != nil {+			return nil, nil, err+		}+		fmt.Fprintf(dockerCli.Err(), "Unable to find App image %q locally\n", reference.FamiliarString(named))+		fmt.Fprintf(dockerCli.Out(), "Pulling from registry...\n")+		bndl, err = PullBundle(dockerCli, bundleStore, named)+		if err != nil {+			return nil, nil, err+		}+		ref = named+	}+	return bndl, ref, nil+}++func getBundleFromStore(bundleStore appstore.BundleStore, name string) (*bundle.Bundle, reference.Reference, error) {+	ref, err := bundleStore.LookUp(name)+	if err != nil {+		logrus.Debugf(`Unable to find reference %q in the bundle store`, name) 		return nil, nil, err 	} 	bndl, err := bundleStore.Read(ref) 	if err != nil {-		fmt.Fprintf(dockerCli.Err(), "Unable to find App image %q locally\n", reference.FamiliarString(ref))--		fmt.Fprintf(dockerCli.Out(), "Pulling from registry...\n")-		if named, ok := ref.(reference.Named); ok {-			bndl, err = PullBundle(dockerCli, bundleStore, named)-			if err != nil {-				return nil, nil, err-			}-		}+		logrus.Debugf(`Unable to read bundle %q from store`, reference.FamiliarString(ref))

nit: don't need back quotes here.

jcsirot

comment created time in 3 months

pull request commentdocker/app

Add service image build example

I still need to add a readme for this so will leave it in draft until that's done.

chris-crone

comment created time in 3 months

push eventchris-crone/app

Christopher Crone

commit sha 6bc0a3fb12e05f8662e2d2819993163ec3d49c2b

Add service image build example Signed-off-by: Christopher Crone <christopher.crone@docker.com>

view details

push time in 3 months

PR opened docker/app

Add service image build example

- What I did Added an example of a Docker App that has service images that can be built.

- Description for the changelog N/A

+73 -0

0 comment

7 changed files

pr created time in 3 months

create barnchchris-crone/app

branch : service-build-demo

created branch time in 3 months

pull request commentdocker/compose

Add support to CLI build

This PR is included in the 1.25.0-rc3 release that you can find here. It will also be part of the next Docker Desktop edge release.

ulyssessouza

comment created time in 3 months

push eventchris-crone/app

Christopher Crone

commit sha 9c1bd62523998d516ba9d5e38058ca22b7f477c6

CI: Only clean images if there are any Signed-off-by: Christopher Crone <christopher.crone@docker.com>

view details

push time in 3 months

push eventchris-crone/app

Christopher Crone

commit sha d00102713017ed0949b8d382900b5497d558adc8

CI: Only clean images if there are any Signed-off-by: Christopher Crone <christopher.crone@docker.com>

view details

push time in 3 months

push eventchris-crone/app

Christopher Crone

commit sha 03f591935a482b49fbb46dc24c5cf63a7801acc6

Use docker build output for binaries Signed-off-by: Christopher Crone <christopher.crone@docker.com>

view details

push time in 3 months

push eventchris-crone/app

Caroline Briaud

commit sha b07e744df9a428c4bb8e390086222d6aa2070cfc

[b9bd12a5] Fix object naming in command help and update examples, e2E tests and file linting. Remove bracket changes in command usage message. Take into account feedback from Silvin, Chris and Nicolas. Signed-off-by: Caroline Briaud <caroline.briaud@docker.com>

view details

Silvin Lubecki

commit sha 6e215e76fb627208ad5e198c97838c3fa96e8bd5

Merge pull request #704 from carolinebriaud/fix-usages-examples Consistent object naming in usage command and examples

view details

Caroline Briaud

commit sha 2ec23c8874b7d2e339184cfba3c1f876015eb4f5

Use app naming rules in error and progress messages Signed-off-by: Caroline Briaud <caroline.briaud@docker.com>

view details

Caroline Briaud

commit sha d20c612cf55c9e72d30da2d843e7b4a425aa5c38

Fix e2e Signed-off-by: Caroline Briaud <caroline.briaud@docker.com>

view details

Caroline Briaud

commit sha 0abe6b4dbf581616e955ee40e014ffdbaaffd327

Fix another e2e Signed-off-by: Caroline Briaud <caroline.briaud@docker.com>

view details

Silvin Lubecki

commit sha 0ffdc1875e85fea06a3e969243e4f535743f5952

Merge pull request #713 from carolinebriaud/fix-usages-examples Use app naming rules in error and progress messages

view details

Christopher Crone

commit sha 162131de180999b1b3a4799922c173577a5fc67f

Activate BuildKit on CI Signed-off-by: Christopher Crone <christopher.crone@docker.com>

view details

Chris Crone

commit sha 0d08d65d197bca24f6c2cc7628b8b6971457d5f0

Merge pull request #714 from chris-crone/buildkit-ci Activate BuildKit on CI

view details

Christopher Crone

commit sha d82f79998a6c57649b2ac5d2775f2c5599e5e752

Use docker build output for binaries Signed-off-by: Christopher Crone <christopher.crone@docker.com>

view details

push time in 3 months

PR merged docker/app

Reviewers
Activate BuildKit on CI status/0-triage

- What I did Activated BuildKit for the CI.

- How I did it Set DOCKER_BUILDKIT=1 in the Jenkinsfiles.

- How to verify it

- Description for the changelog N/A

- A picture of a cute animal (not mandatory but encouraged)

+3 -1

1 comment

2 changed files

chris-crone

pr closed time in 3 months

push eventdocker/app

Christopher Crone

commit sha 162131de180999b1b3a4799922c173577a5fc67f

Activate BuildKit on CI Signed-off-by: Christopher Crone <christopher.crone@docker.com>

view details

Chris Crone

commit sha 0d08d65d197bca24f6c2cc7628b8b6971457d5f0

Merge pull request #714 from chris-crone/buildkit-ci Activate BuildKit on CI

view details

push time in 3 months

PR opened docker/app

Reviewers
Activate BuildKit on CI

- What I did Activated BuildKit for the CI.

- How I did it Set DOCKER_BUILDKIT=1 in the Jenkinsfiles.

- How to verify it

- Description for the changelog N/A

- A picture of a cute animal (not mandatory but encouraged)

+3 -1

0 comment

2 changed files

pr created time in 3 months

create barnchchris-crone/app

branch : buildkit-ci

created branch time in 3 months

pull request commentdocker/app

Use docker build output for binaries

I think this is because we don't use BuildKit on the CI

chris-crone

comment created time in 3 months

push eventchris-crone/app

Christopher Crone

commit sha 0de7446c06ca7525af85b9d76debd24d1557b7bb

Use docker build output for binaries Signed-off-by: Christopher Crone <christopher.crone@docker.com>

view details

push time in 3 months

Pull request review commentdocker/cli

CircleCI: add some info steps, and re-group jobs

 jobs:           reusable: true           exclusive: false       - run:+          name: "Docker version"           command: docker version       - run:-          name: "Lint"+          name: "Docker info"+          command: docker info+      - run:+          name: "Lint - build image"           command: |             docker build --progress=plain -f dockerfiles/Dockerfile.lint --tag cli-linter:$CIRCLE_BUILD_NUM .+      - run:

nit: which is quicker lint or spell check? I'd put the quicker one first so that we can fail faster

thaJeztah

comment created time in 3 months

PR opened docker/app

Reviewers
Use docker build output for binaries

- What I did Leveraged docker build --output to get artefacts from images. This means that we can avoid doing docker build && docker container create && docker cp && docker rm.

- How I did it

- How to verify it Existing tests should all pass.

- Description for the changelog N/A

- A picture of a cute animal (not mandatory but encouraged)

+28 -27

0 comment

3 changed files

pr created time in 3 months

create barnchchris-crone/app

branch : build-output

created branch time in 3 months

Pull request review commentdocker/app

Consistent object naming in usage command and examples

 func muteDockerCli(dockerCli command.Cli) func() { func inspectCmd(dockerCli command.Cli) *cobra.Command { 	var opts inspectOptions 	cmd := &cobra.Command{-		Use:   "inspect [APP_NAME] [OPTIONS]",-		Short: "Shows metadata, parameters and a summary of the Compose file for a given application",-		Example: `$ docker app inspect my-installed-app-$docker app inspect my-app:1.0.0`,+		Use:   "inspect [OPTIONS] APP_IMAGE",+		Short: "Display detailed information on an App image",

s/on/about/

carolinebriaud

comment created time in 3 months

push eventthaJeztah/app

Silvin Lubecki

commit sha 472296922536b5817e7c764b37569d90af41950e

Add --tag flag to the bundle command to persist the bundle in the local bundle store. Installation or any other command will be able to use this reference. Invocation image is using the same name, appending "-invoc" to the tag. Signed-off-by: Silvin Lubecki <silvin.lubecki@docker.com>

view details

Ian Campbell

commit sha 5a5671062f878c5bf49c159668c2bacff82820ad

inspect: sort services, networks, volumes and secrets by name Networks, Volumes and Secrets are maps so iteration is randomized by the runtime. Although Services are an slice here they have, at some point, be laundered through a map and so also need sorting. Test by adding a second instance of each to the "full" test case and by always inspecting twice (in case the first one got lucky). Fixes: #525 Signed-off-by: Ian Campbell <ijc@docker.com>

view details

Jean-Christophe Sirot

commit sha e8e4bb3bd7a5153eeb404aa2b11b6895c17112a3

Add the possibility to configure the base invocation image in the CLI config file. Print invocation base image version in the version command output. The docker app version command has a new --base-invocation-image flag which prints only the name the of image. Useful in order to pull or save the image. Signed-off-by: Jean-Christophe Sirot <jean-christophe.sirot@docker.com>

view details

Chris Crone

commit sha 8aacca23ef721ac2eabf24c8e5841bd9dd47a496

Merge pull request #521 from jcsirot/offline-base-cnab Provide support for using docker app offline

view details

Ian Campbell

commit sha 257a6538b895b3ed67638b5110343bb69a286a45

e2e: Close the config file after writing it. Signed-off-by: Ian Campbell <ijc@docker.com>

view details

Ian Campbell

commit sha 9ece4d778f8926efd074087b15d44b772f14f91d

Allow the user to specify individual credentials on the command line e.g. docker app install --credential name=somevalue bundle.json Credentials added with `--credential` always come after those added with `--credential-set` (irrespective of the order on the command line). A credential specified with `--credential` cannot override any previous credential, including those specified in a credential set. The test bnudle used is based on https://github.com/deislabs/example-bundles/blob/0e8af9a2f1270bd72045a515637a432e74743d5d/example-credentials/bundle.json But with `cnab/example-credentials:latest` → a digested ref (with the digest I pulled today) Signed-off-by: Ian Campbell <ijc@docker.com>

view details

Ian Campbell

commit sha 368989a03ff6c12e08bd821e526a02e1e8cf8e49

Merge pull request #520 from silvin-lubecki/bundle-with-tag Bundle command now saves the bundle to the bundle store

view details

Ian Campbell

commit sha 96d4d9bec487e747ef3a55ba8b30fba4c9039d27

metadata: Add helper to extract docker-app metadata from a bundle. Signed-off-by: Ian Campbell <ijc@docker.com>

view details

Ian Campbell

commit sha 8d7750b30d3584a5a46665ddce778eebd31d3126

push: wrap some errors so the error message has more context. Turns: denied: requested access to the resource is denied into: pushing to "docker.io/library/hello-world:0.1.0-invoc": denied: requested access to the resource is denied Signed-off-by: Ian Campbell <ijc@docker.com>

view details

Ian Campbell

commit sha 11955fe9da0dde16518a436d7204e9ed38d4383c

push: support pushing directly from a bundle file. This is done by providing a new `--bundle` option. Signed-off-by: Ian Campbell <ijc@docker.com>

view details

Ian Campbell

commit sha eca2252364a6bf59c9979e1a842847b14516b59a

push: autodetect when asked to push a bundle ... instead of requiring a separate option, this follows the pattern of `install` et al. Signed-off-by: Ian Campbell <ijc@docker.com>

view details

Ian Campbell

commit sha 594ce0efb50b73275c4f0a0a6a265fbb75a57b6c

e2e: Use subtests in render test. Separate the "file" and "stdio" case since they both error with "rendering mismatch". Signed-off-by: Ian Campbell <ijc@docker.com>

view details

Ian Campbell

commit sha ced138ba830f975b8d733b3b005e8fc9492a5d36

e2e: Add a test for pushing from a bundle and from a ref The use of `!strings.Contains()` in one assertion, rather than `!cmp.Contains()` is due to https://github.com/gotestyourself/gotest.tools/issues/147 Signed-off-by: Ian Campbell <ijc@docker.com>

view details

Silvin Lubecki

commit sha b9539583525ec06cc086e7aca0f2a34e7c1f245f

Merge pull request #529 from ijc/push-from-bundle Push directly from bundle

view details

Jean-Christophe Sirot

commit sha f2fbcae871cd80ba2389fef50879b961c0a2cee5

Merge pull request #531 from ijc/individual-credentials Allow the user to specify individual credentials on the command line

view details

Silvin Lubecki

commit sha b4a8a4a6f97c0289339d9a375b19641f2d1e7723

Bump docker/cli Bump docker/docker Fix last changes on context stores made on docker/cli (the main store interface has been split to multiple smaller interfaces). Signed-off-by: Silvin Lubecki <silvin.lubecki@docker.com>

view details

Silvin Lubecki

commit sha bbeedd73b103ac278537df5dd054b785de5f7eed

Bumping alpine 3.9.3 -> 3.9.4 Bumping golang/golang-cross 1.12.4 -> 1.12.5 Signed-off-by: Silvin Lubecki <silvin.lubecki@docker.com>

view details

Silvin Lubecki

commit sha f5f38732b0044b06064c5330b250f78d5249bd6a

Merge pull request #538 from silvin-lubecki/bump Bumping vendoring and image dependencies

view details

Silvin Lubecki

commit sha cbdc83942eb28a4f16a7bee4029823109104067b

Mark the app plugin as an experimental plugin. Only a cli with experimental flag enabled will list docker app as a plugin. Bump docker/cli to the last 19.03 Signed-off-by: Silvin Lubecki <silvin.lubecki@docker.com>

view details

Silvin Lubecki

commit sha 73d867442d404f3e545e67b80b65545421d90e65

Merge pull request #537 from silvin-lubecki/experimental-plugin Mark docker app plugin as experimental

view details

push time in 3 months

Pull request review commentdocker/app

Introduce --quiet option

 func buildImageUsingBuildx(app *types.App, contextPath string, opt buildOptions, 			Driver: d, 		}, 	}-	pw := progress.NewPrinter(ctx, os.Stderr, opt.progress)++	var out *os.File+	if opt.quiet {+		if out, err = os.Create(os.DevNull); err != nil {+			return nil, err+		}+	} else {+		out = os.NewFile(dockerCli.Out().FD(), "/dev/stdout")

Does /dev/stdout work on Windows?

ndeloof

comment created time in 3 months

Pull request review commentdocker/app

Consistent object naming in usage command and examples

 func runCmd(dockerCli command.Cli) *cobra.Command { 	} 	opts.parametersOptions.addFlags(cmd.Flags()) 	opts.credentialOptions.addFlags(cmd.Flags())-	cmd.Flags().StringVar(&opts.orchestrator, "orchestrator", "", "Orchestrator to install on (swarm, kubernetes)")-	cmd.Flags().StringVar(&opts.kubeNamespace, "namespace", "default", "Kubernetes namespace to install into")-	cmd.Flags().StringVar(&opts.stackName, "name", "", "Assign a name to the installation")+	cmd.Flags().StringVar(&opts.orchestrator, "orchestrator", "", "Orchestrator to run on (swarm, kubernetes)")+	cmd.Flags().StringVar(&opts.kubeNamespace, "namespace", "default", "Kubernetes namespace where to run the App")

s/where/in which/

carolinebriaud

comment created time in 3 months

Pull request review commentdocker/app

Consistent object naming in usage command and examples

 type renderOptions struct { func renderCmd(dockerCli command.Cli) *cobra.Command { 	var opts renderOptions 	cmd := &cobra.Command{-		Use:     "render [APP_NAME] [--set KEY=VALUE ...] [--parameters-file PARAMETERS-FILE ...] [OPTIONS]",-		Short:   "Render the Compose file for an Application Package",-		Example: `$ docker app render myapp.dockerapp --set key=value`,+		Use:     "render [APP_DEFINITION] [OPTIONS]",+		Short:   "Render the Compose file for an App Definition",

@silvin-lubecki does render work from definitions as well as images?

carolinebriaud

comment created time in 3 months

Pull request review commentdocker/app

Consistent object naming in usage command and examples

 import (  func rmCmd() *cobra.Command { 	return &cobra.Command{-		Short:   "Remove an application image",+		Short:   "Remove an App Image", 		Use:     "rm [APP_IMAGE] [APP_IMAGE...]", 		Aliases: []string{"remove"}, 		Args:    cli.RequiresMinArgs(1), 		Example: `$ docker app image rm myapp $ docker app image rm myapp:1.0.0-$ docker app image rm docker.io/library/myapp@sha256:beef...`,+$ docker app image rm myrepo/myapp@sha256:beef...`,

nit: we could make the SHA prefix something like c0de instead of beef given that we're making developer tools

carolinebriaud

comment created time in 3 months

Pull request review commentdocker/app

Consistent object naming in usage command and examples

  Usage:	docker app [OPTIONS] COMMAND -A tool to build and manage Docker Applications.+A tool to build, share and run a Docker App  Options:       --version   Print version information  Management Commands:-  image       Manage application images+  image       Manage App Images  Commands:-  build       Build service images for the application-  init        Initialize Docker Application definition-  ls          List the installations and their last known installation result-  pull        Pull an application package from a registry-  push        Push an application package to a registry-  rm          Remove an application-  run         Run an application-  update      Update a running application-  validate    Checks the rendered application is syntactically correct+  build       Build an App Image from a .dockerapp App Definition+  init        Initialize an App Definition+  ls          List Running Apps

Do we want to capitalise Running and Image?

Note that image is not capitalised in the CLI:

$ docker image help

Usage:	docker image COMMAND

Manage images
carolinebriaud

comment created time in 3 months

PR closed docker/app

[WIP] Move docker/cli vendoring back to 19.03 branch status/0-triage

Signed-off-by: Christopher Crone christopher.crone@docker.com

<!-- Please make sure you've read and understood our contributing guidelines; https://github.com/docker/app/blob/master/CONTRIBUTING.md

** Make sure all your commits include a signature generated with git commit -s **

For additional information on our contributing process, read our contributing guide https://docs.docker.com/opensource/code/

If this is a bug fix, make sure your description includes "fixes #xxxx", or "closes #xxxx"

Please provide the following information: -->

- What I did As the YAML library bump is now in the 19.03 branch for the CLI, I've moved our vendoring back to use that.

- How I did it

  • Update Gopkg.toml
  • Run make vendor

- How to verify it

- Description for the changelog <!-- Write a short (one line) summary that describes the changes in this pull request for inclusion in the changelog: -->

- A picture of a cute animal (not mandatory but encouraged)

+10 -93

4 comments

12 changed files

chris-crone

pr closed time in 3 months

pull request commentdocker/app

[WIP] Move docker/cli vendoring back to 19.03 branch

We can bump this later

chris-crone

comment created time in 3 months

MemberEvent

push eventchris-crone/compose-on-kubernetes

Christopher Crone

commit sha 3ffb3157da140c547d311da04d436a4862b43ec1

WIP: Comment out test Signed-off-by: Christopher Crone <christopher.crone@docker.com>

view details

push time in 3 months

push eventchris-crone/compose-on-kubernetes

push time in 3 months

pull request commentdocker/compose

Update engine to 19.03.3, and Alpine 3.10.2

Although the Dockerfile defaults to Python 3.7.4, the build-debian stage installs python2.7-dev - is that correct? https://github.com/docker/compose/blob/79f29dd/Dockerfile#L43

Not sure about this, @ulyssessouza can answer when he's back

The Dockerfile still has a FIXME, and pins to (older?) versions of virtualenv and tox. What's the easiest way to find out if those issues have been resolved? Will there be an error when updating to later versions, or does the breaking stuff happen "silently"? https://github.com/docker/compose/blob/79f29dd/Dockerfile#L51-L53

The issue was that it broke the macOS build in a way that was not obvious. I haven't tried newer versions recently to see if this is fixed. virtualenv and tox are used for testing and build purposes so we're not shipping them.

thaJeztah

comment created time in 3 months

push eventchris-crone/compose-on-kubernetes

Christopher Crone

commit sha b66d6c2a38cf800ca818a5778519401067b174dc

Do not run tests in parallel on CI Signed-off-by: Christopher Crone <christopher.crone@docker.com>

view details

push time in 3 months

push eventchris-crone/compose-on-kubernetes

Christopher Crone

commit sha 1c80fc7ebd99e1fb47af9e037eabd19f4238b673

Bump etcd used in tests to v3.3.15 Signed-off-by: Christopher Crone <christopher.crone@docker.com>

view details

push time in 3 months

PR merged docker/app

Rename upgrade to update status/0-triage

- What I did

Renamed the upgrade command to update

- How to verify it

Run docker app --help

- A picture of a cute animal (not mandatory but encouraged) image

+23 -23

1 comment

7 changed files

rumpl

pr closed time in 3 months

push eventdocker/app

Djordje Lukic

commit sha 32da7d22e7d80a9f0196d7fc6428c6306089bfd8

Rename upgrade to update Signed-off-by: Djordje Lukic <djordje.lukic@docker.com>

view details

Chris Crone

commit sha 8f1a5943a49e6f291f40408a74ab927962ee4d75

Merge pull request #694 from rumpl/ux-upgrade-update Rename upgrade to update

view details

push time in 3 months

push eventchris-crone/compose-on-kubernetes

Christopher Crone

commit sha 3ecadbd009875e646290bafa9a8002ae3f07bfbb

Fix controller health check for tests Signed-off-by: Christopher Crone <christopher.crone@docker.com>

view details

push time in 3 months

push eventchris-crone/compose-on-kubernetes

Christopher Crone

commit sha 5a6c5701454305ef700851587b1dbacc8721aea9

Fix controller health check for tests Signed-off-by: Christopher Crone <christopher.crone@docker.com>

view details

push time in 3 months

push eventchris-crone/compose-on-kubernetes

Christopher Crone

commit sha 4124ea2f90521706af5a85688868db3613523d8c

Fix controller health check Signed-off-by: Christopher Crone <christopher.crone@docker.com>

view details

push time in 3 months

PR opened docker/cli

Bump Compose on Kubernetes

<!-- Please make sure you've read and understood our contributing guidelines; https://github.com/docker/cli/blob/master/CONTRIBUTING.md

** Make sure all your commits include a signature generated with git commit -s **

For additional information on our contributing process, read our contributing guide https://docs.docker.com/opensource/code/

If this is a bug fix, make sure your description includes "fixes #xxxx", or "closes #xxxx"

Please provide the following information: -->

- What I did Bumped Compose on Kubernetes

- How I did it

  • Updated vendor.conf
  • Added k8s.io dependencies
  • vndr

- How to verify it

- Description for the changelog <!-- Write a short (one line) summary that describes the changes in this pull request for inclusion in the changelog: -->

- A picture of a cute animal (not mandatory but encouraged)

+93865 -40768

0 comment

382 changed files

pr created time in 3 months

create barnchchris-crone/cli

branch : bump-compose-on-kubernetes

created branch time in 3 months

push eventchris-crone/compose-on-kubernetes

Christopher Crone

commit sha 568febf14d885d412aadfa42521c651c2e7870f2

Do not advertise protobuf support This fixes https://github.com/docker/compose-on-kubernetes/issues/150. As the `Stack` struct does not support being serialized to protobuf, we must not advertise that we support protobuf. Signed-off-by: Christopher Crone <christopher.crone@docker.com>

view details

push time in 3 months

Pull request review commentdocker/compose

avoid using Stty, rely on Posix compliant os.get_terminal_size

+backports.shutil_get_terminal_size==1.0.0

I think you'll need to add this to setup.py too so that it's included when people do a pip install

ndeloof

comment created time in 3 months

issue commentdocker/compose-on-kubernetes

k8s 1.16: serialization issue, namespace deletion hangs

It appears that while all other requests to the Compose API Server use JSON, delete collection (which is called as part of delete namespace) always uses protobuf – even if we register the API Server as only having JSON and YAML support. I think this is a Kubernetes 1.16 bug and we are looking for a work around.

guillaumerose

comment created time in 4 months

Pull request review commentdocker/compose-on-kubernetes

Bump Kubernetes vendoring to 1.16.1

 func setConfigDefaults(config *rest.Config) error { 	gv := v1alpha3.SchemeGroupVersion 	config.GroupVersion = &gv 	config.APIPath = "/apis"-	config.NegotiatedSerializer = serializer.DirectCodecFactory{CodecFactory: scheme.Codecs}+	config.NegotiatedSerializer = serializer.WithoutConversionCodecFactory{CodecFactory: scheme.Codecs}

Note to reviewer: This change was based on this: https://github.com/kubernetes/kubernetes/pull/76270

chris-crone

comment created time in 4 months

Pull request review commentdocker/compose-on-kubernetes

Bump Kubernetes vendoring to 1.16.1

 func TestConvertTable(t *testing.T) { 		{ 			name:          "not a stack", 			object:        &metav1beta1.Table{},-			expectedError: "unexpected object type *v1beta1.Table",+			expectedError: "unexpected object type *v1.Table",

Note to reviewer that this change was needed

chris-crone

comment created time in 4 months

push eventchris-crone/compose-on-kubernetes

Christopher Crone

commit sha 698549f303255f89578640a4fab81c9a590f411d

Bump vendoring Primary action was bumping the Kubernetes vendoring, other operations were to make it work. * Kubernetes to 1.16.1 * Removed `bitbucket.org/ww/goautoneg` as it is now included in Prometheus * Changed `serializer.DirectCodecFactory` to `serializer.WithoutConversionCodecFactory` in `api/client/clientset/typed/compose/*/compose_client.go` * Moved grpc to v1.23.1 * Ran `dep ensure -update sigs.k8s.io/structured-merge-diff` * Ran `dep ensure -update k8s.io/utils` Signed-off-by: Christopher Crone <christopher.crone@docker.com>

view details

push time in 4 months

PR opened docker/compose-on-kubernetes

Bump Kubernetes vendoring to 1.16.1

Additional information:

  • Removed bitbucket.org/ww/goautoneg as it is now included in Prometheus
  • Changed serializer.DirectCodecFactory to serializer.WithoutConversionCodecFactory in api/client/clientset/typed/compose/*/compose_client.go
  • Moved grpc to v1.23.1
  • Ran dep ensure -update sigs.k8s.io/structured-merge-diff
  • Ran dep ensure -update k8s.io/utils
+137531 -48101

0 comment

668 changed files

pr created time in 4 months

push eventchris-crone/compose-on-kubernetes

Christopher Crone

commit sha 1bb60ce1fe49f5f7a29aba84d3263c2d0a9b0ce9

Bump vendoring Primary action was bumping the Kubernetes vendoring, other operations were to make it work. * Kubernetes to 1.16.1 * Removed `bitbucket.org/ww/goautoneg` as it is now included in Prometheus * Changed `serializer.DirectCodecFactory` to `serializer.WithoutConversionCodecFactory` in `api/client/clientset/typed/compose/*/compose_client.go` * Moved grpc to v1.23.1 * Ran `dep ensure -update sigs.k8s.io/structured-merge-diff` * Ran `dep ensure -update k8s.io/utils` Signed-off-by: Christopher Crone <christopher.crone@docker.com>

view details

push time in 4 months

create barnchchris-crone/compose-on-kubernetes

branch : kube-1.16-vendoring

created branch time in 4 months

Pull request review commentdocker/app

Add warnings for env_file entries not copied

 func checkComposeFileVersion(compose map[string]interface{}) error { 	return schema.Validate(compose, fmt.Sprintf("%v", version)) } -func initFromComposeFile(name string, composeFile string) error {-	logrus.Debugf("Initializing from compose file %s", composeFile)--	dirName := internal.DirNameFromAppName(name)--	composeRaw, err := ioutil.ReadFile(composeFile)-	if err != nil {-		return errors.Wrap(err, "failed to read compose file")+func getEnvFiles(svcName string, envFileEntry interface{}) ([]string, error) {+	var envFiles []string+	switch envFileEntry.(type) {+	case string:+		envFiles = append(envFiles, envFileEntry.(string))+	case []interface{}:+		for _, env := range envFileEntry.([]interface{}) {+			envFiles = append(envFiles, env.(string))+		}+	default:+		return nil, fmt.Errorf("unknown entries in 'env_file' for service %s -> %v",+			svcName, envFileEntry) 	}-	cfgMap, err := composeloader.ParseYAML(composeRaw)-	if err != nil {-		return errors.Wrap(err, "failed to parse compose file")+	return envFiles, nil+}++func checkEnvFiles(cfgMap map[string]interface{}) error {+	services := cfgMap["services"]+	servicesMap, ok := services.(map[string]interface{})+	if !ok {+		return fmt.Errorf("could not process the yaml file") 	}-	if err := checkComposeFileVersion(cfgMap); err != nil {-		return err+	for svcName, svc := range servicesMap {+		svcContent, ok := svc.(map[string]interface{})+		if !ok {+			return fmt.Errorf("could not process the yaml file")+		}+		envFileEntry, ok := svcContent["env_file"]+		if !ok {+			continue+		}+		envFiles, err := getEnvFiles(svcName, envFileEntry)+		if err != nil {+			return errors.Wrap(err, "could not process the yaml file")+		}+		for _, envFilePath := range envFiles {+			fmt.Printf("\"env_file: %s\" entry of service %q will NOT be copied automatically! "+

I would say: "%s.env_file %q will not be copied into %s.dockerapp. Please copy it manually and udpate the path accordingly in the compose file.", svcName, appName, envFilePath

ulyssessouza

comment created time in 4 months

more