在Linux系统上搭建Docker开发环境的第一步是安装Docker引擎。以常见的Ubuntu/Debian系统为例,安装步骤如下:
sudo apt-get updatesudo apt-get install docker-ce docker-ce-cli containerd.iosudo systemctl start docker && sudo systemctl enable dockerdocker --version(查看版本) && sudo docker run hello-world(运行测试镜像,确认功能正常)。基础镜像是Dockerfile的起点,需根据开发语言和环境需求选择:
python:3.11、node:18、openjdk:17),它们包含完整的语言运行时和常用工具,适合大多数场景。slim版本(如python:3.11-slim、node:18-slim),它们基于Debian slim构建,去除了不必要的组件。python:3.11-alpine、node:18-alpine),其体积仅5-10MB,但需注意部分依赖(如glibc)可能不兼容。通过Dockerfile定义镜像构建流程,实现环境一致性。以下是常见语言的Dockerfile示例:
# 使用Python 3.9 slim基础镜像
FROM python:3.9-slim
# 设置工作目录(容器内的默认路径)
WORKDIR /app
# 复制依赖文件(requirements.txt)到工作目录
COPY requirements.txt .
# 安装依赖(-y表示自动确认)
RUN pip install --no-cache-dir -r requirements.txt
# 复制项目代码到工作目录
COPY . .
# 暴露应用端口(如Flask默认80端口)
EXPOSE 80
# 定义容器启动命令(运行Flask应用)
CMD ["python", "app.py"]
构建命令:docker build -t my-python-app .(-t指定镜像名称,.表示Dockerfile所在目录)。
# 使用Node.js 18基础镜像
FROM node:18
# 设置工作目录
WORKDIR /usr/src/app
# 复制package.json和package-lock.json(用于依赖管理)
COPY package*.json ./
# 安装依赖
RUN npm install
# 复制项目代码
COPY . .
# 暴露应用端口(如Express默认3000端口)
EXPOSE 3000
# 定义容器启动命令(启动Express应用)
CMD ["node", "app.js"]
构建命令:docker build -t my-node-app .。
通过docker run命令启动容器,并配置必要的参数:
docker run -it --name my-python-dev -v /path/to/local/project:/app -p 8080:80 my-python-app-it(交互式终端)、--name(容器名称)、-v(挂载目录,格式:本地路径:容器路径)、-p(端口映射,格式:宿主机端口:容器端口)。-d参数(如docker run -d --name my-node-dev -v $(pwd):/app -p 3000:3000 my-node-app)。对于需要多个服务(如Web应用+数据库)的项目,可使用docker-compose.yml文件定义和启动多容器环境:
version: '3' # 指定Compose文件版本
services: # 定义服务列表
web: # Web服务(如Node.js应用)
image: my-node-app # 使用自定义镜像
ports: # 端口映射
- "3000:3000" # 宿主机3000端口映射到容器3000端口
volumes: # 挂载目录
- ./:/app # 本地当前目录挂载到容器/app目录
working_dir: /app # 设置容器工作目录
command: npm start # 覆盖镜像默认启动命令
db: # 数据库服务(如PostgreSQL)
image: postgres:13 # 使用PostgreSQL 13镜像
environment: # 环境变量(配置数据库密码)
POSTGRES_PASSWORD: example
volumes: # 数据卷(持久化数据库数据)
- postgres_data:/var/lib/postgresql/data
volumes: # 定义数据卷(需在services外)
postgres_data:
启动命令:docker-compose up -d(-d表示后台运行);停止命令:docker-compose down。
volumes挂载目录或数据卷,避免容器删除后数据丢失(如数据库文件、项目配置)。docker network create dev-network(创建网络),docker run --network dev-network --name service1 my-image(将容器加入网络)。.dockerignore文件,排除不必要的文件(如node_modules、.git、.log),加快镜像构建速度。docker psdocker ps -adocker exec -it <容器ID或名称> bashdocker stop <容器ID或名称>docker rm <容器ID或名称>docker imagesdocker rmi <镜像ID或名称>docker logs <容器ID或名称>docker build -t <镜像名称> .。