Docker 是一种开源的容器化平台,用于构建、打包和运行应用程序。它提供了一种轻量级、可移植和可扩展的方式来将应用程序及其所有依赖项打包到一个独立的容器中。下面是一个针对 Docker 新手的使用指南,帮助你了解 Docker 的基本概念和操作步骤。
安装 Docker
在开始之前,首先需要在你的操作系统上安装 Docker。Docker 支持多个操作系统,包括 Linux、macOS 和 Windows。以下是针对不同操作系统的 Docker 安装指南:
Debian 安装
你可以按照 Docker 官方文档中提供的步骤在 Debian 系统上安装 Docker。文档链接:https://docs.docker.com/engine/install/debian/
CentOS 安装
如果你使用的是 CentOS 系统,可以按照 Docker 官方文档中提供的步骤进行安装。文档链接:https://docs.docker.com/engine/install/centos/
安装完成后,你可以通过运行以下命令来验证 Docker 是否成功安装:
docker version
如果一切正常,你应该能够看到有关 Docker 客户端和服务器的版本信息。
Docker 基本概念
在开始使用 Docker 之前,有几个基本概念需要理解:
-
镜像(Image):镜像是一个只读的模板,用于创建 Docker 容器。它包含了运行应用程序所需的所有文件、库和依赖项。你可以通过构建自己的镜像,也可以从 Docker Hub 或其他镜像仓库中获取现成的镜像。
-
容器(Container):容器是由镜像创建的运行实例。它可以被启动、停止、删除和移动。容器是独立的、可隔离的运行环境,其中应用程序可以在相对于主机系统的隔离环境中运行。
-
Dockerfile:Dockerfile 是一个文本文件,包含了一系列构建容器镜像的指令和配置。通过编写 Dockerfile,你可以定义应用程序的运行环境、依赖关系和其他配置。
-
仓库(Repository):仓库是用于存储和分发 Docker 镜像的地方。Docker Hub 是最流行的公共仓库,你可以从中获取各种类型的镜像。你也可以创建自己的私有仓库来管理自己的镜像。
制作镜像
制作镜像是使用 Docker 的一个重要步骤。你可以通过编写 Dockerfile 来定义镜像的构建过程和配置。
https://docs.docker.com/engine/reference/builder/
目录结构:
.
├── AppRun
├── default.desktop
├── default.png
├── doc
│ ├── libdbus-1-3
│ │ └── copyright
│ ├── libkeyutils1
│ │ └── copyright
│ ├── liblzma5
│ │ └── copyright
│ └── libpcre3
│ └── copyright
├── Dockerfile
├── lib
│ ├── libdbus-1.so.3
│ ├── libgcrypt.so.20
│ ├── libglib-2.0.so.0
│ ├── libgssapi_krb5.so.2
│ ├── libgthread-2.0.so.0
│ ├── libicudata.so.56
│ ├── libicui18n.so.56
│ ├── libicuuc.so.56
│ ├── libk5crypto.so.3
│ ├── libkeyutils.so.1
│ ├── libkrb5.so.3
│ ├── libkrb5support.so.0
│ ├── liblz4.so.1
│ ├── liblzma.so.5
│ ├── libpcre.so.3
│ ├── libQt5Core.so.5
│ ├── libQt5DBus.so.5
│ ├── libQt5Network.so.5
│ ├── libsystemd.so.0
│ └── libzstd.so.1
├── AppName
├── plugins
│ └── bearer
│ ├── libqconnmanbearer.so
│ ├── libqgenericbearer.so
│ └── libqnmbearer.so
├── qt.conf
├── .dockerignore
├── sources.list
└── translations
└── qt_en.qm
下面是一个简单的 Dockerfile 示例:
FROM debian:bullseye
COPY sources.list /etc/apt
ENV DEBIAN_FRONTEND=noninteractive
WORKDIR /usr/local/bin/app
COPY . /usr/local/bin/app
RUN /bin/chmod +x /usr/local/bin/app/AppName
CMD ["./AppName"]
这是一个简单的 Dockerfile,用于构建一个基于 Debian Bullseye 镜像的容器。下面是对每个指令的解释:
-
FROM debian:bullseye
: 指定了基础镜像为 Debian Bullseye。它将作为构建所需的初始环境。 -
COPY sources.list /etc/apt
: 将主机中的sources.list
文件复制到容器中的/etc/apt
目录。sources.list
是 Debian 系统中用于配置软件包源的文件,这里将其复制到容器以便后续安装软件包。 -
ENV DEBIAN_FRONTEND=noninteractive
: 设置一个环境变量DEBIAN_FRONTEND
的值为 noninteractive。这个环境变量设置可以使得后续的软件包安装过程无需人机交互,避免出现交互式提示。 -
WORKDIR /usr/local/bin/app
: 指定容器的工作目录为/usr/local/bin/app
。后续的指令将在该目录下执行。 -
COPY . /usr/local/bin/app
: 将当前主机目录中的所有文件和文件夹复制到容器的/usr/local/bin/app
目录中。这将包括 Dockerfile 所在的目录中的所有内容。 -
RUN /bin/chmod +x /usr/local/bin/app/AppName
: 在容器中运行命令/bin/chmod +x /usr/local/bin/app/AppName
。这个命令给容器中的/usr/local/bin/app/AppName
文件添加了可执行权限。 -
CMD ["./AppName"]
: 设置容器启动时的默认命令为./AppName
。这将在容器内执行./AppName
可执行文件。
综合起来,这个 Dockerfile 的作用是基于 Debian Bullseye 镜像构建一个容器,并将主机中的 sources.list
文件复制到容器中以配置软件包源。然后,它将工作目录设置为 /usr/local/bin/app
,将主机中的所有文件和文件夹复制到容器中的该目录,并给容器中的 AppName
文件添加可执行权限。最后,在容器启动时,将执行 ./AppName
可执行文件作为默认命令。
注意 COPY 指令只能复制 Dockfile 当前目录及子目录的文件,所以这里把系统的
/etc/apt/sources.list
文件 提前复制到了这里。
要构建镜像,可以使用以下命令:
docker build -t image-name:tag .
其中,-t
参数指定镜像的名称和标签,.
表示 Dockerfile 所在的当前目录。构建过程会根据 Dockerfile 中的指令逐步执行,并生成镜像。
一旦镜像构建完成,你可以使用以下命令来查看已构建的镜像列表:
docker images
现在你可以使用这个镜像来创建和运行容器了。
创建和运行容器
要创建容器,可以使用以下命令:
docker run -d --name container-name -p host-port:container-port image-name:tag
其中,-d
参数表示容器在后台运行,--name
参数指定容器的名称,-p
参数指定主机端口与容器端口的映射关系,image-name:tag
是你要使用的镜像名称和标签。
如果需要自动重启容器,可在
docker run -d --name container-name -p host-port:container-port image-name:tag
末尾追加以下指令。
--restart=always
: 这个选项告诉 Docker 在容器退出时自动重新启动容器。无论是手动停止容器还是发生错误导致容器退出,Docker 都会尝试重新启动容器
运行容器后,可以使用以下命令查看正在运行的容器列表:
docker ps
如果想进入容器的交互式终端,可以使用以下命令:
docker exec -it container-name /bin/bash
其中,container-name
是容器的名称。
要停止和删除容器,可以使用以下命令:
docker stop container-name
docker rm container-name
这些命令将停止容器并删除容器实例。
导出和导入镜像
如果需要将镜像从一个环境传输到另一个环境,可以使用导出和导入镜像的方式。
导出镜像
使用以下命令将镜像导出为一个文件:
docker save -o appname_image.tar appname:latest
这个命令将把名为 appname_image:latest
的镜像导出为名为 appname_image_image.tar
的文件。
导入镜像
使用以下命令导入一个镜像文件:
docker load -i appname_image.tar
这个命令将从名为 appname_image.tar
的文件中加载镜像。
这些是 Docker 的基本使用指南,希望能帮助你入门 Docker,并开始使用容器化来构建和部署应用程序。通过使用 Docker,你可以更方便地管理应用程序的依赖关系、部署环境和运行配置。如果你想深入了解 Docker 的更多功能和高级用法,可以参考 Docker 官方文档或其他相关资源。