Docker 基本使用
安装或删除 Docker
安装桌面版:
https://www.docker.com/products/docker-desktop
安装服务器版:
https://docs.docker.com/engine/install/
1、删除所有非官方软件包:
|
|
|
|
3、安装 Docker 包
-
若要安装最新版本,请运行:
1sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -
若要安装特定版本的 Docker Engine,请首先在存储库中列出可用版本:
1 2 3 4 5 6# 最后可用版本: apt-cache madison docker-ce | awk '{ print $3 }' 5:24.0.0-1~debian.11~bullseye 5:23.0.6-1~debian.11~bullseye ...选择所需的版本并安装:
1 2VERSION_STRING=5:24.0.0-1~debian.11~bullseye sudo apt-get install docker-ce=$VERSION_STRING docker-ce-cli=$VERSION_STRING containerd.io docker-buildx-plugin docker-compose-plugin
4、通过运行 hello-world 映像来验证安装是否成功:
|
|
此命令下载测试映像并在容器中运行它。当容器运行时,它会打印确认消息并退出。
卸载 Docker Engine:
1、卸载 Docker Engine、CLI、containerd 和 Docker Compose 包:
|
|
2、主机上的映像、容器、卷或自定义配置文件不会自动删除。要删除所有映像、容器和卷,请执行以下操作:
|
|
You have to delete any edited configuration files manually. 您必须手动删除任何编辑的配置文件。
查看状态、启动停止
-
启动 docker 服务:systemctl start docker.service
-
设置开机启动:systemctl enable docker.service
-
查看 docker 状态:systemctl status docker.service
-
停止 docker 服务:systemctl stop docker.service
-
查看 docker 版本:docker version
非 root 用户运行 Docker
https://docs.docker.com/engine/install/linux-postinstall
1、添加docker用户组:sudo groupadd docker
执行以上命令会提示已存在,原因是在安装docker时已自动创建。
2、将指定用户添加到用户组($USER 为你的用户名):sudo usermod -aG docker $USER
3、查看是否添加成功:cat /etc/group | grep ^docker
4、注销并重新登录,以便重新评估您的组成员身份。
如果在虚拟机中运行 Linux,则可能需要重新启动虚拟机才能使更改生效。
5、您还可以运行以下命令来激活对组的更改:
|
|
6、验证是否可以在没有 docker sudo .
|
|
此命令下载测试映像并在容器中运行它。当容器运行时,它会打印一条消息并退出。
7、如果在将用户添加到 docker 组之前最初运行 sudo Docker CLI 命令,则可能会看到以下错误:
|
|
此错误表示 ~/.docker/ 目录的权限设置不正确,因为之前使用了该 sudo 命令。
若要解决此问题,请删除 ~/.docker/ 目录(它会自动重新创建,但任何自定义设置都会丢失),或者使用以下命令更改其所有权和权限:
|
|
Docker 命令
|
|
目录挂载
https://docker.easydoc.net/doc/81170005/cCewZWoN/kze7f0ZR

几种挂载方式
bind mount直接把宿主机目录映射到容器内,适合挂代码目录和配置文件。可挂到多个容器上volume由容器创建和管理,创建在宿主机,所以删除容器不会丢失,官方推荐,更高效,Linux 文件系统,适合存储数据库数据。可挂到多个容器上tmpfs mount适合存储临时文件,存宿主机内存中。不可多容器共享。
bind mount 方式 --mount type=bind,source=/tmp,target=/usr
volume 方式 -v /tmp:/usr
文档参考:https://docs.docker.com/storage/、https://www.cnblogs.com/ittranslator/p/13352727.html
示例:
docker run -p 8080:8080 --name test-hello -v D:/code:/app -d test:v1
注意! 因为挂载后,容器里的代码就会替换为你本机的代码了,如果你代码目录没有
node_modules目录,你需要在代码目录执行下npm install --registry=https://registry.npm.taobao.org确保依赖库都已经安装,否则可能会提示“Error: Cannot find module ‘koa’” 如果你的电脑没有安装 nodejs,你需要安装一下才能执行上面的命令。
Docker compose
在 Compose V2 中,docker-compose 命令已经不适用,应该用 docker compose 来替代前面命令。
要把项目依赖的多个服务集合到一起,我们需要编写一个docker-compose.yml文件,描述依赖哪些服务
参考文档:https://docs.docker.com/compose/
在docker-compose.yml 文件所在目录,执行:docker-compose up就可以跑起来了。
命令参考:https://docs.docker.com/compose/reference/up/
在后台运行只需要加一个 -d 参数docker compose up -d
查看运行状态:docker compose ps
停止运行:docker compose stop
重启:docker compose restart
重启单个服务:docker compose restart service-name
进入容器命令行:docker compose exec service-name sh
查看容器运行log:docker compose logs [service-name]
用 docker-compose 构建 alist 服务
创建 docker-compose.yaml,并使用 docker compose up 启动应用程序(后台运行服务在末尾加 -d)
|
|
|
|
docker-compose 更新:
|
|
Docker web 安装配置
|
|
多容器通信
https://docker.easydoc.net/doc/81170005/cCewZWoN/U7u8rjzF
创建一个名为test-net的网络:
|
|
运行 Redis 在 test-net 网络中,别名redis,这个服务在这个网络中的主机名就是redis了
|
|
修改代码中访问redis的地址为网络别名
|
|
运行 Web 项目,使用同个网络
|
|
查看数据
http://localhost:8080/redis
Docker 开启 ipv6 配置
/etc/docker/daemon.json
|
|
Docker 四种网络模式
(后面附上以指定网络模式开启nginx的命令)
1.host模式
容器和宿主机共享network,这时候localhost就可以访问宿主机端口了。
docker run -d --network host --name nginx
2.container模式
容器A和容器B共享network,就是说容器之间可以通过localhost直接访问。
docker run -d --network container --name nginx
3.none模式
容器与宿主机隔绝,不能联网,安全性最高,一般很少用到。
docker run -d --network none --name nginx
4.bridge模式(默认模式)
每个容器有自己的network,通过localhost访问不到宿主机
docker run -d --name nginx