sudo apt update

sudo apt search docker.io
sudo apt install docker.io

sudo systemctl stop docker.socket
sudo systemctl stop docker
 修改 Docker 配置文件：
编辑 Docker 的 daemon 配置文件 /etc/docker/daemon.json。如果该文件不存在，您需要创建它。
sudo vi /etc/docker/daemon.json
{
  "data-root": "/data/opt/docker"
  "registry-mirrors": [
  "https://docker.nju.edu.cn", 
  "https://hub.littlediary.cn",
  "https://hub.xdark.top",
  "https://dockerpull.org",
  "https://hub.crdz.gq",
  "https://docker.1panel.live",
  "https://docker.unsee.tech"
}
使用以下命令重新启动 Docker 服务：
sudo systemctl start docker.socket
sudo systemctl start docker

其他方法供参考：
sudo systemctl daemon-reload
sudo systemctl start docker

如果一开始没有修改好 /etc/docker/daemon.json 且定义好 "data-root" 目录，那就需要做一次迁移动作，以下是迁移步骤：
rsync -aP /var/lib/docker/ /data/opt/docker
命令解析
这个命令使用rsync工具来同步文件和目录，具体用法如下：

命令解析
rsync: 是一种非常强大的文件和目录同步工具，常用于备份和镜像。
-aP: 这是rsync命令中的选项，通常组合使用来达到特定的同步效果。
-a（–archive）: 这个选项是多个选项的组合，主要包括保持符号链接（-l），保持权限（-p），保持文件时间戳（-t），保持用户和组信息（-o和-g），以及递归复制目录（-r）。简单来说，就是以“归档模式”来复制，尽量保持原有文件的属性和结构。
-P: 这个选项是--partial --progress的简写，允许部分文件传输和显示传输过程中的进度信息。如果传输被中断，已传输的部分不会被删除，下次传输时会从中断处继续。显示进度信息可以让用户知道当前传输状态。
使用场景
/var/lib/docker/: 这是Docker的默认数据存储目录，包括容器、镜像、卷等数据。一定要注意，源目录最后要带/
/data/docker: 这是目标目录，你想将Docker数据同步到这个位置。一定要注意，目标目录最后不要带/
命令功能
这个命令的功能是将/var/lib/docker/目录中的所有内容（包括文件和子目录）同步到/data/docker目录中。同步过程会尽量保留所有文件的属性和结构，如文件的权限、时间戳、用户组信息等，同时在传输过程中显示进度，并允许中断后的续传。

常见用途
这个命令常用于以下几种情况：

数据迁移：当你想将Docker数据从一个硬盘迁移到另一个更大或更快的硬盘时。
备份：定期备份Docker数据，以防数据丢失或损坏。
数据同步：在多个系统或位置保持Docker数据的一致性。
这个命令是管理和维护Docker环境时一个非常实用的工具，可以有效地帮助管理员管理大量的容器数据。

# 设置 Docker 开机自启
# sudo systemctl enable docker
sudo systemctl disable docker

sudo systemctl status docker

可以使用以下命令查看容器状态，确保 MySQL 正在运行：
docker ps

使用docker network ls可以查看网络列表，列出所有NetworkID；
docker network inspect NetworkID 可以查看对应网络的配置。

使用如下命令获得容器的ip地址
docker inspect --format='{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)
/mysql-slave - 172.17.0.3
/mysql-master - 172.17.0.2

可以使用以下命令查看所有容器，包括运行和没有运行状态的所有容器：
docker ps -a

如果报错，dial unix /var/run/docker.sock: connect: permission denied
原因分析：这是因为你当前的用户没有这个权限。默认情况下，docker 命令会使用 Unix socket 与 Docker 引擎通讯。而只有 root 用户和 docker 组的用户才可以访问 Docker 引擎的 Unix socket。出于安全考虑，一般 Linux 系统上不会直接使用 root 用户。即我们当前的用户不是root用户。

        解决办法：把我们当前的用户添加到docker组中就可以了，这样他们就是一家人了。

第一步：sudo gpasswd -a username docker  #将普通用户username加入到docker组中，username这个字段也可以直接换成$USER。所以这样执行：
sudo gpasswd -a $USER docker
第二步：
newgrp docker  #更新docker组
第三步：再执行你报错的命令，此时就不会报错了。


在执行docker pull 或者 docker -run 的时候报错，
docker: Error response from daemon: Get “https://registry-1.docker.io/v2/”: context deadline exceeded (Client.Timeout exceeded while awaiting headers).
刚开始使用的是阿里的镜像源，但是不行. 所以在网络上找了很多，终于找到有效的镜像源了. 亲测有效！！！
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://docker.nju.edu.cn", 
"https://hub.littlediary.cn",
"https://hub.xdark.top",
"https://dockerpull.org",
"https://hub.crdz.gq",
"https://docker.1panel.live",
"https://docker.unsee.tech"
]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

重启
docker restart mysql-container

docker pull mysql:8.0
sudo docker images

已经创建了容器，可以 start
docker start b90cfd57ec1f
docker start mysql-container


在Docker中，你可以使用以下命令来停止正在运行的容器：

停止单个容器
如果你知道容器的ID或名称，你可以使用以下命令来停止它：

docker stop 容器ID或名称
例如，如果容器的ID是abc123，你可以这样停止它：

docker stop abc123
或者，如果你知道容器的名称是my_container，你可以这样停止它：

docker stop my_container
docker stop mysql-container


停止所有运行的容器
如果你想停止所有正在运行的容器，可以使用以下命令：

docker stop $(docker ps -q)
这里，docker ps -q命令列出了所有正在运行的容器的ID，然后docker stop命令会停止这些容器。

1. 删除指定容器
docker rm -f <containerid>

2. 删除未启动成功的容器
docker rm $(docker ps -a|grep Created|awk '{print $1}')
或者
docker rm $(docker ps -qf status=created)

3. 删除退出状态的容器
docker rm $(docker ps -a|grep Exited|awk '{print $1}')
或者
docker rm $(docker ps -qf status=exited)

