Docker 是一个开源的容器化平台,它使得开发人员可以打包应用程序及其所有依赖项,并在任何环境中运行。Docker 提供了简单而强大的命令行工具来管理容器、镜像、网络等。本文将详细介绍 Docker 的常用命令及其使用方法。
1. 安装 Docker
在使用 Docker 之前,首先需要安装 Docker。以下是在不同操作系统上安装 Docker 的方法:
Ubuntu
sudo apt-get update
sudo apt-get install docker.io
CentOS
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io
macOS 和 Windows
可以从 Docker 官方网站下载 Docker Desktop:
安装完成后,启动 Docker 并验证安装是否成功:
docker --version
2. Docker 基本命令
2.1 启动和停止 Docker 服务
启动 Docker 服务:
sudo systemctl start docker
停止 Docker 服务:
sudo systemctl stop docker
重启 Docker 服务:
sudo systemctl restart docker
查看 Docker 服务状态:
sudo systemctl status docker
2.2 查看 Docker 信息
查看 Docker 系统信息:
docker info
查看 Docker 版本:
docker --version
查看 Docker 客户端和服务器版本:
docker version
3. Docker 镜像管理
3.1 搜索镜像
在 Docker Hub 上搜索镜像:
docker search <image_name>
例如,搜索 Ubuntu 镜像:
docker search ubuntu
3.2 拉取镜像
从 Docker Hub 拉取镜像:
docker pull <image_name>:<tag>
例如,拉取 Ubuntu 20.04 镜像:
docker pull ubuntu:20.04
3.3 查看本地镜像
查看本地所有的镜像:
docker images
查看指定镜像:
docker images <image_name>
3.4 删除镜像
删除本地镜像:
docker rmi <image_id>
强制删除镜像(即使有容器依赖):
docker rmi -f <image_id>
4. Docker 容器管理
4.1 运行容器
运行一个新的容器:
docker run -it --name <container_name> <image_name>:<tag>
例如,运行一个 Ubuntu 容器并进入交互模式:
docker run -it --name my_ubuntu ubuntu:20.04 /bin/bash
运行容器并在后台运行:
docker run -d --name <container_name> <image_name>:<tag>
映射端口和挂载数据卷:
docker run -d -p <host_port>:<container_port> -v <host_dir>:<container_dir> <image_name>:<tag>
例如,运行一个 Nginx 容器并将宿主机的 8080
端口映射到容器的 80
端口:
docker run -d -p 8080:80 --name my_nginx ngin
5. Docker 网络管理
5.4 删除网络
删除不再使用的 Docker 网络:
docker network rm <network_name>
例如,删除名为 my_bridge_network
的网络:
docker network rm my_bridge_network
5.5 查看网络详情
查看指定网络的详细信息,包括连接到该网络的容器:
docker network inspect <network_name>
例如,查看 bridge
网络的详细信息:
docker network inspect bridge
5.6 使用自定义网络
在启动容器时,可以使用 --network
参数指定自定义网络:
docker run -it --name <container_name> --network <network_name> <image_name>:<tag>
例如,使用自定义网络 my_bridge_network
启动一个 Ubuntu 容器:
docker run -it --name my_ubuntu --network my_bridge_network ubuntu:20.04 /bin/bash
5.7 容器间通信
连接到同一网络的容器可以通过容器名称互相通信。例如,如果 container1
和 container2
都连接到 my_bridge_network
,则 container1
可以通过 ping container2
来测试网络连通性。
ping container2
6. Docker 数据卷管理
Docker 数据卷用于在容器和宿主机之间共享数据,以及在容器之间共享数据。数据卷是持久化的,即使容器被删除,数据卷中的数据也不会丢失。
6.1 创建数据卷
创建一个新的数据卷:
docker volume create <volume_name>
例如,创建一个名为 my_volume
的数据卷:
docker volume create my_volume
6.2 查看数据卷
查看所有数据卷:
docker volume ls
查看指定数据卷的详细信息:
docker volume inspect <volume_name>
例如,查看 my_volume
的详细信息:
docker volume inspect my_volume
6.3 删除数据卷
删除指定数据卷:
docker volume rm <volume_name>
强制删除所有未使用的数据卷:
docker volume prune
6.4 使用数据卷
在运行容器时,可以使用 -v
参数挂载数据卷:
docker run -it --name <container_name> -v <volume_name>:<container_path> <image_name>:<tag>
例如,将数据卷 my_volume
挂载到容器 /data
目录:
docker run -it --name my_ubuntu -v my_volume:/data ubuntu:20.04 /bin/bash
6.5 挂载宿主机目录作为数据卷
将宿主机目录挂载到容器中:
docker run -it --name <container_name> -v <host_path>:<container_path> <image_name>:<tag>
例如,将宿主机的 /tmp/data
目录挂载到容器的 /data
目录:
docker run -it --name my_ubuntu -v /tmp/data:/data ubuntu:20.04 /bin/bash
6.6 数据卷容器
使用数据卷容器可以在多个容器之间共享数据卷。首先,创建一个带有数据卷的容器:
docker create -v <container_path> --name <volume_container_name> <image_name>:<tag>
然后,在其他容器中使用 --volumes-from
参数挂载该数据卷:
docker run -it --name <container_name> --vol
6.7 备份和恢复数据卷
备份数据卷
-
启动一个临时容器,挂载目标数据卷,并将数据卷内容复制到宿主机目录:
docker run --rm -v <volume_name>:/source -v <host_backup_path>:/backup busybox tar -czvf /backup/backup.tar.gz -C /source .
例如,备份
my_volume
数据卷到/tmp/backup
目录:docker run --rm -v my_volume:/source -v /tmp/backup:/backup busybox tar -czvf /backup/backup.tar.gz -C /source .
-
恢复数据卷
创建一个新的数据卷,并将备份文件解压到该数据卷:
docker run --rm -v <new_volume_name>:/target -v <host_backup_path>:/backup busybox tar -xzvf /backup/backup.tar.gz -C /target
例如,恢复备份文件到
new_volume
数据卷:docker run --rm -v new_volume:/target -v /tmp/backup:/backup busybox tar -xzvf /backup/backup.tar.gz -C /target