Docker Essentials
Docker Essentials
Install Docker
系统镜像 Ubuntu 20.04 LTS 以及 Debian 11
方法一
官方教程 Get Docker Engine - Community for Debian
卸载已有的docker
|
|
使用便携脚本安装的 docker 不会上述代码卸载。所以我只会用没有安装过 docker 的虚拟机,或者是重置虚拟机系统来解决。
允许通过 HTTPS 使用存储库
|
|
添加 Docker 的官方 GPG 密钥
|
|
设置 Docker 官方库
|
|
更新包
|
|
安装 Docker Engine
|
|
这样安装可以同时安装 Docker Compose,无需单独操作。
使用非 root 用户运行 Docker
默认情况下,Docker 命令需要 root 权限。如果你想让非 root 用户也可以运行 Docker 命令,可以将用户添加到 docker 组中。
- Create the
dockergroup
|
|
- Add your user to the
dockergroup
|
|
- 重启
|
|
- 验证
|
|
方法二
Docker 提供了一个便捷脚本,可以自动安装
|
|
curl 一个命令行工具,用于从网络上获取数据。它可以处理各种类型的协议,包括HTTP和HTTPS
-f 或 --fail 此选项告诉 curl 如果HTTP请求失败(返回码≥400),则不显示任何内容并直接退出
-s 或 --silent 此选项告诉 curl 在操作过程中不显示错误和进度指示
-S 或 --show-error 尽管 -s 选项告诉 curl 在操作过程中保持安静,但如果发生错误,-S 选项将使错误消息可见
-L 或 --location:如果服务器报告指示新位置的HTTP状态码(如301,302等),此选项将告诉 curl 跟随服务器的重定向。
| 是一个叫做管道的Unix工具,它接受前一个命令的输出,并将它作为下一个命令的输入。
验证是否安装成功
|
|
或者
|
|
如果你看到 “Active: active (running)” 这样的输出,那么 Docker 服务正在运行。
方法三
使用apt安装
以 docker.io 为例,docker.io 是 Ubuntu 官方仓库中的 Docker 包名,其版本可能会比 Docker 官方维护的版本(docker-ce)稍微落后一些。
|
|
确保 Docker 在开机时启动:
|
|
当你从 Docker 官方的存储库(repository)安装 Docker 时(方法一),Docker 服务(dockerd)应该被设置为在启动时自动运行。
Install Docker Compose
Docker Compose 是 Docker 官方编排(Orchestration)项目之一,负责快速的部署分布式应用。
安装 Docker Compose
|
|
|
|
-o 或者 --output 参数用于将服务器返回的内容写入到文件中,而不是输出到终端。
在一般的 Linux 系统中,/usr/bin 和 /usr/local/bin 都是默认的 PATH 环境变量中的路径,所以你可以选择任意一个来安装软件。只是按照惯例,用户级的二进制文件(如由用户手动安装的软件)通常放在 /usr/local/bin,而由系统包管理器管理的二进制文件(如由 apt 或 yum 安装的软件)放在 /usr/bin。
验证是否安装成功
|
|
删除 Docker Compose
|
|
Troubleshooting
- 运行
docker-compose命令时出现No such file or directory的错误提示
-
缓存问题: 如果你之前曾经在 /usr/local/bin/docker-compose 路径下安装过 Docker Compose,并在之后更改为 /usr/bin/docker-compose,那么可能会存在缓存问题。尝试使用以下命令刷新缓存:
1hash -r用于清除 Bash 命令路径缓存,以便在下一次执行命令时重新搜索路径。
-
刷新环境变量: 在某些情况下,终端会保留旧的环境变量值,导致新安装的命令无法立即生效。你可以尝试重新加载你的终端或运行以下命令来刷新环境变量:
1source ~/.bashrc用于重新加载 Bash 配置文件,以应用文件中的环境变量设置和别名等定义。
管理 Docker 命令
启用 Docker 服务的自动启动
|
|
禁用 Docker 服务的自动启动
|
|
启动 Docker 服务
|
|
停止 Docker 服务
|
|
重启 Docker 服务
|
|
查看 Docker 服务的状态
|
|
查看 Docker 安装位置
|
|
进入 Docker 容器
|
|
Docker 常用命令
- Docker 卷
|
|
Docker 卷是存储在主机上的,但由 Docker 管理。默认情况下,卷存储在 /var/lib/docker/volumes/ 目录下,每个卷都有一个唯一的目录。这种设计方式使得数据持久化,即使容器重启、被删除,数据仍然可以被保留和重用。还可以在容器之间共享数据
当你删除一个容器时,Docker 默认不会删除其关联的卷,无论这个卷是匿名卷还是命名卷,卷的生命周期不会因为容器的创建和删除而改变
删除容器,保留数据卷,可以再次创建新的容器并继续使用之前挂载的数据卷。只需在创建新容器时 docker run 命令中使用 -v 或 --volume 参数指定你想要挂载的卷和在新容器中的挂载点,就可以使用之前的数据了
docker volume prune 只会识别现在有没有被容器使用,只要没被使用,不管数据卷是怎么被创建的,都会被删除
- Docker run
docker run 命令用于创建新的 Docker 容器并运行命令。以下是一些常用的 docker run 参数:
-
-d或--detach: 在后台运行容器,并返回容器ID -
--name: 指定容器的名称。使用易读方式来引用容器,而不是使用 Docker 自动生成的 ID -
-p或--publish: 发布容器的端口到主机。这允许你将容器的端口映射到主机的端口,使得你可以通过访问主机的端口来访问容器的服务。格式为<hostPort>:<containerPort>或<ip>:<hostPort>:<containerPort> -
-P或--publish-all: 发布容器暴露的所有端口到随机端口 -
-v或--volume: 挂载存储卷,在主机和容器之间共享文件或目录。<hostDir>:<containerDir>或<hostDir>:<containerDir>:<options> -
--rm: 在容器终止后自动删除容器 -
-e或--env: 设置环境变量,配置运行在容器中的程序。格式为key=value或key -
--env-file: 从文件中读取环境变量。 -
-i或--interactive: 保持 STDIN 打开,即使没有连接到容器。这通常与-t参数一起使用,让你可以交互式地运行容器 -
-t或--tty: 分配一个伪终端或控制台。这通常与-i参数一起使用,让你可以交互式地运行容器 -
--network: 指定容器的网络。将容器连接到特定的网络 -
--restart: 容器退出时的重启策略,no、on-failure、always、unless-stopped
这些只是 docker run 命令的一部分参数,Docker 提供了很多其他的参数来配置容器。如果你想查看所有的参数,你可以使用 docker run --help 命令来查看完整的参数列表。但是,上述列出的参数已经足够覆盖大部分的用例。
Docker 容器的网段可以通过 Docker 的命令行工具进行查询。默认的,Docker 在安装时会创建一个名为 bridge 的网络,它被用作 Docker 容器的默认网络。
你可以使用下面的命令来查询 Docker 网络的详细信息:
|
|
这个命令会输出一大段 JSON 格式的数据,其中包含了 bridge 网络的所有配置信息,包括网段(Subnet)。
这个命令的输出可能看起来类似这样:
|
|
在这个例子中,你可以看到网段是 172.17.0.0/16。
如果你的 Docker 容器不是运行在默认的 bridge 网络上,你需要将上述命令中的 bridge 替换为你的 Docker 容器所在的网络名称。
注意,执行这些命令可能需要相应的权限,如果你没有足够的权限,可能需要在命令前加上 sudo。
- Docker compose
在 Docker compose V1 中,docker-compose 命令用于管理 Docker Compose 项目
在 Docker compose V2 中,docker compose 命令用于管理 Docker Compose 项目。此时 compose 可以视作 docker 的二级命令
V1 和 V2 版本参数类似:
-
up: 创建并启动容器 -
down: 停止并删除容器 -
start: 启动容器 -
stop: 停止容器
默认的,docker compose 命令会在当前目录下查找 docker-compose.yml compose.yml docker-compose.yaml compose.yaml 文件。可以使用 -f 或 --file 参数来指定某一路径下的某一文件
其他的如查看容器、查看日志、查看网络等命令,可以使用 docker 命令代替