Docker入门教程:从零开始容器化你的应用
适用人群:开发人员、运维工程师
目标:掌握Docker基础概念和常用命令
前置知识:基本的Linux命令行操作
什么是Docker?
Docker是一个开源的容器化平台,它允许开发者将应用及其依赖打包到一个轻量级、可移植的容器中。容器与虚拟机不同,它共享宿主机的操作系统内核,因此更加轻量和高效。
Docker的核心概念
- 镜像(Image):一个只读的模板,包含创建容器所需的所有信息
- 容器(Container):镜像的运行实例,可以被启动、停止、删除
- 仓库(Repository):存放镜像的地方,如Docker Hub
安装Docker
在Ubuntu/Debian上安装
# 更新包索引sudo apt update
# 安装依赖sudo apt install -y apt-transport-https ca-certificates curl gnupg lsb-release
# 添加Docker官方GPG密钥curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 添加Docker仓库echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 安装Dockersudo apt updatesudo apt install -y docker-ce docker-ce-cli containerd.io
# 启动Docker服务sudo systemctl start dockersudo systemctl enable docker验证安装
sudo docker run hello-world常用Docker命令
镜像管理
# 搜索镜像docker search nginx
# 拉取镜像docker pull nginx:latest
# 查看本地镜像docker images
# 删除镜像docker rmi nginx:latest容器管理
# 运行容器docker run -d -p 80:80 --name my-nginx nginx
# 查看运行中的容器docker ps
# 查看所有容器(包括停止的)docker ps -a
# 停止容器docker stop my-nginx
# 启动容器docker start my-nginx
# 删除容器docker rm my-nginx
# 进入容器docker exec -it my-nginx /bin/bash创建你的第一个Dockerfile
创建一个简单的Node.js应用的Dockerfile:
# 使用官方Node.js镜像作为基础镜像FROM node:18-alpine
# 设置工作目录WORKDIR /app
# 复制package.json和package-lock.jsonCOPY package*.json ./
# 安装依赖RUN npm install
# 复制应用代码COPY . .
# 暴露端口EXPOSE 3000
# 启动应用CMD ["npm", "start"]构建和运行
# 构建镜像docker build -t my-node-app .
# 运行容器docker run -d -p 3000:3000 my-node-appDocker Compose
Docker Compose用于定义和运行多容器应用。
创建 docker-compose.yml 文件:
version: '3.8'
services: web: build: . ports: - "3000:3000" depends_on: - db
db: image: postgres:13 environment: POSTGRES_PASSWORD: example volumes: - postgres-data:/var/lib/postgresql/data
volumes: postgres-data:使用Docker Compose
# 启动服务docker-compose up -d
# 停止服务docker-compose down
# 查看日志docker-compose logs -f最佳实践
- 使用多阶段构建:减小最终镜像大小
- 利用缓存:合理安排Dockerfile指令顺序
- 使用.dockerignore:排除不必要的文件
- 不要以root用户运行:提高安全性
- 使用特定版本的镜像标签:避免使用latest标签
总结
Docker是现代开发运维的重要工具,掌握它能大大提高开发效率和应用部署的一致性。建议从简单的单容器应用开始,逐步学习Docker Compose和Kubernetes等更高级的容器编排工具。