这是我参与「第四届青训营 」笔记创作活动的第3天
一、概述
为什么要写这篇文章?因为我们的项目部署会用到Docker,而我之前并没有实践过,只是停留在理论,这篇文章就是对我今天用Docker部署这个简单Django项目的总结。
首先,介绍一下Docker:
什么是Docker?
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
那对比我们学过的虚拟机,他们宏观上看起来好像都是在服务器系统上装一层虚拟系统来运行我们的程序,他俩有啥区别?
docker容器和虚拟机:
虚拟机:需要有必要的二进制库和完整的操作系统,并且占据所有预分配的资源。docker容器:与宿主共享操作系统,可以实现资源的动态分配,在用户空间以分离的进程运行。
这里在说明几点概念,主要是在后续我们的使用中会经常涉及这几种概念,误混淆!
docker镜像、容器和仓库:
镜像是文件,容器是进程;他们之间的关系像是类和实例化对象的关系,一个类可以有多个实例化对象。
而仓库是一个其中的存储、分发镜像的服务。
docker pull是从仓库下载docker镜像到本地,docker run是创建一个容器并运行一个命令,docker exec -it是在运行的容器中执行命令
二、实践
准备:一台装有Centos系统的服务器
在服务器和本地环境都装上Docker[各种系统的安装教程](安装 Docker - Docker — 从入门到实践 (gitbook.io))
1、在服务器上安装Docker(这里演示就以服务器安装为主)
使用 yum 安装(比较推荐,比较方便)
- 执行以下命令先安装依赖包:
$ sudo yum install -y yum-utils
鉴于国内网络问题,这里使用国内源安装:
- 执行下面的命令添加
yum软件源:
$ sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
$ sudo sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo
-
安装 Docker
-
更新
yum软件源缓存,并安装docker-ce。
$ sudo yum install docker-ce docker-ce-cli containerd.io
- 启动Docker
systemctl enable docker
systemctl start docker
- 建立 docker 用户组
默认情况下,
docker命令会使用 Unix socket 与 Docker 引擎通讯。而只有root用户和docker组的用户才可以访问 Docker 引擎的 Unix socket。出于安全考虑,一般 Linux 系统上不会直接使用root用户。因此,更好地做法是将需要使用docker的用户加入docker用户组。
$ sudo groupadd docker
- 将当前用户加入
docker组:
$ sudo usermod -aG docker $USER
- 测试 Docker 是否安装正确
docker run --rm hello-world
正常输出以上信息,则说明安装成功。
2、本地创建一个django项目
这个就不过多叙述了
3、创建Dockerfile文件,该文件用于生成docker镜像,同时填写以下内容:
# 建立 python3.9 环境
FROM python:3.9
# 设置 python 环境变量
ENV PYTHONUNBUFFERED 1
# 设置pip源为国内源
COPY pip.conf /root/.pip/pip.conf
# 在容器内创建mysite文件夹
RUN mkdir -p /var/www/wwwroot
# 设置容器内工作目录
WORKDIR /var/www/wwwroot/djangoProject
# 将当前目录文件加入到容器工作目录中(. 表示当前宿主机目录)
ADD . /var/www/wwwroot/djangoProject
# pip安装依赖
RUN pip install -r requirements.txt
4、继续在项目根目录下创建pip.conf文件,用于修改pip镜像源
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
[install]
trusted-host=mirrors.aliyun.com
5、最后生成requirements.txt文件
pip freeze > requirements.txt
6、这里我们直接打包到服务器(本地安装的话也可以)
7、在项目根目录输入命令,创建镜像:
docker build -t django_docker_img:v1 .
使用命令docker images查看镜像,可以看见刚刚创建的镜像:
8、启动镜像并进入容器内部:
我这里先删除了上面创建的容器然后又创建并运行
docker run -it -d -p 80:8000 --name djangoProject django_docker_img:v1
docker ps #查看运行情况
docker exec -it djangoProject bash # 进入容器内部
9、用Docker启动项目
python manage.py runserver #运行简单项目
这样就很简单的运行了我们的项目!
三、总结
总的来说,用Docker部署我们的django项目确实方便很多,相比于之前需要自己去一条条命令敲,Docker的Dockerfile文件集成了我们要做的所有步骤,极大的便捷了项目的上线。
其次,Docker适用于各种操作系统,确实是开发上线利器!这第一次的使用中间我也遇到了一两个bug,逐一解决一步步学习,加油!