概述
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 2 3
| $ sudo apt-get remove docker \ docker-engine \ docker.io
|
- 更新包索引
- 安装依赖包,安装一些必要的依赖包,这些包可以让apt通过HTTPS使用仓库:
1
| $ sudo apt install apt-transport-https ca-certificates curl software-properties-common
|
- 添加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
|
- 添加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
|
- 安装docker
1
| sudo apt install docker-ce
|
- 验证docker安装
1
| sudo systemctl status docker
|
- (可选)将用户添加到Docker组,为了避免每次使用Docker时都需要使用sudo,可以将当前用户添加到Docker组:
1
| sudo usermod -aG docker $USER
|
添加后,重新登录或重启计算机以使更改生效。
- 测试Docker
CentOS
- 卸载旧版本
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
| sudo yum install -y yum-utils device-mapper-persistent-data lvm2
|
- 添加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
|
- 安装Docker
1
| sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin
|
- 启动Docker
1 2
| sudo systemctl start docker sudo systemctl enable docker
|
- 验证Docker安装
1
| sudo systemctl status docker
|
- (可选)将用户添加到Docker组,为了避免每次使用Docker时都需要使用sudo,可以将当前用户添加到Docker组:
1
| sudo usermod -aG docker $USER
|
- 测试Docker
- CentOS8 额外设置,由于 CentOS8 防火墙使用了 nftables,但 Docker 尚未支持 nftables, 我们可以使用如下设置使用 iptables:
1 2
| FirewallBackend=iptables
|
1 2 3
| $ firewall-cmd --permanent --zone=trusted --add-interface=docker0
$ firewall-cmd --reload
|
- 添加内核参数
如果在 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
|