简单介绍

Docker可以容器化部署一些应用,将单个应用程序及其依赖项封装成容器,环境互相隔离互不影响,也方便对其进行升级和数据迁移。在VPS搭建应用中是一个很常见的技术。

Docker Compose是用于定义和运行多容器Docker 应用程序的工具,可以通过配置docker-compose.yml文件一次性运行多个不同镜像的容器。

相关链接

参考教程:

官方文档 Install Docker Engine on Debian | Docker Docs

扩展阅读:

Docker在线入门教程《Docker 从入门到实践》

Docker 日常命令大全(完整详细版)_docker命令-CSDN博客

docker-compose 常用命令(附 docker-compose 的安装教程)

Docker 安装流程

基本准备

安装/更新必备的软件

1
apt update -y && apt install -y wget vim curl lsof sudo

环境要求&环境查看

我这里用的是Debian11,也可以用其他系统,具体要求可以查看官方文档。

version of one of these Debian versions:
1
2
3
4
5
6

Debian Bookworm 12 (stable)

Debian Bullseye 11 (oldstable)

Docker Engine for Debian is compatible with x86_64 (or amd64), armhf, arm64, and ppc64le (ppc64el) architectures.
1
2
3
4
5
# 系统内核 5.10.0-27-amd64
uname -r

# 系统版本 Debian GNU/Linux 11 (bullseye)
cat /etc/os-release

开始安装

百度搜Docker,点击Docs,点击Get Docker进入帮助文档,左侧导航栏选择Docker Engine->Install->Debian

由于Linux发行版的Docker的apt库可能比较旧,这里我们通过阅读官方文档按步骤来安装Docker最新版本。

1.卸载旧版本

如果是第一次安装Docker,这一步可跳过。

1.1.卸载非官方和冲突软件包

1
for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do sudo apt-get remove $pkg; done

1.2.卸载依赖(Uninstall the Docker Engine, CLI, containerd, and Docker Compose packages):

1
apt-get purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras

1.3.删除文件资源(Delete all images, containers, and volumes which aren’t automatically removed)

1
2
3
# /var/lib/docker 是Docker的默认工作路径
rm -rf /var/lib/docker
rm -rf /var/lib/containerd

2.下载 Install using the apt repository

2.1 Set up Docker’s repository.apt

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Add the repository to Apt sources:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

apt-get update

2.2 Install the Docker packages

1
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

补充:docker-compose V1版本已停止更新。现在的Docker安装命令自带上了docker-compose-plugin插件,可以不用再单独安装。但是指令和单独装的docker-compose不同,现在 docker compose 中间没有 -

2.3 Verify that the installation is successful by running the image:hello-world

1
2
3
4
5
6
7
8
# 启动Docker
sudo systemctl start docker

# 查看Docker版本
docker version

# 运行`hello-world`镜像
sudo docker run hello-world

3.Upgrade Docker Engine

需要时再说,看官方文档。

Docker 相关知识

运行hello-world镜像可以看到以下信息:

这段信息表示无法从本地找到hello-world:latest镜像,所以从Docker Hub中拉取了最新的hello-world镜像,并输出了一些相关信息。

Docker执行的流程是:

  • Docker 客户端联系了 Docker 守护进程。

  • Docker 守护进程从 Docker Hub 拉取了 hello-world 镜像(amd64)。

  • Docker 守护进程从该镜像创建了一个新的容器,该容器运行了生成当前输出的可执行文件。

  • Docker 守护进程将该输出流传送到 Docker 客户端,然后由客户端发送到您的终端。

查看一下镜像

1
2
3
root@iZ7xvcu671mq0lrlzj6sbqZ:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest d2c94e258dcb 9 months ago 13.3kB

run的运行流程:

docker0:

docker0 是 Docker 默认的桥接网络接口。当你安装 Docker 并启动容器时,Docker 会创建一个名为 docker0 的 Linux bridge,所有的 Docker 容器都会连接到这个 bridge 上。

如果你想要查看 docker0 的配置和状态,可以使用以下命令:

1
2
# 查看 docker0 接口的配置
ip addr show docker0

通过该指令可以得到Docker内部默认网关:172.17.0.1,这在配置NPM反代的时候会用到。如果是反代与NPM同一台VPS的Docker,则IP可填172.17.0.1或VPS的IP。

Docker 常用命令

参考:Docker 日常命令大全(完整详细版)_docker命令-CSDN博客

查看Docker状态:sudo systemctl status docker

启动Docker:sudo systemctl start docker

开启开机自动启动:sudo systemctl enable docker

关闭开机自动启动:sudo systemctl disable docker

查看docker占用内存情况:docker stats

列出当前docker:docker ps -l

docker image prune:prune 命令用来删除不再使用的 docker 镜像(一般用来删旧镜像)。删除所有未被 tag 标记和未被容器使用的镜像

Docker Compose 常用命令

参考:docker-compose 常用命令(附 docker-compose 的安装教程)

建议:专门给 Docker 的数据、配置文件新建一个文件夹。在这里面通过 docker-compose.yml 配置文件来安装或修改docker。

1
2
3
sudo -i
mkdir -p /root/data/docker_data/
cd /root/data/docker_data/

要使用docker compose,需要先进入包含docker-compose.yml文件的根目录,只对该文件内的docker-compose.yml进行操作。

docker compose up -d :根据 docker-compose.yml 配置文件创建并运行多个容器协同工作,-d 为在后台运行容器

docker compose ps :显示与当前 docker-compose.yml 文件相关联的容器的信息,-a 为显示包括已停止的容器

docker compose stop :停止正在运行的容器

docker compose start :启动容器

docker compose restart :重启容器

docker compose exec [docker_name] [command] :用于与在运行中的某个容器进行交互,在其内部执行命令

docker compose pull :拉取服务依赖的镜像。一般用于更新Docker

docker compose down :停止并移除由 docker-compose.yml 创建的容器、网络和卷。一般用于卸载Docker

更新Docker(通常情况):

1
2
3
4
5
6
7
8
9
10
11
cd /root/data/docker_data/xxxx

docker compose down

cp -r /root/data/docker_data/xxxx /root/data/docker_data/xxxx.archive # 备份

docker compose pull

docker compose up -d

docker image prune # 删除不再使用的旧镜像

卸载Docker(通常情况):

1
2
3
4
5
6
7
cd /root/data/docker_data/xxxx

docker compose down

cd ..

rm -rf /root/data/docker_data/xxxx # 完全删除应用的数据