docker-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:
Top Related Projects
The Moby Project - a collaborative project for the container ecosystem to assemble container-based systems
An open and reliable container runtime
Production-Grade Container Scheduling and Management
Complete container management platform
CLI tool for spawning and running containers according to the OCI specification
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:
- Install Docker CE on your system (instructions vary by operating system)
- Verify the installation by running:
docker --version docker run hello-world
- Create a Dockerfile for your application
- 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
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.
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.
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
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.
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 designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
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:
- This repository is no longer the âsource of truthâ for Docker CE builds.
- 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.
- Release branches for the Engine, CLI, and packaging will be maintained on their respective repositories.
- Updates will stop being made to this repository and it will be archived in the future.
- Changelog is now Release Notes.
- 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:
- https://github.com/docker/for-linux
- https://github.com/docker/for-mac
- https://github.com/docker/for-win
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.
Top Related Projects
The Moby Project - a collaborative project for the container ecosystem to assemble container-based systems
An open and reliable container runtime
Production-Grade Container Scheduling and Management
Complete container management platform
CLI tool for spawning and running containers according to the OCI specification
An open source trusted cloud native registry project that stores, signs, and scans content.
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot