Docker 入门实战:从零搭建开发环境

Docker 已经成为现代软件开发和部署的标准工具。本文将带你从零开始,学习如何使用 Docker 搭建开发环境。

什么是 Docker?

Docker 是一个开源的容器化平台,它允许你将应用程序及其依赖打包成一个轻量级、可移植的容器。通过容器,你可以确保应用程序在任何环境中都能一致运行。

核心概念

镜像 (Image)

镜像是一个只读的模板,用来创建容器。你可以把它理解为程序的可执行文件。

容器 (Container)

容器是镜像的运行实例。你可以启动、停止、移动、删除容器。

仓库 (Repository)

仓库用于存放镜像,Docker Hub 是最大的公共仓库。

安装 Docker

# Ubuntu
sudo apt update
sudo apt install docker.io

# 启动 Docker 服务
sudo systemctl start docker
sudo systemctl enable docker

# 验证安装
docker --version

常用命令

镜像操作

# 搜索镜像
docker search nginx

# 拉取镜像
docker pull nginx:latest

# 查看本地镜像
docker images

# 删除镜像
docker rmi nginx:latest

容器操作

# 运行容器
docker run -d --name my-nginx -p 8080:80 nginx:latest

# 参数说明:
# -d: 后台运行
# --name: 容器名称
# -p 8080:80: 端口映射(主机端口:容器端口)

# 查看运行中的容器
docker ps

# 查看所有容器
docker ps -a

# 停止容器
docker stop my-nginx

# 启动容器
docker start my-nginx

# 删除容器
docker rm my-nginx

进入容器

# 进入运行中的容器
docker exec -it my-nginx /bin/bash

# 查看容器日志
docker logs my-nginx

# 查看容器详细信息
docker inspect my-nginx

实战:搭建 Node.js 开发环境

创建一个 Dockerfile 来定义我们的开发环境:

# 使用官方 Node.js 镜像作为基础
FROM node:18-alpine

# 设置工作目录
WORKDIR /app

# 复制 package.json
COPY package*.json ./

# 安装依赖
RUN npm install

# 复制源代码
COPY . .

# 暴露端口
EXPOSE 3000

# 启动命令
CMD ["npm", "start"]

构建并运行:

# 构建镜像
docker build -t my-node-app .

# 运行容器
docker run -d -p 3000:3000 --name my-app my-node-app

使用 Docker Compose

Docker Compose 可以轻松管理多容器应用。创建 docker-compose.yml:

version: 3.8
services:
  web:
    build: .
    ports:
      - 3000:3000
    volumes:
      - .:/app
      - /app/node_modules
    environment:
      - NODE_ENV=development
    depends_on:
      - db
  db:
    image: postgres:14
    environment:
      POSTGRES_PASSWORD: secret
      POSTGRES_DB: myapp
    volumes:
      - pgdata:/var/lib/postgresql/data

volumes:
  pgdata:

启动应用:

# 启动所有服务
docker-compose up -d

# 查看运行状态
docker-compose ps

# 查看日志
docker-compose logs -f

# 停止所有服务
docker-compose down

最佳实践

  • 使用多阶段构建减小镜像体积
  • .dockerignore 文件排除不需要的文件
  • 不要用 root 用户运行容器
  • 合理使用 volumes 管理持久化数据
  • 给镜像打上标签,方便管理

总结

Docker 是现代开发者的必备技能。通过容器化,我们可以轻松解决「在我机器上能跑」的问题,提高开发和部署效率。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注