Convert Figma logo to code with AI

docker-archive logodocker-ce

:warning: This repository is deprecated and will be archived (Docker CE itself is NOT deprecated) see the https://github.com/docker/docker-ce/blob/master/README.md :warning:

5,750
1,525
5,750
2

Top Related Projects

68,613

The Moby Project - a collaborative project for the container ecosystem to assemble container-based systems

An open and reliable container runtime

109,710

Production-Grade Container Scheduling and Management

23,337

Complete container management platform

11,728

CLI tool for spawning and running containers according to the OCI specification

23,924

An open source trusted cloud native registry project that stores, signs, and scans content.

Quick Overview

Docker CE (Community Edition) is an open-source containerization platform that allows developers to package applications and their dependencies into lightweight, portable containers. This repository contains the source code for Docker CE, which was the community-supported version of Docker before it was merged with Docker EE to form Docker Engine.

Pros

  • Open-source and community-driven development
  • Lightweight and efficient containerization solution
  • Extensive documentation and community support
  • Cross-platform compatibility (Linux, Windows, macOS)

Cons

  • No longer actively maintained (merged into Docker Engine)
  • May lack some enterprise-level features found in Docker EE
  • Potential security vulnerabilities due to lack of updates
  • Limited official support compared to Docker Engine

Code Examples

As Docker CE is a containerization platform and not a code library, there are no specific code examples to provide. However, here are some common Docker commands that users might use:

# Build a Docker image from a Dockerfile
docker build -t my-image .

# Run a container from an image
docker run -d --name my-container my-image

# List running containers
docker ps

# Stop a running container
docker stop my-container

Getting Started

To get started with Docker CE, you would typically follow these steps:

  1. Install Docker CE on your system (instructions vary by operating system)
  2. Verify the installation by running:
    docker --version
    docker run hello-world
    
  3. Create a Dockerfile for your application
  4. Build and run your container using the Docker CLI

However, it's important to note that Docker CE is no longer actively maintained, and users are encouraged to use the current Docker Engine, which combines features from both CE and EE versions.

Competitor Comparisons

68,613

The Moby Project - a collaborative project for the container ecosystem to assemble container-based systems

Pros of Moby

  • More active development and community engagement
  • Broader scope, serving as a toolkit for containerization
  • Greater flexibility for customization and experimentation

Cons of Moby

  • Potentially less stable due to rapid development
  • Steeper learning curve for newcomers
  • May require more configuration for production use

Code Comparison

Moby (example of a custom build):

FROM moby/buildkit:latest AS builder
WORKDIR /src
COPY . .
RUN --mount=type=cache,target=/root/.cache/go-build \
    make static STATIC=1

Docker CE (example of a standard Dockerfile):

FROM docker:latest
WORKDIR /app
COPY . .
RUN docker build -t myapp .
CMD ["docker", "run", "myapp"]

Key Differences

  • Moby focuses on modular components and customization
  • Docker CE provides a more integrated, user-friendly experience
  • Moby is better suited for advanced users and custom implementations
  • Docker CE is ideal for standard Docker deployments and ease of use

Use Cases

  • Choose Moby for:

    • Custom container solutions
    • Contributing to Docker's development
    • Experimenting with containerization technology
  • Choose Docker CE for:

    • Standard Docker installations
    • Production environments requiring stability
    • Simplified container management

An open and reliable container runtime

Pros of containerd

  • Lightweight and focused on container runtime functionality
  • Better performance and resource efficiency
  • More modular architecture, allowing easier integration into other systems

Cons of containerd

  • Less feature-rich compared to Docker CE's full ecosystem
  • Steeper learning curve for users familiar with Docker's high-level abstractions
  • Limited built-in image management capabilities

Code Comparison

containerd:

import (
    "github.com/containerd/containerd"
    "github.com/containerd/containerd/cio"
)

client, err := containerd.New("/run/containerd/containerd.sock")
container, err := client.NewContainer(ctx, "my-container", opts...)
task, err := container.NewTask(ctx, cio.NewCreator(cio.WithStdio))

docker-ce:

import "github.com/docker/docker/client"

cli, err := client.NewClientWithOpts(client.FromEnv)
resp, err := cli.ContainerCreate(ctx, &container.Config{}, &container.HostConfig{}, nil, nil, "my-container")
err = cli.ContainerStart(ctx, resp.ID, types.ContainerStartOptions{})

The code examples demonstrate the different approaches to container management. containerd offers a more low-level API, while Docker CE provides higher-level abstractions for container operations.

109,710

Production-Grade Container Scheduling and Management

Pros of Kubernetes

  • More comprehensive container orchestration and management capabilities
  • Better suited for large-scale, complex deployments across multiple hosts
  • Robust ecosystem with extensive tooling and community support

Cons of Kubernetes

  • Steeper learning curve and more complex setup compared to Docker CE
  • Requires more resources to run effectively, especially for smaller deployments
  • Can be overkill for simple containerization needs

Code Comparison

Docker CE (basic container run):

docker run -d --name my-app -p 8080:80 my-image

Kubernetes (basic pod deployment):

apiVersion: v1
kind: Pod
metadata:
  name: my-app
spec:
  containers:
  - name: my-app
    image: my-image
    ports:
    - containerPort: 80

While Docker CE focuses on running individual containers, Kubernetes provides a more declarative approach for managing complex applications across multiple containers and hosts. Kubernetes offers advanced features like automatic scaling, rolling updates, and self-healing, making it more suitable for production-grade deployments. However, Docker CE remains a simpler solution for basic containerization needs and is often easier to get started with for developers new to containerization technologies.

23,337

Complete container management platform

Pros of Rancher

  • Provides a comprehensive container management platform with a user-friendly web UI
  • Offers multi-cluster management and supports multiple Kubernetes distributions
  • Includes built-in security features and role-based access control (RBAC)

Cons of Rancher

  • Steeper learning curve for users new to container orchestration
  • May introduce additional complexity for simple deployments
  • Requires more resources to run compared to a basic Docker setup

Code Comparison

Rancher:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx

Docker CE:

FROM nginx:latest
COPY ./app /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

Key Differences

  • Rancher focuses on Kubernetes orchestration, while Docker CE is centered around container runtime and image management
  • Rancher provides a higher-level abstraction for managing containerized applications across multiple clusters
  • Docker CE offers a more straightforward approach for single-host container deployments

Use Cases

  • Rancher: Ideal for large-scale, multi-environment container deployments and organizations requiring advanced orchestration features
  • Docker CE: Better suited for smaller projects, local development, and simpler container management needs
11,728

CLI tool for spawning and running containers according to the OCI specification

Pros of runc

  • Lightweight and focused solely on container runtime functionality
  • OCI-compliant, ensuring broader compatibility and standardization
  • More flexible for integration into custom container solutions

Cons of runc

  • Lacks higher-level features and tools provided by Docker CE
  • Requires more manual configuration and setup for full container management
  • Smaller community and ecosystem compared to Docker CE

Code Comparison

runc:

func (r *Runc) Create(context context.Context, id, bundle string, opts *CreateOpts) error {
    args := []string{"create", "--bundle", bundle}
    if opts != nil {
        args = append(args, opts.AdditionalArgs...)
    }
    cmd := r.command(context, append(args, id)...)
    return runOrError(cmd)
}

docker-ce:

func (cli *Client) ContainerCreate(ctx context.Context, config *container.Config, hostConfig *container.HostConfig, networkingConfig *network.NetworkingConfig, containerName string) (container.ContainerCreateCreatedBody, error) {
    var response container.ContainerCreateCreatedBody
    query := url.Values{}
    if containerName != "" {
        query.Set("name", containerName)
    }
    // ... (additional code)
}

The code snippets demonstrate the difference in abstraction levels. runc focuses on low-level container creation, while Docker CE provides a higher-level API with more options and configuration capabilities.

23,924

An open source trusted cloud native registry project that stores, signs, and scans content.

Pros of Harbor

  • Comprehensive enterprise-grade container registry with advanced features like image replication, vulnerability scanning, and access control
  • Built-in user management and RBAC for fine-grained access control
  • Supports multiple authentication backends (LDAP, OIDC) for enterprise integration

Cons of Harbor

  • More complex setup and maintenance compared to Docker CE
  • Requires additional resources to run due to its comprehensive feature set
  • Steeper learning curve for users familiar with simpler Docker registries

Code Comparison

Harbor configuration example:

harbor:
  adminPassword: Harbor12345
  externalURL: https://harbor.example.com
  database:
    type: postgresql
    password: changeit

Docker CE configuration example:

{
  "registry-mirrors": ["https://mirror.gcr.io"],
  "insecure-registries": ["10.10.0.0/16"],
  "debug": true,
  "experimental": false
}

While Docker CE focuses on container runtime and basic registry functionality, Harbor provides a more comprehensive solution for enterprise container management. Harbor offers advanced features but requires more setup and resources, whereas Docker CE is simpler but less feature-rich for registry management.

Convert Figma logo designs to code with AI

Visual Copilot

Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.

Try Visual Copilot

README

Docker CE

:warning: This repository is now deprecated and will be archived (Docker CE itself is NOT deprecated) :warning:

Starting with the Docker 20.10 release, packages for the Docker Engine and Docker CLI are built directly from their respective source repositories instead of from this repository.

Practically this means:

  1. This repository is no longer the “source of truth” for Docker CE builds.
  2. The commit SHA and tag for Docker CLI build will come from the docker/cli repository and the commit SHA and tag for the Docker Engine will come from the moby/moby repository.
  3. Release branches for the Engine, CLI, and packaging will be maintained on their respective repositories.
  4. Updates will stop being made to this repository and it will be archived in the future.
  5. Changelog is now Release Notes.
  6. The master branch of this repository will be emptied when the repository is archived.

Description

This repository hosts open source components of Docker CE products. The master branch serves to unify the upstream components on a regular basis. Long-lived release branches host the code that goes into a product version for the lifetime of the product.

This repository is solely maintained by Docker, Inc.

Issues

There are separate issue-tracking repos for the end user Docker CE products specialized for a platform. Find your issue or file a new issue for the platform you are using:

Submitting pull requests

This repository does not accept PRs for files under the components directory directly. To contribute to the files under the components directory, see CONTRIBUTING.md .

Unifying upstream sources

The master branch is a combination of components adapted from different upstream git repos into a unified directory structure using the moby-components tool.

You can view the upstream git repos in the components.conf file. Each component is isolated into its own directory under the components directory.

The tool will import each component git history within the appropriate path.

For example, this shows a commit is imported into the component engine from moby/moby@a27b4b8 into the components/engine directory.

commit 5c70746915d4589a692cbe50a43cf619ed0b7152
Author: Andrea Luzzardi <aluzzardi@gmail.com>
Date:   Sat Jan 19 00:13:39 2013

    Initial commit
    Upstream-commit: a27b4b8cb8e838d03a99b6d2b30f76bdaf2f9e5d
    Component: engine

 components/engine/container.go       | 203 ++++++++++++++++++++++++++++...
 components/engine/container_test.go  | 186 ++++++++++++++++++++++++++++...
 components/engine/docker.go          | 112 ++++++++++++++++++++++++++++...
 components/engine/docker_test.go     | 175 ++++++++++++++++++++++++++++...
 components/engine/filesystem.go      |  52 ++++++++++++++++++++++++++++...
 components/engine/filesystem_test.go |  35 +++++++++++++++++++++++++++
 components/engine/lxc_template.go    |  94 ++++++++++++++++++++++++++++...
 components/engine/state.go           |  48 ++++++++++++++++++++++++++++...
 components/engine/utils.go           | 115 ++++++++++++++++++++++++++++...
 components/engine/utils_test.go      | 126 ++++++++++++++++++++++++++++...
 10 files changed, 1146 insertions(+)

Updates to master branch

Main development of new features should be directed towards the upstream git repos. The master branch of this repo will periodically pull in new changes from upstream to provide a point for integration.

Branching for release

When a release is started for Docker CE, a new branch will be created from master. Branch names will be YY.MM to represent the time-based release version of the product, e.g. 17.06.

Adding fixes to release branch

Note: every commit of a fix should affect files only within one component directory.

Fix available upstream

A PR cherry-picking the necessary commits should be created against the release branch. If the the cherry-pick cannot be applied cleanly, the logic of the fix should be ported manually.

No fix yet

First create the PR with the fix for the release branch. Once the fix has been merged, be sure to port the fix to the respective upstream git repo.

Release tags

There will be a git tag for each release candidate (RC) and general availability (GA) release. The tag will only point to commits on release branches.