Docker在Ubuntu上部署应用步骤
小樊
33
2025-12-28 05:21:55
在 Ubuntu 上使用 Docker 部署应用的步骤
一 安装与准备
- 更新系统并安装依赖
- sudo apt update && sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
- 添加 Docker 官方 GPG 密钥与 APT 源(推荐方式)
- curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
- echo “deb [arch=$(dpkg --print-architecture) 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 > /devref
- 安装 Docker 引擎并启动
- sudo apt update && sudo apt install -y docker-ce docker-ce-cli containerd.io
- sudo systemctl start docker && sudo systemctl enable docker
- 验证安装
- docker --version
- docker run --rm hello-world
- 可选:免 sudo 使用 Docker
- sudo usermod -aG docker $USER(注销并重新登录后生效)
二 构建镜像
- 示例 Python Flask 应用
- 项目结构
- myflaskapp/
- app.py
- requirements.txt
- Dockerfile
- .dockerignore
- app.py
- from flask import Flask
app = Flask(name)
@app.route(‘/’)
def hello(): return ‘Hello, Docker Web App!’
if name == ‘main’: app.run(host=‘0.0.0.0’, port=5000)
- requirements.txt
- Dockerfile
- FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 5000
CMD [“python”, “app.py”]
- .dockerignore
- 构建镜像
- docker build -t myflaskapp:latest .
- docker images | grep myflaskapp
三 运行容器
- 启动应用容器(后台运行并映射端口)
- docker run -d -p 8080:5000 --name myflaskapp-container myflaskapp:latest
- 常用管理命令
- 查看运行容器:docker ps
- 查看日志:docker logs -f myflaskapp-container
- 进入容器:docker exec -it myflaskapp-container bash
- 停止/启动/删除容器:docker stop|start|rm myflaskapp-container
- 访问应用
- 浏览器访问:http://<服务器IP>:8080
四 使用 Docker Compose 管理多容器
- 安装 Docker Compose(示例为二进制方式)
- sudo curl -L “https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)” -o /usr/local/bin/docker-compose
- sudo chmod +x /usr/local/bin/docker-compose
- docker-compose --version
- 示例 docker-compose.yml(Flask + MySQL)
- version: ‘3.8’
services:
web:
build: .
ports:
- “8080:5000”
environment:
- DATABASE_URL=mysql://root:example@db:3306/flaskdb
depends_on:
- db
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: example
MYSQL_DATABASE: flaskdb
volumes:
- db_data:/var/lib/mysql
volumes:
db_data:
- 启动与运维
- 启动:docker-compose up -d
- 查看状态:docker-compose ps
- 查看日志:docker-compose logs -f
- 停止/销毁:docker-compose down
五 生产环境注意事项
- 数据与持久化:数据库等状态服务务必使用 Docker 卷(Volume) 或绑定挂载,避免容器重建导致数据丢失(如上例的 db_data)。
- 端口与网络:仅暴露必要端口;如需对外服务,配置 防火墙/安全组 放行对应端口(如 8080);内部服务间通过 Docker 网络 通信。
- 配置与密钥:使用 环境变量 或 Secrets 管理配置与敏感信息,避免硬编码到镜像。
- 日志与监控:应用输出到 stdout/stderr,配合 docker logs 或集中式日志收集;必要时加入 健康检查 与 重启策略(restart: unless-stopped)。
- 镜像与版本:为镜像打 语义化标签(如 v1.2.3),避免使用 latest;在 CI/CD 中构建并推送到镜像仓库,生产拉取指定版本。