概述

  Docker是一种开源平台,用于开发、部署和运行应用程序。它通过使用容器来简化应用程序的打包和分发,提供了一种轻量级的虚拟化解决方案。以下是一些Docker的关键概念:

  • 镜像(Image):Docker镜像是容器的只读模板,定义了容器运行时的环境和内容。镜像可以从Docker Hub或其他私有注册表下载,或者从Dockerfile创建。
  • 容器(Container):Docker容器是轻量级的、独立的软件包,包含应用程序的所有依赖项(如代码、运行时、系统工具和库)。与虚拟机不同,容器共享主机操作系统的内核,资源开销更小。
  • 仓库(Repository): Repository是用于存储和分发Docker镜像的地方。可以将其视为一个镜像的集合,不同的镜像可能代表同一个应用程序的不同版本。
  • Dockerfile:Dockerfile是一个文本文件,包含一系列指令,用于构建Docker镜像。它规定了如何安装依赖项、复制文件以及配置环境等。
  • Docker引擎(Engine):Docker引擎是Docker的核心,它包含了容器的构建、运行和管理工具。
  • Docker Hub:Docker Hub是一个公共的容器镜像仓库,开发者可以在上面发布或拉取镜像。

Docker的优势

  • 跨平台一致性:开发环境和生产环境一致,解决“在我这里没问题”的问题。
  • 轻量级:容器共享主机操作系统的资源,相比虚拟机更高效。
  • 快速部署:可以快速启动和停止容器,缩短部署时间。
  • 简化依赖管理:所有依赖项都打包在容器中,确保应用程序可以在任何Docker环境中运行。
Docker架构

镜像加速

  国内从 Docker Hub 拉取镜像有时会遇到困难,此时可以配置镜像加速器。国内很多云服务商都提供了国内加速器服务,例如:

  • 网易云加速器: https://hub-mirror.c.163.com
  • 百度云加速器: https://mirror.baidubce.com
  • 腾讯云加速器:https://mirror.ccs.tencentyun.com

安装

Ubuntu

  1. 卸载旧版本
1
2
3
$ sudo apt-get remove docker \
docker-engine \
docker.io
  1. 更新包索引
1
$ sudo apt update
  1. 安装依赖包,安装一些必要的依赖包,这些包可以让apt通过HTTPS使用仓库:
1
$ sudo apt install apt-transport-https ca-certificates curl software-properties-common
  1. 添加Docker的官方GPG密钥
1
2
3
4
5
$ curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg


# 官方源
# $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
  1. 添加Docker的官方仓库
1
2
3
4
5
6
7
8
9
$ echo \
"deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null


# 官方源
# $ echo \
# "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
# $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  1. 安装docker
1
sudo apt install docker-ce
  1. 验证docker安装
1
sudo systemctl status docker
  1. (可选)将用户添加到Docker组,为了避免每次使用Docker时都需要使用sudo,可以将当前用户添加到Docker组:
1
sudo usermod -aG docker $USER

  添加后,重新登录或重启计算机以使更改生效。

  1. 测试Docker
1
docker run hello-world

CentOS

  1. 卸载旧版本
1
2
3
4
5
6
7
8
9
10
$ sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
  1. 更新包索引
1
sudo yum update
  1. 安装必要的依赖包,安装一些必要的工具和依赖包:
1
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
  1. 添加Docker的官方仓库
1
2
3
4
5
6
7
8
9
10
$ sudo yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

$ sudo sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo

# 官方源
# $ sudo yum-config-manager \
# --add-repo \
# https://download.docker.com/linux/centos/docker-ce.repo
  1. 安装Docker
1
sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin
  1. 启动Docker
1
2
sudo systemctl start docker
sudo systemctl enable docker
  1. 验证Docker安装
1
sudo systemctl status docker
  1. (可选)将用户添加到Docker组,为了避免每次使用Docker时都需要使用sudo,可以将当前用户添加到Docker组:
1
sudo usermod -aG docker $USER
  1. 测试Docker
1
docker run hello-world
  1. CentOS8 额外设置,由于 CentOS8 防火墙使用了 nftables,但 Docker 尚未支持 nftables, 我们可以使用如下设置使用 iptables:
1
2
# FirewallBackend=nftables
FirewallBackend=iptables
1
2
3
$ firewall-cmd --permanent --zone=trusted --add-interface=docker0

$ firewall-cmd --reload
  1. 添加内核参数

  如果在 CentOS 使用 Docker 看到下面的这些警告信息:

1
2
WARNING: bridge-nf-call-iptables is disabled
WARNING: bridge-nf-call-ip6tables is disabled

  请添加内核配置参数以启用这些功能。

1
2
3
4
5
6
$ sudo tee -a /etc/sysctl.conf <<-EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

$ sudo sysctl -p