Docker 是一个开源的容器化平台,提供了一种轻量级的方式来打包、运行和管理应用程序及其依赖项。通过 Docker,你可以:
Kubernetes 是一个用于自动化容器部署、扩展和管理的开源平台。它的主要功能包括:
创建 Dockerfile
Dockerfile 是 Docker 容器镜像的构建脚本,定义了基础镜像、依赖安装、代码拷贝等操作。
示例:
# 使用官方 Node.js 镜像作为基础镜像
FROM node:16
# 设置工作目录
WORKDIR /app
# 拷贝 package.json 并安装依赖
COPY package.json .
RUN npm install
# 拷贝代码
COPY . .
# 暴露应用运行的端口
EXPOSE 3000
# 启动命令
CMD ["npm", "start"]
构建镜像
docker build -t my-node-app .
运行容器
docker run -p 3000:3000 my-node-app
访问 http://localhost:3000
验证是否正常运行。
挂载代码和实时热更新
使用挂载功能在容器中实时加载本地代码:
docker run -p 3000:3000 -v $(pwd):/app my-node-app
查看容器日志
docker logs <CONTAINER_ID>
进入容器
docker exec -it <CONTAINER_ID> sh
编写 docker-compose.yml
使用 Docker Compose 管理多容器应用。
示例:
version: '3.8'
services:
app:
build: .
ports:
- "3000:3000"
volumes:
- .:/app
environment:
NODE_ENV: production
启动服务
docker-compose up
将镜像推送到 Docker Hub
docker login
docker tag my-node-app mydockerhubusername/my-node-app:1.0
docker push mydockerhubusername/my-node-app:1.0
在目标服务器拉取镜像并运行
docker pull mydockerhubusername/my-node-app:1.0
docker run -p 3000:3000 mydockerhubusername/my-node-app:1.0
创建项目目录并初始化 Node.js:
mkdir my-web-app
cd my-web-app
npm init -y
npm install express
创建 index.js
文件:
const express = require('express');
const app = express();
app.get('/', (req, res) => {
res.send('Hello, Docker!');
});
app.listen(3000, () => {
console.log('Server running on port 3000');
});
创建 Dockerfile
:
FROM node:16
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "index.js"]
docker build -t my-web-app .
docker run -p 3000:3000 my-web-app
访问 http://localhost:3000
,检查输出。
创建 docker-compose.yml
:
version: '3.8'
services:
web:
build: .
ports:
- "3000:3000"
启动服务:
docker-compose up
将镜像推送到 Docker Hub:
docker tag my-web-app mydockerhubusername/my-web-app:1.0
docker push mydockerhubusername/my-web-app:1.0
在云服务器上运行:
docker pull mydockerhubusername/my-web-app:1.0
docker run -d -p 80:3000 mydockerhubusername/my-web-app:1.0
Docker Desktop 提供了一套完整的容器化开发到部署工具链,通过 Dockerfile 定义环境、Compose 编排多服务、Docker Hub 实现镜像托管与交付,形成高效的跨平台开发流程。对于个人开发者或小型项目,免费方案可覆盖全流程需求(开发、调试、打包、交付),无需额外成本。
若涉及 团队协作(需共享开发环境)、私有镜像库(替代 Docker Hub 免费版限制)或 大规模生产部署(如高可用集群),则需要结合 Kubernetes 扩展容器管理能力,并选择企业级付费服务(如 Docker Team 订阅、云厂商容器服务)。初学者和个人项目建议从免费工具切入,待复杂度提升时逐步引入高级方案,实现从轻量级到生产级场景的平滑过渡。