Docker 是一种开源的平台,用于开发、交付和运行应用程序。通过使用操作系统级别的虚拟化,Docker 可以将软件包裹在一个称为「容器」的标准化单元中。这可以确保软件在任何环境中都能够运行,包括本地计算机、数据中心或云端。
以下是一个详细的 Docker 教程,分步骤指导你开始使用 Docker。
镜像(Image): Docker 镜像是一个只读模板,包含创建 Docker 容器所需的所有指令。镜像可以从 Docker Hub(一个巨大的在线库)下载使用,也可以根据需要自定义。
容器(Container): 容器是镜像的一个实例,包含应用程序及其所有依赖项。每个容器是相互隔离和安全的,能够在任何一个 Docker 环境中运行。
仓库(Repository): 仓库是存储镜像的地方,分为公共仓库和私有仓库。Docker Hub 是最常用的公共仓库,任何人都可以使用。
Dockerfile:
Dockerfile 是一个包含一系列指令的文本文件,用于构建 Docker 镜像。例如,FROM
指令用于指定基础镜像,RUN
指令用于执行命令。
Docker 可以在各种操作系统上运行,包括 Windows、macOS 和 Linux。在这里,我将简要说明如何在这些平台上安装 Docker。
Windows:
macOS:
Linux:
apt
来安装 Docker。在 Ubuntu 上,运行以下命令:
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
sudo systemctl enable docker
sudo systemctl start docker
在完成安装之后,我们可以运行*个容器。
运行一个简单的容器:
运行 Docker 官方提供的 hello-world
镜像来验证您的安装:
docker run hello-world
这将下载镜像(如果本地没有的话),并启动容器,打印出 "Hello from Docker!" 信息。
下载和运行特定应用: 比方说,你想运行一个 Nginx 服务器,可以直接拉取并运行:
docker run -d -p 80:80 nginx
这里-d
参数告诉 Docker 在后台运行容器,-p
指定将主机的 80 端口映射到容器的 80 端口。
列出运行中的容器: 您可以使用以下命令列出当前正在运行的容器:
docker ps
停止一个容器: 找到对应的容器 ID,然后使用以下命令停止它:
docker stop <CONTAINER_ID>
删除一个容器: 可以使用以下命令删除容器:
docker rm <CONTAINER_ID>
这里的容器 ID 可以通过 docker ps -a
命令找到。
为应用程序创建自定义的 Docker 镜像需要编写 Dockerfile。
创建 Dockerfile:
在项目目录下新建一个 Dockerfile
,例如:
# 使用官方的 Node.js 镜像作为基础镜像
FROM node:14
# 设置工作目录
WORKDIR /app
# 复制 package.json 和 package-lock.json
COPY package*.json ./
# 安装项目依赖
RUN npm install
# 复制项目文件
COPY . .
# 规定容器启动后要执行的命令
CMD ["node", "app.js"]
构建镜像: 在包含 Dockerfile 的目录下,运行以下命令来构建镜像:
docker build -t my-node-app .
这里的 -t
标记用于指定镜像名称,后面的点代表 Dockerfile 当前路径。
运行镜像: 使用构建好的镜像运行容器:
docker run -d -p 3000:3000 my-node-app
对于多容器的应用程序,Docker 提供了一个工具叫做 Docker Compose,通过定义一个 docker-compose.yml
文件,您可以同时启动多个服务。
创建 docker-compose.yml
:
假设您有一个 Node.js 应用程序和一个数据库服务,可以创建以下配置文件:
version: '3.8'
services:
web:
build: .
ports:
- "3000:3000"
database:
image: mongo
ports:
- "27017:27017"
启动服务: 在配置文件所在目录运行以下命令:
docker-compose up
停止服务: 使用以下命令停止运行的服务:
docker-compose down
Docker 通过将应用程序及其所有依赖项封装到一个标准化的单元中,极大地简化了应用程序的部署过程。它不仅提高了软件的可移植性,还减少了开发和运维之间的摩擦。无论您是在本地开发,还是在生产环境中部署,Docker 都能为您提供一种高效、便捷的解决方案。
这个简短的教程只是 Docker 世界的一部分,其中还包含更多高级功能,如 Docker 网络、数据卷和多阶段构建等。希望这能帮助你迈出 Docker 学习的*步。