1.确保已经安装并配置好了 Docker
2.在 demo 项目的根目录中创建一个名为 Dockerfile 的文件,文件内容如下:
FROM python:3.9
# 设置 Python 环境变量
ENV PYTHONUNBUFFERED 1
# 安装 MySQL 客户端库
RUN apt-get update && apt-get install -y default-libmysqlclient-dev
# 创建项目目录并设置工作目录
RUN mkdir /app
WORKDIR /app
# 复制项目依赖文件并安装依赖
COPY requirements.txt /app/
RUN pip install -r requirements.txt
# 复制项目文件
COPY . /app/
# 设置环境变量
ENV DB_HOST=db
ENV DB_NAME=database_name
ENV DB_USER=user_name
ENV DB_PASSWORD=user_password
# 运行 Django 项目
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
该 Dockerfile 从 Python 3.9 镜像开始构建,设置了 PYTHONUNBUFFERED 环境变量,并将工作目录设置为 /app。然后安装依赖包并将整个项目复制到容器的 /app 目录中。
3.在项目根目录中创建一个名为 requirements.txt 的文件,并在其中列出所有 Django 项目的依赖项,例如:
Django==3.2.4
psycopg2-binary==2.8.6
可以根据项目需要添加或删除依赖项。
如果该项目依赖mysql,还需要创建一个 docker-compose.yml 文件,来定义如何启动 Docker 容器。
这个文件可以放在和 Dockerfile 文件相同的目录下:
version: '3'
services:
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: mysecretpassword
MYSQL_DATABASE: database_name
MYSQL_USER: user_name
MYSQL_PASSWORD: user_password
volumes:
- db-data:/var/lib/mysql
web:
build: .
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/app
ports:
- "8000:8000"
depends_on:
- db
volumes:
db-data:
在这个配置文件中,我们定义了两个服务:db 和 app。db 服务使用 Docker Hub 上的 MySQL 8.0 镜像,并设置了一些环境变量和数据卷。app 服务使用你的 Django 镜像,并将容器的 8000 端口映射到主机的 8000 端口。同时,我们设置了一些环境变量,用于连接到 MySQL 数据库。最后,我们定义了一个数据卷,用于持久化 MySQL 数据库的数据。
在这个配置文件中,我们将 DB_HOST 环境变量设置为 db,这意味着 Django 容器将连接到 db 服务中的 MySQL 数据库。我们还设置了一些其他的环境变量,包括数据库名称、用户名和密码。这些环境变量将在 Django 容器启动时被传递给应用程序,以便它可以连接到 MySQL 数据库。
最后,我们定义了一个名为 db-data 的数据卷,它将 MySQL 数据库的数据持久化存储在本地主机上。这个数据卷可以确保即使 Docker 容器被删除或重新创建,数据库的数据也可以得到保留。
4.修改settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': os.getenv('DB_NAME'),
'USER': os.getenv('DB_USER'),
'PASSWORD': os.getenv('DB_PASSWORD'),
'HOST': os.getenv('DB_HOST'),
'PORT': '3306',
}
}
5.使用以下命令来构建和运行 Docker 容器:
docker-compose up --build
6.进入容器
#进入docker-compose.yml文件所在目录
docker-compose exec web bash
或者:
docker exec -it <container_name> bash
执行:
python manage.py runserver 0.0.0.0:8000
7.在本地浏览器中输入 http://localhost:8000/
访问的 Django 应用程序
在 docker inspect 命令的输出中,容器的IP地址可以在 Networks 字段下找到,其中 NetworkSettings.Networks 是容器的网络设置,IPAddress 则是容器的IP地址。
可以使用以下命令来获取容器的IP地址:
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' <CONTAINER_NAME>
然后就可以使用 http://$IP:8000/
来访问django了
docker-compose up --build 和 docker build 的区别如下:
docker-compose up --build 会构建并启动一个由 docker-compose.yml 文件定义的多个服务容器的应用程序。如果镜像不存在,docker-compose 会自动构建镜像。如果镜像已经存在,它将不会重复构建。此命令还会创建所需的网络和卷。
docker build 只会构建一个 Docker 镜像,并在当前目录中查找 Dockerfile。它不会启动容器,也不会创建网络或卷。
因此,如果要构建并启动一个多容器应用程序,应使用 docker-compose up --build。如果只需要构建一个 Docker 镜像,则应使用 docker build 命令。