Docker 安装与使用

介绍


安装与卸载

Windows

  • 默认安装到 C:\Program Files\Docker,管理员打开 CMD,输入以下命使其安装到 D 盘:
    • 安装到非 C 盘,Docker Desktop 后面的设置修改会报错,建议还是默认安装
1
mklink /J "C:\Program Files\Docker" "D:\"
  • 设置:
    • Resources – Disk image location,将存储目录、修改为 D 盘
    • 换源:Docker Engine – 添加 registry-mirrors 参数(下面的源可能失效)
1
2
3
4
5
6
7
{
"registry-mirrors": [
"https://registry.docker-cn.com",
"http://hub-mirror.c.163.com",
"https://docker.mirrors.ustc.edu.cn"
]
}

macOS

1
2
3
4
5
6
7
8
9
{
"proxies": {
"default": {
"httpProxy": "http://127.0.0.1:7890",
"httpsProxy": "http://127.0.0.1:7890",
"noProxy": "localhost,127.0.0.1,.daocloud.io"
}
},
}

使用

工具

1
2
3
4
# 使用方法 添加前缀
docker.io/library/busybox # 原
m.daocloud.io/docker.io/library/busybox # 添加镜像
dockerhub.icu/library/busybox # 添加镜像

Docker 命令

  • docker 命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
docker --help

# 通用命令:
run # 从一个镜像中创建并启动一个容器
exec # 在容器中执行一条命令
ps # 列出容器
build # 根据 Dockerfile 构建一个镜像
pull # 从 registry 拉取一个镜像
push # 推送一个镜像到 registry
images # 列出镜像
login # 登录到 registry
logout # 从 registry 退出
search # 在 Docker Hub 中搜索镜像
info # 查看 Docker 信息

# 管理命令:
container # 管理容器
image # 管理镜像
network # 管理网络

# 命令:
attach # 介入到一个正在运行的容器
commit # 根据容器的更改创建一个新的镜像
cp # 在本地文件系统与容器中复制文件/文件夹
create # 创建一个新容器
kill # 杀死一个或多个正在运行的容器
logs # 取得容器的日志
rename # 重命名一个容器
restart # 重新启动一个或多个容器
rm # 删除一个或多个容器
rmi # 删除一个或多个镜像
start # 启动一个或多个已经停止运行的容器
stats # 显示一个容器的实时资源占用
stop # 停止一个或多个正在运行的容器
top # 显示一个容器内的所有进程
  • docker run 命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
docker run [OPTIONS] IMAGE [COMMAND] [ARG…]

# 参数
-d --detach # 后台运行
-it # 交互式终端(两个参数)
--name # 指定容器名称
-p --publish # 将主机端口映射到容器内部的端口。如 -p 8080:80
-v --volume # 挂载主机文件系统上的目录或文件到容器内部。如 -v /host/path:/container/path
--network # 指定容器连接的网络。可以使用默认的 bridge 网络,也可以连接到自定义网络
-e --env # 设置环境变量,将其传递给容器
--rm # 在容器停止时自动删除容器
--link # 连接容器到另一个容器,可以通过其他容器的别名来访问
--restart # 容器重启策略,always、on-failure、unless-stopped 等

# 示例
docker run -it \
--name texlive \
-v $HOME/scripts:/workdir/scripts \
texlive/texlive /bin/bash
  • 其他命令
1
2
3
docker container prune  # 删除已停止的容器
docker image prune # 删除未使用的镜像
docker ps -a # 查看所有容器(包括已停止的)
  • 注意事项:
    • docker run 时不指定容器名称,会自动分配名称,如 silly_hawking,用于临时容器或不需关心容器名称的情况下使用。
    • docker rundocker create 之间的区别:前者是创建容器并运行,后者是只创建容器。
    • docker pull library/hello-world 中的 library/hello-world 是镜像在仓库的位置,其中 library 是镜像所在的组,hello-world 是镜像名称;用 <repository>:<tag> 格式指定镜像版本,默认以 latest 作为默认标签
    • 不同的容器 Registry:
1
2
3
docker.io/XXX/XXX  # Docker Hub Registry
ghcr.io/XXX/XXX # GitHub Container Registry
quay.io/XXX/XXX # Quay.io RedHat Container Registry

制作镜像


Docker Compose

【docker入门2】实战~如何组织一个多容器项目docker-compose_哔哩哔哩_bilibili

  • Docker 的多容器控制(容器编排),用于 Docker 自动化;将多个 Docker 容器的操作命令,简化成一条命令,自动完成配置中的容器启动
1
2
3
4
5
6
7
8
9
10
11
docker-compose.yml      # 配置文件
.env # 环境变量文件

# docker compose 可写成 docker-compose
docker compose up -d # 启动 Docker 服务
docker compose pull # 拉取最新的 Docker 镜像
docker compose stop # 停止服务
docker compose down # 停止服务并删除容器
docker compose build # 根据配置文件构建 Docker 镜像
docker compose ps # 列出正在运行的服务
docker compose logs # 日志

相关问题

  • Docker 容器中的数据如何同步(用 rsync,没找到其他好的方法)

  • Linux 版的 Docker Desktop 登录比 Windows 和 Mac 端要麻烦一些

  • 可通过 Docker 部署的应用(图源:水源社区)