Docker容器实战指南:从镜像构建到服务部署
Docker已经成为现代应用开发和部署的标准工具。本文将从实际操作出发,介绍Docker镜像构建、容器运行、数据持久化和多容器编排的完整流程。
一、Docker基本概念
Docker使用容器技术将应用及其依赖打包成一个轻量级、可移植的镜像。与虚拟机不同,容器共享宿主机内核,启动速度快,资源占用少。
核心概念:
- 镜像(Image):只读模板,用于创建容器
- 容器(Container):镜像的运行实例
- 仓库(Registry):存储镜像的服务,如Docker Hub
二、安装与基础命令
在Ubuntu上安装Docker:
sudo apt update
sudo apt install docker.io
sudo systemctl start docker
sudo systemctl enable docker
常用命令:
docker pull ubuntu:22.04
docker images
docker run -it --name mycontainer ubuntu:22.04 bash
docker ps -a
docker stop mycontainer
docker rm mycontainer
docker run参数说明:-it分配交互式终端,--name指定容器名称,-d后台运行,-p映射端口,-v挂载数据卷。
三、Dockerfile构建镜像
Dockerfile是构建自定义镜像的脚本。以一个Node.js应用为例:
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install --production
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]
构建命令:
docker build -t myapp:1.0 .
各指令含义:FROM选择基础镜像,WORKDIR设置工作目录,COPY复制文件,RUN执行构建命令,EXPOSE声明端口,CMD指定启动命令。
四、数据持久化
容器默认不持久化数据,需要使用数据卷:
docker volume create mydata
docker run -d -v mydata:/data nginx
数据卷由Docker管理,独立于容器生命周期。也可以绑定挂载主机目录:
docker run -d -v /host/path:/container/path nginx
五、端口映射与网络
将容器端口映射到宿主机:
docker run -d -p 8080:80 nginx
这样访问宿主机8080端口即可访问容器内80端口的Nginx服务。Docker默认创建bridge网络,容器间可通过容器名互相访问。
六、Docker Compose多容器编排
当应用需要多个容器协同工作时,使用docker-compose.yml:
version: '3'
services:
web:
build: .
ports:
- "3000:3000"
depends_on:
- db
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: secret
volumes:
- db_data:/var/lib/mysql
volumes:
db_data:
启动命令:docker-compose up -d,停止命令:docker-compose down。
七、镜像优化技巧
- 选择alpine版本基础镜像,体积更小
- 合理安排Dockerfile指令顺序,充分利用缓存
- 使用.dockerignore排除不需要的文件
- 多阶段构建减小最终镜像体积
总结
Docker极大地简化了应用的打包、分发和部署流程。掌握镜像构建、容器管理、数据持久化和Compose编排,就能应对大多数容器化场景。
- 点赞
- 收藏
- 关注作者
评论(0)