引言
工欲善其事,必先利其器;工欲利其器,必先选择和学习自己的工具。
想要用好Docker,它的基本命令和操作是必须学习和掌握的技能。
一、Docker命令行基础
当说到 Docker 的命令基础时,有两个重要的方面需要考虑:初始配置和帮助命令。

-
Docker 的基本配置命令
-
docker version:此命令用于检查 Docker 引擎的版本信息,包括客户端和服务器的版本号。 -
docker info:该命令提供有关 Docker 系统的详细信息,例如 Docker 主机的配置、镜像和容器的数量等。 -
docker login:如果您需要从 Docker Hub 或其他 Docker Registry 拉取或推送镜像,您需要使用此命令进行身份验证。您需要提供用户名、密码和可选的电子邮件地址。 -
docker logout:用于注销当前登录的 Docker Hub 或其他 Docker Registry 用户。
-
-
帮助命令
-
docker --help:使用此命令可以获取 Docker 的整体帮助信息。它会列出 Docker 的常用命令和选项,并提供简要说明。 -
docker <command> --help:针对特定的 Docker 命令,您可以使用此命令获取更详细的帮助信息。将<command>替换为您要查看帮助的具体命令,例如docker run --help。
-
二、镜像管理
Docker 提供了一系列命令来管理镜像,这些命令可以用来管理 Docker 镜像,包括拉取、推送、列出、删除和清理镜像等操作。
下面是关于 Docker 镜像管理的常用命令:

-
docker pull:使用此命令可以从 Docker Registry 拉取镜像到本地。您需要指定要拉取的镜像的名称和标签。例如,docker pull nginx:latest将拉取名为 "nginx" 的最新标签镜像。 -
docker push:将本地的镜像推送到 Docker Registry。您需要指定要推送的镜像的名称和标签。例如,docker push username/repository:tag将推送名为 "repository" 的镜像到指定的 Docker Registry。 -
docker images:使用此命令可以列出本地主机上的所有镜像。它将显示每个镜像的名称、标签、镜像 ID、大小和创建时间等信息。 -
docker rmi:该命令用于删除本地主机上的一个或多个镜像。您可以通过指定镜像的名称和标签来删除特定的镜像。例如,docker rmi nginx:latest将删除名为 "nginx" 的最新标签镜像。 -
docker image prune:用于清理未使用的镜像。它将删除本地主机上没有任何容器使用的镜像,以释放磁盘空间。您可以使用docker image prune -a命令来删除所有未使用的镜像,包括没有标签的中间镜像。 -
docker system prune:此命令用于清理不再使用的镜像、容器和网络等资源。它将删除未运行的容器、停止的容器、未使用的镜像以及未使用的网络等,以释放磁盘空间和系统资源。
三、容器管理
Docker 提供了一系列命令来管理容器,这些命令可以用来管理容器,包括创建、启动、停止、重启、列出和删除容器,以及进入容器进行操作和调试。
以下是关于容器管理的常用命令:

-
docker run :使用此命令可以创建并启动一个新的容器。您需要指定要使用的镜像名称、容器的名称、端口映射、环境变量等相关配置。例如,
docker run -d --name mynginx -p 8080:80 nginx将以后台模式创建名为 "mynginx" 的容器,将容器内部的 80 端口映射到主机的 8080 端口,并使用 nginx 镜像。 -
docker start / docker stop :这些命令用于启动和停止容器。docker start 可以启动已创建但已停止的容器,docker stop 可以停止正在运行的容器。您需要提供容器的名称或容器 ID。例如,
docker start mynginx将启动名为 "mynginx" 的容器。 -
docker restart :使用此命令可以重启容器。您需要提供容器的名称或容器 ID。例如,d
ocker restart mynginx将重启名为 "mynginx" 的容器。 -
docker ps:此命令用于列出正在运行的容器。它将显示容器的名称、容器 ID、使用的镜像、状态、端口映射等信息。通过添加 -a 参数,您可以列出所有的容器,包括已停止的容器。
-
docker rm :该命令用于删除容器。您需要提供容器的名称或容器 ID。例如,
docker rm mynginx将删除名为 "mynginx" 的容器。 -
docker exec -it :使用此命令可以进入正在运行的容器的命令行界面。您需要提供容器的名称或容器 ID。例如,
docker exec -it mynginx bash将进入名为 "mynginx" 的容器,并在容器内部运行交互式的 bash shell。
四、数据卷和持久化
Docker 数据卷和持久化提供了一种方便的方式来存储和共享容器中的数据。
下面是关于数据卷和持久化的详细说明和示例:

-
数据卷的创建与挂载
使用
docker volume create命令可以创建一个新的数据卷。例如,docker volume create myvolume将创建一个名为 "myvolume" 的数据卷。然后,使用 docker run 命令的 -v 参数可以将数据卷挂载到容器中。例如,docker run -d --name mynginx -v myvolume:/data nginx将创建一个名为 "mynginx" 的容器,并将 "myvolume" 数据卷挂载到容器的 /data 目录。 -
数据卷的查看与删除
使用
docker volume ls命令可以列出所有的数据卷,包括名称、驱动程序和挂载点等信息。例如,docker volume ls将列出所有的数据卷。使用docker volume rm命令可以删除一个或多个数据卷。例如,docker volume rm myvolume将删除名为 "myvolume" 的数据卷。 -
容器数据的持久化与备份
通过使用数据卷,容器中的数据可以持久化存储,并且不会随着容器的删除而丢失。您可以使用数据卷来存储应用程序的配置文件、数据库文件、日志文件等。通过挂载相同的数据卷到多个容器中,可以实现数据的共享和持久化。此外,您可以使用备份工具(如
docker cp命令或其他备份工具)将容器中的数据复制到本地主机或远程存储位置,以实现数据的备份和恢复。例如:假设有一个使用 MySQL 数据库的容器,并且想要持久化存储数据库文件。可以创建一个名为 "mysql-data" 的数据卷,并将其挂载到容器的 /var/lib/mysql 目录,如下所示:
shell
docker volume create mysql-data
docker run -d --name mysql-container -v mysql-data:/var/lib/mysql mysql
## 这样,即使删除或重新创建容器,数据库文件仍然存在于挂载的数据卷中,从而实现了数据的持久化
注意:在实际应用中,需要采取适当的备份和恢复策略,并确保对数据进行定期备份,以防止数据丢失或损坏。
五、网络配置
Docker 提供了一系列命令来配置和管理容器的网络,这些命令可以用来管理 Docker 中的网络配置,包括创建网络、列出网络、查看网络详细信息、连接和断开容器与网络的关联,以及删除网络等操作。
下面是关于 Docker 网络配置的详细说明:

-
docker network create:使用此命令可以创建一个自定义网络。您可以指定网络的名称、驱动程序和其他网络参数。例如,docker network create mynetwork将创建一个名为 "mynetwork" 的自定义网络。 -
docker network ls:此命令用于列出所有的网络。它将显示网络的名称、驱动程序、作用域和其他信息。例如,docker network ls将列出所有的网络。 -
docker network inspect:使用此命令可以查看特定网络的详细信息。您需要提供网络的名称或网络 ID。例如,docker network inspect mynetwork将显示名为 "mynetwork" 的网络的详细信息。 -
docker network connect / docker network disconnect:这些命令用于将容器连接到或断开特定网络。您需要提供容器的名称或容器 ID,以及网络的名称或网络 ID。例如,docker network connect mynetwork mycontainer将将名为 "mycontainer" 的容器连接到名为 "mynetwork" 的网络。 -
docker network rm:该命令用于删除一个或多个网络。您需要提供网络的名称或网络 ID。例如,docker network rm mynetwork将删除名为 "mynetwork" 的网络。 -
docker network prune:使用此命令可以清理未使用的网络。它将删除没有任何容器连接的网络,以释放资源。例如,docker network prune将删除所有未使用的网络。
注意:
docker network connect命令还可以通过--alias参数为容器指定别名,以便容器可以使用别名来与其他容器通信。
六、Dockerfile
6.1 Dockerfile的作用
Dockerfile 是用于定义 Docker 镜像构建过程的文本文件。它包含一系列指令和配置,用于指导 Docker 引擎在构建镜像时执行的操作。
Dockerfile 的作用是提供了一种可重复、可自动化的方式来构建镜像,并且可以通过版本控制系统进行管理和共享。
6.2 常用指令说明
当编写 Dockerfile 时,可以使用多种指令来定义镜像的构建过程;这些指令在 Dockerfile 中提供了灵活的配置选项。
下面是一些常用的 Dockerfile 指令的详细说明:

- FROM :
FROM指令用于指定基础镜像。它指定了构建新镜像所基于的镜像。
例如:
shell
# 构建新镜像时将基于最新的 Ubuntu 镜像。
FROM ubuntu:latest
- RUN :
RUN指令用于在容器内执行命令。它可以用于安装软件包、执行脚本或进行其他系统配置。
例如:
shell
# 更新软件包列表和安装 curl
RUN apt-get update && apt-get install -y curl
- CMD :
CMD指令用于指定容器启动时要执行的命令。它有多种形式,可以执行单个命令、执行脚本或执行应用程序。
例如:
bash
# 在容器启动时执行名为 `app.py` 的 Python 应用程序。
CMD ["python", "app.py"]
- EXPOSE :
EXPOSE指令用于声明容器运行时要监听的网络端口。它并不会自动将宿主机的端口映射到容器内部,而只是声明容器打算监听哪些端口。
例如:
yaml
# 容器将监听 8080 端口
EXPOSE 8080
- VOLUME :
VOLUME指令用于声明容器中的挂载点,并指示 Docker 将持久化存储数据的位置。它可以在容器内部或宿主机上创建一个挂载点。
例如:
bash
# 在容器内创建一个挂载点 `/data`,用于持久化存储数据。
VOLUME /data
- COPY :
COPY指令用于将文件或目录从构建上下文复制到容器中。
语法:
xml
COPY <源路径> <目标路径>
<源路径> 是相对于构建上下文的路径,可以是单个文件或整个目录。<目标路径> 是容器内的目标路径,用于指定文件或目录要复制到的位置。
例如:
bash
COPY app.py /app/
COPY ./src /app/src
- ADD :
ADD指令与COPY类似,它也用于将文件或目录从构建上下文复制到容器中。但相对于COPY,ADD还支持更多功能,例如自动解压缩压缩文件、从网址下载文件等。
语法:
xml
ADD <源路径> <目标路径>
与 COPY 相同,<源路径> 是相对于构建上下文的路径,而 <目标路径> 是容器内的目标路径。
例如:
bash
ADD app.tar.gz /app/
ADD http://example.com/file.txt /app/
- WORKDIR :
WORKDIR指令用于设置容器内部的工作目录,即在容器内执行后续命令的默认目录。它的语法如下:
复制
xml
WORKDIR <工作目录路径>
<工作目录路径> 可以是相对路径或绝对路径。如果指定的目录不存在,WORKDIR 指令会自动创建该目录。
例如:
bash
WORKDIR /app
- ENV :
ENV指令用于设置环境变量。环境变量可以在容器内的运行过程中被访问和使用。
语法:
xml
ENV <变量名>=<值>
可以指定一个或多个环境变量,每个环境变量都由 <变量名> 和 <值> 组成。
例如:
ini
ENV APP_VERSION=1.0
ENV DB_HOST=localhost DB_PORT=3306
6.3 构建镜像:docker build
6.3.1 语法
在 Docker 中,使用 Dockerfile 构建镜像是通过执行 docker build 命令来完成的。以下是关于 docker build 的详细说明:
css
docker build [选项] <上下文路径>
-
[选项]:用于指定构建镜像的各种选项,例如镜像标签、构建缓存等。常用选项包括:-
-t或--tag:指定镜像的标签。例如,-t myimage:latest表示将构建的镜像标记为myimage,标签为latest。 -
--no-cache:禁用构建缓存,每一条指令都将强制重新执行。 -
其他选项可以使用
docker build --help命令查看。
-
-
<上下文路径>:指定 Docker 上下文的路径。Docker 在构建镜像时会将指定路径下的文件和目录作为构建上下文。Docker 引擎将递归地复制上下文中的内容,并将其发送到 Docker 服务器,用于构建过程中的各种操作。
6.3.2 执行过程
docker build 命令的执行过程如下:
七、Docker命令行的高级操作
Docker还有一些命令不在上面这些模块里面,我分了一个高级操作,哈哈;下面是 Docker 命令行的一些高级操作的详细说明:

7.1 日志管理
-
docker logs命令用于查看容器的日志输出。可以使用容器的 ID 或名称作为参数来指定要查看日志的容器。例如:docker logs mycontainer将显示名为 "mycontainer" 的容器的日志输出。 -
可以使用
--follow或-f选项来实时跟踪日志输出,类似于tail -f命令。 -
--since和--until选项可以指定一个时间范围,只显示在指定时间范围内生成的日志。
7.2 容器资源限制
-
docker run命令用于创建和运行容器。通过使用--memory和--cpus参数,可以限制容器可使用的内存和 CPU 资源。 -
--memory参数用于限制容器使用的内存量。可以指定具体的大小,例如--memory=1g表示限制为 1GB 内存。也可以使用相对值,例如--memory=50%表示限制为宿主机内存的 50%。 -
--cpus参数用于限制容器可以使用的 CPU 核心数。可以指定一个小数值,例如--cpus=0.5表示限制为半个 CPU 核心。也可以使用整数值,例如--cpus=2表示限制为 2 个 CPU 核心。
7.3 容器的复制和重命名
-
docker commit命令用于将容器的当前状态保存为新的镜像。可以指定容器的 ID 或名称以及要创建的新镜像的名称和标签。例如:docker commit mycontainer myimage:tag将基于名为 "mycontainer" 的容器创建一个名为 "myimage",标签为 "tag" 的新镜像。 -
docker tag命令用于为现有的镜像创建新的标签。可以指定现有镜像的名称和标签,以及要创建的新标签。例如:docker tag myimage:tag myimage:latest将为名为 "myimage",标签为 "tag" 的镜像创建一个名为 "myimage",标签为 "latest" 的新标签。 -
docker rename命令用于为容器重命名。可以指定容器的当前名称和新名称。例如:docker rename mycontainer newcontainer将名为 "mycontainer" 的容器重命名为 "newcontainer"。
八、总结
Docker命令行的重要性不容忽视,它是与Docker生态系统交互的核心工具。通过命令行,用户能够精确控制Docker的各个方面,从而最大化Docker的效益。
通过本文的阅读,我们深入了解了Docker命令行的基本操作和一些高级功能。从Docker的安装和配置开始,到镜像和容器的管理,再到数据卷的使用、网络配置、Dockerfile的编写以及高级命令的应用,每一步都是构建和维护Docker化应用不可或缺的技能。
正如歇后语所言:"瓜熟蒂落------水到渠成",掌握了这些基础和高级的Docker命令,就像是瓜熟自然蒂落,使得在使用Docker时能够水到渠成,得心应手。无论是开发、测试还是部署应用,Docker都能提供强大的支持,让整个过程变得更加高效和简单。
记住,实践是检验真理的唯一标准。理论知识固然重要,但将其应用于实际操作中,才能真正体会到Docker的强大和便捷。因此,不妨动手实践一下本文中提到的命令和操作,相信会有更多的收获。
浅知拙见;如果有任何错误或建议,请随时指正和提出。