在部署Web应用前,需先确保Ubuntu系统安装了Docker及Docker Compose(用于管理多容器应用)。以下是具体步骤:
若系统已安装旧版Docker,需先卸载以避免冲突:
sudo apt-get remove docker docker-engine docker.io containerd runc
安装必要的依赖工具,用于访问Docker官方仓库:
sudo apt install apt-transport-https ca-certificates curl software-properties-common -y
确保下载的Docker软件包未被篡改:
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
更新包索引并安装Docker核心组件:
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io -y
sudo systemctl start docker
sudo systemctl enable docker
通过以下命令检查Docker版本,确认安装成功:
docker --version
若需管理多容器应用(如Web+数据库),需安装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
Dockerfile是构建镜像的核心文件,需根据Web应用类型(如Python、Node.js、Nginx)定制。以下以Python Flask应用为例,说明Dockerfile的编写步骤:
mkdir myflaskapp && cd myflaskapp
新建app.py
,编写一个简单的Flask应用:
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, debug=True)
新建requirements.txt
,列出应用依赖的Python包:
Flask
在项目根目录创建Dockerfile
,定义镜像构建步骤:
# 1. 使用官方Python基础镜像(选择slim版本减小镜像体积)
FROM python:3.9-slim
# 2. 设置工作目录(容器内的路径)
WORKDIR /app
# 3. 复制依赖文件到工作目录
COPY requirements.txt .
# 4. 安装依赖(--no-cache-dir避免缓存增大镜像体积)
RUN pip install --no-cache-dir -r requirements.txt
# 5. 复制应用代码到工作目录
COPY . .
# 6. 暴露应用端口(容器内端口,需与运行时的-p参数对应)
EXPOSE 5000
# 7. 定义容器启动命令(运行Flask应用)
CMD ["python", "app.py"]
排除不必要的文件(如本地git仓库、日志、node_modules),减少镜像体积:
.git
__pycache__
*.log
*.md
在项目目录下运行以下命令,构建镜像(-t
指定镜像名称及标签,.
表示使用当前目录作为构建上下文):
docker build -t myflaskapp:latest .
通过以下命令查看本地镜像列表,确认镜像构建成功:
docker images
镜像构建完成后,需通过docker run
命令启动容器,将应用暴露给外部访问:
使用-d
参数让容器在后台运行,-p
参数将容器的5000端口映射到主机的8080端口(可根据需求修改):
docker run -d -p 8080:5000 --name myflaskapp-container myflaskapp:latest
通过以下命令查看容器是否处于运行状态:
docker ps
若容器状态为“Up”,则表示运行成功。
在浏览器中输入http://<Ubuntu服务器IP>:8080
,若看到“Hello, Docker Web App!”,则说明应用部署成功。
若Web应用需要依赖数据库(如MySQL)或其他服务,可使用Docker Compose简化管理。以下以Flask+MySQL为例,说明Docker Compose的使用步骤:
在项目根目录创建docker-compose.yml
,定义服务(web应用、数据库)及其配置:
version: '3.8' # 指定Compose文件版本
services:
web: # Web服务(Flask应用)
build: . # 使用当前目录的Dockerfile构建镜像
ports:
- "8080:5000" # 映射主机端口到容器端口
environment:
- FLASK_ENV=development
- DATABASE_URL=mysql+pymysql://root:password@db:3306/myapp # 数据库连接字符串
depends_on:
- db # 依赖db服务(确保db先启动)
db: # 数据库服务(MySQL)
image: mysql:5.7 # 使用官方MySQL镜像
environment:
- MYSQL_ROOT_PASSWORD=password # root用户密码
- MYSQL_DATABASE=myapp # 创建的数据库名
volumes:
- mysql_data:/var/lib/mysql # 持久化数据(避免容器重启丢失数据)
volumes:
mysql_data: # 定义数据卷名称
在docker-compose.yml
所在目录运行以下命令,启动所有服务:
docker-compose up -d
通过以下命令查看服务状态:
docker-compose ps
若所有服务状态为“Up”,则表示启动成功。
在浏览器中输入http://<Ubuntu服务器IP>:8080
,即可访问由Docker Compose管理的Flask+MySQL应用。
-p 8080:5000
改为-p 8081:5000
(修改主机端口)。docker run -it myflaskapp:latest /bin/bash
),手动执行pip install -r requirements.txt
。sudo ufw allow 8080
)。volumes
),容器重启后数据库数据会丢失,需通过volumes
配置持久化数据。通过以上步骤,即可在Ubuntu系统上使用Docker快速部署Web应用,并通过Docker Compose管理复杂的多容器架构。