From 669b007e9317a19636399cb04e24d514853cd88e Mon Sep 17 00:00:00 2001 From: David Karlsson <35727626+dvdksn@users.noreply.github.com> Date: Thu, 10 Oct 2024 15:04:16 +0200 Subject: [PATCH 1/5] cli: fix cli completion setup for zsh Signed-off-by: David Karlsson <35727626+dvdksn@users.noreply.github.com> --- content/manuals/engine/cli/completion.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/manuals/engine/cli/completion.md b/content/manuals/engine/cli/completion.md index 6c0f2c59167e..ac8fe44eb4bb 100644 --- a/content/manuals/engine/cli/completion.md +++ b/content/manuals/engine/cli/completion.md @@ -89,8 +89,8 @@ $ docker completion zsh > ~/.docker/completions/_docker ``` ```console -$ cat <> ~/.zshrc -fpath=(~/.docker/completions \\$fpath) +$ cat <<"EOT" >> ~/.zshrc +FPATH="$HOME/.docker/completions:$FPATH" autoload -Uz compinit compinit EOT From fa74d0a579d98c67c761c2445da59d7fcafe482c Mon Sep 17 00:00:00 2001 From: David Karlsson <35727626+dvdksn@users.noreply.github.com> Date: Mon, 14 Oct 2024 15:56:34 +0200 Subject: [PATCH 2/5] build(cloud): add firewall config Signed-off-by: David Karlsson <35727626+dvdksn@users.noreply.github.com> --- content/manuals/build-cloud/setup.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/content/manuals/build-cloud/setup.md b/content/manuals/build-cloud/setup.md index cbf4098c7bb7..9d8ef75ab08b 100644 --- a/content/manuals/build-cloud/setup.md +++ b/content/manuals/build-cloud/setup.md @@ -70,6 +70,16 @@ The builder has native support for the `linux/amd64` and `linux/arm64` architectures. This gives you a high-performance build cluster for building multi-platform images natively. +## Firewall configuration + +To use Docker Build Cloud behind a firewall, ensure that your firewall allows +traffic to the following addresses: + +- 3.211.38.21 +- https://auth.docker.io +- https://build-cloud.docker.com +- https://hub.docker.com + ## What's next - See [Building with Docker Build Cloud](usage.md) for examples on how to use Docker Build Cloud. From 9ac25c0f3aa25fbbe3b5e5364bec531170163da4 Mon Sep 17 00:00:00 2001 From: Adam Danko <112761282+Hapshanko@users.noreply.github.com> Date: Tue, 15 Oct 2024 17:28:00 +0300 Subject: [PATCH 3/5] Update configure-builder.md deprecated field --- .../manuals/build/ci/github-actions/configure-builder.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/content/manuals/build/ci/github-actions/configure-builder.md b/content/manuals/build/ci/github-actions/configure-builder.md index a02c83a80ac9..4d6bd1c981a6 100644 --- a/content/manuals/build/ci/github-actions/configure-builder.md +++ b/content/manuals/build/ci/github-actions/configure-builder.md @@ -67,12 +67,12 @@ Logs will be available at the end of a job: You can provide a [BuildKit configuration](../../buildkit/toml-configuration.md) to your builder if you're using the [`docker-container` driver](/manuals/build/builders/drivers/docker-container.md) -(default) with the `config` or `config-inline` inputs: +(default) with the `config` or `buildkitd-config-inline` inputs: ### Registry mirror You can configure a registry mirror using an inline block directly in your -workflow with the `config-inline` input: +workflow with the `buildkitd-config-inline` input: ```yaml name: ci @@ -87,7 +87,7 @@ jobs: - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 with: - config-inline: | + buildkitd-config-inline: | [registry."docker.io"] mirrors = ["mirror.gcr.io"] ``` @@ -99,7 +99,7 @@ For more information about using a registry mirror, see [Registry mirror](../../ You can limit the parallelism of the BuildKit solver which is particularly useful for low-powered machines. -You can use the `config-inline` input like the previous example, or you can use +You can use the `buildkitd-config-inline` input like the previous example, or you can use a dedicated BuildKit config file from your repository if you want with the `config` input: From d39a10ba796d4f6e1d872d6aec68b4c0cb1bfe05 Mon Sep 17 00:00:00 2001 From: Sarah Sanders Date: Tue, 15 Oct 2024 09:16:46 -0700 Subject: [PATCH 4/5] Update nesting issue in SSO docs for connect and manage section --- .../single-sign-on/{connect/_index.md => connect.md} | 2 +- .../for-admins/single-sign-on/{manage/_index.md => manage.md} | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) rename content/manuals/security/for-admins/single-sign-on/{connect/_index.md => connect.md} (93%) rename content/manuals/security/for-admins/single-sign-on/{manage/_index.md => manage.md} (92%) diff --git a/content/manuals/security/for-admins/single-sign-on/connect/_index.md b/content/manuals/security/for-admins/single-sign-on/connect.md similarity index 93% rename from content/manuals/security/for-admins/single-sign-on/connect/_index.md rename to content/manuals/security/for-admins/single-sign-on/connect.md index 676a95bcc32b..5096e986650a 100644 --- a/content/manuals/security/for-admins/single-sign-on/connect/_index.md +++ b/content/manuals/security/for-admins/single-sign-on/connect.md @@ -50,4 +50,4 @@ The following videos demonstrate how to enforce SSO. ## What's next -Learn how you can [manage your SSO connection](../manage/_index.md), domain, and users for your organization or company. +Learn how you can [manage your SSO connection](../single-sign-on/manage.md), domain, and users for your organization or company. diff --git a/content/manuals/security/for-admins/single-sign-on/manage/_index.md b/content/manuals/security/for-admins/single-sign-on/manage.md similarity index 92% rename from content/manuals/security/for-admins/single-sign-on/manage/_index.md rename to content/manuals/security/for-admins/single-sign-on/manage.md index ae27234d69e1..a9276aa396d9 100644 --- a/content/manuals/security/for-admins/single-sign-on/manage/_index.md +++ b/content/manuals/security/for-admins/single-sign-on/manage.md @@ -71,6 +71,6 @@ aliases: ## What's next? -- [Set up SCIM](../../provisioning/scim.md) -- [Enable Group mapping](../../provisioning/group-mapping.md) +- [Set up SCIM](../provisioning/scim.md) +- [Enable Group mapping](../provisioning/group-mapping.md) From 0c9539087f24641fc3257f40a5379342e01e07d0 Mon Sep 17 00:00:00 2001 From: Michael Irwin Date: Wed, 16 Oct 2024 03:23:41 -0400 Subject: [PATCH 5/5] Container supported development learning path (#20958) * WIP - add learning path for container-supported development * Migrate learning path into new guide format * Update content/guides/container-supported-development/_index.md Co-authored-by: David Karlsson <35727626+dvdksn@users.noreply.github.com> * Update content/guides/container-supported-development/_index.md Co-authored-by: David Karlsson <35727626+dvdksn@users.noreply.github.com> * Add correct YT links for the container-supported guide * Merge the guide back into a single page * Update container-supported-development.md Co-authored-by: David Karlsson <35727626+dvdksn@users.noreply.github.com> * Update container-supported-development.md Co-authored-by: David Karlsson <35727626+dvdksn@users.noreply.github.com> --------- Co-authored-by: David Karlsson <35727626+dvdksn@users.noreply.github.com> --- .../container-supported-development.png | Bin 0 -> 39159 bytes .../guides/container-supported-development.md | 76 ++++++++++++++++++ 2 files changed, 76 insertions(+) create mode 100644 assets/images/learning-paths/container-supported-development.png create mode 100644 content/guides/container-supported-development.md diff --git a/assets/images/learning-paths/container-supported-development.png b/assets/images/learning-paths/container-supported-development.png new file mode 100644 index 0000000000000000000000000000000000000000..a9e09665bbeec622cf807eb52b715c9f4d9a8415 GIT binary patch literal 39159 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 UzGnYH2{og;vMMsUw~U|vKjww4761SM literal 0 HcmV?d00001 diff --git a/content/guides/container-supported-development.md b/content/guides/container-supported-development.md new file mode 100644 index 000000000000..52879478303a --- /dev/null +++ b/content/guides/container-supported-development.md @@ -0,0 +1,76 @@ +--- +title: "Faster development and testing with container-supported development" +linkTitle: Container-supported development +summary: | + Containers don't have to be just for your app. Learn how to run your app's dependent services and other debugging tools to enhance your development environment. +description: | + Use containers in your local development loop to develop and test faster… even if your main app isn't running in containers. +levels: [beginner] +params: + image: images/learning-paths/container-supported-development.png + time: 20 minutes + resource_links: [] +--- + +Containers offer a consistent way to build, share, and run applications across different environments. While containers are typically used to containerize your application, they also make it incredibly easy to run essential services needed for development. Instead of installing or connecting to a remote database, you can easily launch your own database. But the possibilities don't stop there. + +With container-supported development, you use containers to enhance your development environment by emulating or running your own instances of the services your app needs. This provides faster feedback loops, less coupling with remote services, and a greater ability to test error states. + +And best of all, you can have these benefits regardless of whether the main app under development is running in containers. + +## What you'll learn + +- The meaning of container-supported development +- How to connect non-containerized applications to containerized services +- Several examples of using containers to emulate or run local instances of services +- How to use containers to add additional troubleshooting and debugging tools to your development environment + +## Who's this for? + +- Teams that want to reduce the coupling they have on shared or deployed infrastructure or remote API endpoints +- Teams that want to reduce the complexity and costs associated with using cloud services directly during development +- Developers that want to make it easier to visualize what's going on in their databases, queues, etc. +- Teams that want to reduce the complexity of setting up their development environment without impacting the development of the app itself + + +## Tools integration + +Works well with Docker Compose and Testcontainers. + +## Modules + +### What is container-supported development? + +Container-supported development is the idea of using containers to enhance your development environment by running local instances or emulators of the services your application relies on. Once you're using containers, it's easy to add additional services to visualize or troubleshoot what's going on in your services. + +{{< youtube-embed pNcrto_wGi0 >}} + +### Demo: running databases locally + +With container-supported development, it's easy to run databases locally. In this demo, you'll see how to do so, as well as how to connect a non-containerized application to the database. + +{{< youtube-embed VieWeXOwKLU >}} + +### Demo: mocking API endpoints + +Many APIs require data from other data endpoints. In development, this adds complexities such as the sharing of credentials, uptime/availability, and rate limiting. Instead of relying on those services directly, your application can interact with a mock API server. + +This demo will demonstrate how using WireMock can make it easy to develop and test an application, including the APIs various error states. + +{{< youtube-embed VXSmX6f8vo0 >}} + +### Demo: developing the cloud locally + +When developing apps, it's often easier to outsource aspects of the application to cloud services, such as Amazon S3. However, connecting to those services in local development introduces IAM policies, networking constraints, and provisioning complications. While these requirements are important in a production setting, they complicate development environments significantly. + +With container-supported development, you can run local instances of these services during development and testing, removing the need for complex setups. In this demo, you'll see how LocalStack makes it easy to develop and test applications entirely from the developer's workstation. + +{{< youtube-embed JtwUMvR5xlY >}} + +### Demo: adding additional debug and troubleshooting tools + +Once you start using containers in your development environment, it becomes much easier to add additional containers to visualize the contents of the databases or message queues, seed document stores, or event publishers. In this demo, you'll see a few of these examples, as well as how you can connect multiple containers together to make testing even easier. + +{{< youtube-embed TCZX15aKSu4 >}} + +
\ No newline at end of file