Docker 是一种开源的容器化平台,它能够将应用程序及其依赖打包成一个标准化的单元,从而实现在任何环境中的一致性运行。无论是开发、测试还是生产环境,Docker 都为我们提供了灵活且高效的解决方案。
本文将通过详细整理 Docker 的常用命令,帮助你从基础操作到高级使用,全面掌握 Docker 技能。
一、Docker 基础概念
在开始使用 Docker 之前,了解以下几个基础概念非常重要:
- 镜像(Image):镜像是一个只读模板,包含了应用程序及其依赖的所有内容。镜像是创建容器的基础,它可以从公共仓库(如 Docker Hub)中获取,也可以通过 Dockerfile 自行构建。
- 容器(Container):容器是基于镜像的实例,它封装了应用程序的所有依赖和运行环境。每个容器相互隔离,且可以独立运行。
- 仓库(Registry):镜像存储的地方。最常用的仓库是 Docker Hub,但也可以搭建私有仓库。
- 数据卷(Volume):数据卷是一种 Docker 提供的持久化存储方式,数据卷存储在容器外部,用于保存容器产生的持久性数据。
二、Docker 安装与启动
1. 安装 Docker
根据你的操作系统,选择适当的安装方式:
- Ubuntu/Debian:
sudo apt update
sudo apt install docker.io
- CentOS:
sudo yum install docker
- Windows/MacOS:可以通过 Docker Desktop 来安装。
安装完成后,启动 Docker 服务:
sudo systemctl start docker
2. 检查 Docker 是否正确安装
安装完成后可以通过以下命令检查 Docker 是否安装成功,并查看版本号:
docker --version
这将输出类似如下的信息:
Docker version 20.10.7, build f0df350
三、镜像管理
1. 拉取镜像
拉取镜像是使用 Docker 的第一步,镜像从远程仓库(如 Docker Hub)下载。可以使用以下命令来拉取镜像:
docker pull [镜像名]:[标签]
标签通常用来表示镜像的版本号,例如拉取 ubuntu
的 20.04 版本:
docker pull ubuntu:20.04
如果没有指定标签,Docker 默认会拉取 latest
标签的版本:
docker pull nginx
2. 查看本地镜像列表
查看主机上已有的镜像:
docker images
输出示例:
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 2b95cfa1f442 5 days ago 133MB
ubuntu 20.04 ba6acccedd29 2 weeks ago 72.8MB
这列出了镜像的名称(REPOSITORY)、标签(TAG)、镜像 ID、创建时间和大小。
3. 删除镜像
如果不再需要某个镜像,可以将其删除:
docker rmi [镜像ID]
例如,删除 ID 为 ba6acccedd29
的镜像:
docker rmi ba6acccedd29
如果镜像正在被使用,可以通过 -f
参数强制删除:
docker rmi -f [镜像ID]
4. 自定义镜像:构建 Dockerfile
通过 Dockerfile,用户可以构建自定义的镜像。Dockerfile 是包含一系列命令的文本文件,定义了如何构建镜像。使用 docker build
命令可以基于 Dockerfile 构建镜像。
Dockerfile 示例:
# 使用基础镜像
FROM ubuntu:20.04
# 安装应用
RUN apt-get update && apt-get install -y nginx
# 复制配置文件
COPY ./my-nginx-config /etc/nginx/nginx.conf
# 暴露端口
EXPOSE 80
# 启动命令
CMD ["nginx", "-g", "daemon off;"]
构建镜像:
docker build -t my-nginx:v1 .
此命令将在当前目录下查找 Dockerfile 并构建一个名为 my-nginx
的新镜像,版本为 v1
。
四、容器管理
1. 运行容器
启动一个基于镜像的容器:
docker run [选项] [镜像名]:[标签]
常用选项:
-d
:后台运行容器。-p
:指定端口映射(格式:宿主机端口:容器端口
)。--name
:指定容器名称。-v
:挂载数据卷(格式:宿主机路径:容器路径
)。
例如,运行一个 Nginx 容器并映射 8080 端口到容器的 80 端口:
docker run -d -p 8080:80 --name mynginx nginx
2. 查看容器状态
查看当前运行的容器列表:
docker ps
输出示例:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e5080f377d38 nginx "nginx -g 'daemon of…" 3 hours ago Up 3 hours 0.0.0.0:8080->80/tcp mynginx
如果想查看所有容器(包括停止的):
docker ps -a
3. 停止、启动和重启容器
停止容器:
docker stop [容器ID或名称]
启动一个已停止的容器:
docker start [容器ID或名称]
重启容器:
docker restart [容器ID或名称]
4. 进入容器
如果想在运行中的容器内执行命令,可以使用 docker exec
命令进入容器:
docker exec -it [容器ID或名称] /bin/bash
例如,进入一个 Nginx 容器并进入 bash 终端:
docker exec -it mynginx /bin/bash
5. 删除容器
如果容器已经停止或不再需要,可以通过以下命令删除它:
docker rm [容器ID或名称]
如果容器正在运行,可以强制删除:
docker rm -f [容器ID或名称]
五、数据管理
1. 数据卷创建与挂载
数据卷用于持久化容器中的数据,即使容器删除或重新创建,数据卷中的数据仍然存在。
创建数据卷:
docker volume create [卷名]
查看已创建的数据卷:
docker volume ls
在启动容器时,将数据卷挂载到容器中:
docker run -d -v [卷名]:[容器路径] [镜像名]
例如,将名为 my-volume
的卷挂载到容器的 /data
目录下:
docker run -d -v my-volume:/data ubuntu
删除数据卷:
docker volume rm [卷名]
六、网络管理
1. 自定义 Docker 网络
Docker 默认会为容器创建一个桥接网络。你也可以创建自定义网络,以便容器之间通过网络名称互相通信。
创建自定义网络:
docker network create [网络名]
将容器连接到自定义网络:
docker network connect [网络名] [容器ID或名称]
2. 查看网络配置
查看 Docker 中已创建的网络:
docker network ls
显示特定网络的详细信息:
docker network inspect [网络名]
七、Docker 日志与监控
1. 查看容器日志
可以通过 docker logs
命令查看容器的日志输出:
docker logs [容器ID或名称]
如果需要实时查看日志,可以加上 -f
参数:
docker logs -f [容器ID或名称]
2. 监控容器资源
查看容器的 CPU、内存、网络等资源使用情况:
docker stats
输出示例:
CONTAINER ID NAME CPU
评论 (0)