Docker是一个开源的应用容器引擎,允许开发者将应用及其依赖打包到一个轻量级、可移植的容器中,然后发布到任何流行的Linux或Windows机器上。
Windows/macOS:
Linux:
# Ubuntu示例
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
docker --version
docker run hello-world
示例Node.js应用的Dockerfile:
# 指定基础镜像
FROM node:14-alpine
# 设置工作目录
WORKDIR /app
# 复制package文件
COPY package*.json ./
# 安装依赖
RUN npm install
# 复制应用源代码
COPY . .
# 暴露端口
EXPOSE 3000
# 启动命令
CMD ["npm", "start"]
docker build -t my-node-app .
docker run -p 3000:3000 -d my-node-app
使用卷(volumes)实现代码热重载:
docker run -p 3000:3000 -v $(pwd):/app my-node-app
多阶段构建减小镜像体积:
# 构建阶段
FROM node:14 AS build
WORKDIR /app
COPY . .
RUN npm install && npm run build
# 生产阶段
FROM node:14-alpine
WORKDIR /app
COPY --from=build /app/dist ./dist
COPY package*.json ./
RUN npm install --production
CMD ["node", "dist/index.js"]
进入运行中的容器:
docker exec -it <container-id> /bin/sh
查看容器日志:
docker logs <container-id>
检查容器网络:
docker inspect <container-id> | grep IPAddress
docker-compose.yml
示例:
version: '3.8'
services:
web:
build: .
ports:
- "3000:3000"
volumes:
- .:/app
environment:
- NODE_ENV=development
depends_on:
- redis
redis:
image: redis:alpine
ports:
- "6379:6379"
常用命令:
docker-compose up -d # 启动服务
docker-compose down # 停止并移除服务
docker-compose logs # 查看日志
使用.dockerignore文件:
node_modules
.git
*.log
合理利用缓存:
选择合适的基础镜像:
端口冲突:
-p 4000:3000
权限问题:
# 解决挂载卷的权限问题
docker run -u $(id -u):$(id -g) ...
容器间通信:
存储空间不足:
docker system prune # 清理无用对象
通过掌握这些Docker应用开发技能,您可以构建高效、可移植的容器化应用程序,简化开发到部署的整个流程。