Docker 是一个开源的容器化平台,由 Solomon Hykes 于 2013 年创建。Docker 通过操作系统级虚拟化技术,将应用程序及其依赖打包到轻量级、可移植的容器中,实现 一次构建,随处运行。
Docker 的核心定位是 应用打包和交付的标准化。它提供了:
Docker 由 dotCloud 公司的 Solomon Hykes 在 2013 年创建,最初是 dotCloud 内部的一个项目。Docker 利用了 Linux 的 cgroups 和 namespaces 技术,实现了轻量级容器。2013 年 3 月,Docker 在 PyCon 大会上首次公开,迅速成为技术界的焦点。
| 对比项 | Docker 容器 | 虚拟机 |
|---|---|---|
| 启动时间 | 秒级 | 分钟级 |
| 资源占用 | MB 级 | GB 级 |
| 隔离级别 | 进程级 | 系统级 |
| 性能损耗 | 接近原生 | 有显著损耗 |
| 操作系统 | 共享宿主机内核 | 独立操作系统 |
# 查看版本
docker --version
docker info
# 镜像管理
docker images # 查看镜像
docker pull nginx:latest # 拉取镜像
docker rmi image_id # 删除镜像
docker build -t myapp . # 构建镜像
# 容器管理
docker ps # 运行中的容器
docker ps -a # 所有容器
docker run nginx # 运行容器
docker run -d nginx # 后台运行
docker run -it ubuntu bash # 交互式运行
docker start container_id # 启动容器
docker stop container_id # 停止容器
docker restart container_id # 重启容器
docker rm container_id # 删除容器
# 日志和查看
docker logs container_id # 查看日志
docker logs -f container_id # 实时日志
docker exec -it container_id bash # 进入容器
docker inspect container_id # 查看容器详情
# 端口映射
docker run -p 8080:80 nginx # 映射端口
# 数据卷
docker run -v /host:/container nginx # 挂载卷
docker volume create myvolume # 创建卷
# 网络
docker network ls # 查看网络
docker network create mynet # 创建网络
docker run --network mynet nginx # 使用网络
# 基础镜像
FROM node:18-alpine
# 设置工作目录
WORKDIR /app
# 复制依赖文件
COPY package*.json ./
# 安装依赖
RUN npm install
# 复制源代码
COPY . .
# 构建应用
RUN npm run build
# 暴露端口
EXPOSE 3000
# 启动命令
CMD ["npm", "start"]
# 多阶段构建(优化大小)
FROM node:18-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
FROM nginx:alpine
COPY --from=builder /app/dist /usr/share/nginx/html
EXPOSE 80
# docker-compose.yml
version: '3.8'
services:
# Web 服务
web:
build: ./web
ports:
- "80:80"
depends_on:
- api
- redis
# API 服务
api:
build: ./api
ports:
- "3000:3000"
environment:
- REDIS_HOST=redis
- DB_HOST=postgres
depends_on:
- postgres
- redis
# 数据库
postgres:
image: postgres:15
environment:
POSTGRES_DB: mydb
POSTGRES_USER: user
POSTGRES_PASSWORD: password
volumes:
- postgres_data:/var/lib/postgresql/data
ports:
- "5432:5432"
# 缓存
redis:
image: redis:7-alpine
ports:
- "6379:6379"
volumes:
postgres_data:
# 使用命令
# docker-compose up -d # 启动
# docker-compose down # 停止
# docker-compose logs # 查看日志
# docker-compose exec web bash # 进入容器
# LAMP 栈(Linux + Apache + MySQL + PHP)
version: '3.8'
services:
app:
build: .
ports:
- "8080:80"
volumes:
- ./app:/var/www/html
depends_on:
- db
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: mydb
MYSQL_USER: user
MYSQL_PASSWORD: password
volumes:
- db_data:/var/lib/mysql
phpmyadmin:
image: phpmyadmin/phpmyadmin
ports:
- "8081:80"
environment:
PMA_HOST: db
depends_on:
- db
volumes:
db_data:
# 登录 Docker Hub
docker login
# 标记镜像
docker tag myapp:latest username/myapp:latest
# 推送镜像
docker push username/myapp:latest
# 拉取镜像
docker pull username/myapp:latest
# 私有仓库
docker tag myapp localhost:5000/myapp
docker push localhost:5000/myapp
Docker 安装、核心概念(镜像/容器/仓库)、基础命令
Dockerfile 编写、镜像构建、数据卷、网络配置
Docker Compose、多服务编排、环境变量配置
镜像优化、安全配置、CI/CD 集成、Docker Swarm/Kubernetes
Docker 是现代应用部署的集装箱。
它用 镜像打包、容器运行、标准化交付 解决了应用环境不一致的千古难题。Docker 是云原生时代的基石,也是每个开发者必须掌握的技能。
"Docker 改变了软件交付的方式。" 🐳
—— 技术社区评价