为什么要使用Docker

作为一种新兴的虚拟化方式,Docker跟传统的虚拟化方式相比具有众多的优势

首先,Docker的启动可以在秒级实现,这相比传统的虚拟机方式要快得多。 其次,Docker 对系统资源的利用率很高,一台主机上可以同时运行数千个 Docker 容器。

容器除了运行其中应用外,基本不消耗额外的系统资源,使得应用的性能很高,同时系统的开销尽量小。传统虚拟机方式运行 10 个不同的应用就要起 10 个虚拟机,而Docker 只需要启动 10 个隔离的应用即可。

Docker 容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等。 这种兼容性可以让用户把一个应用程序从一个平台直接迁移到另外一个。

简单来说,Docker是一个应用容器引擎,它包括了三个基本的概念,镜像(Image),容器(Container),仓库(Repository),理解了这三个概念,就理解了Docker整个的生命周期

Docker镜像

Docker镜像就是一个只读的模板,就好比于一个桶,桶里可以装任何东西,无论是一个程序,还是一个完整的ubuntu系统环境,里面仅安装了需要的其他应用程序,需要用什么,往桶里扔什么

镜像可以用来创建Docker容器

Docker提供了一个很简单的机制来创建镜像或者更新现有的镜像,用户甚至可以直接从其他人那里下载一个已经做好的镜像来直接使用

  • docker load -i '镜像路径'用来引入镜像
  • docker pull mysql,拉去mysql镜像,当然不止mysql,几乎所有的工具都能通过pull来拉取镜像来搭建环境,例如mongoredis

Docker 容器

Dockers利用容器来运行应用

容器时从镜像创建的运行实例,它可以被启动、开始、停止、删除。每个容器都时相互隔离的,保证安全

docker run -it -p 80:80 镜像id:运行容器

  • -iti以交互式模式运行容器,t为容器分配一个伪输入终端
  • -p:端口
    • 80:80:端口映射宿主机port:容器port
  • docker stop 容器id:关闭
  • docker ps:查看正在运行的容器

注意,启动时,使用的是镜像id,关闭时,使用的是容器id


Docker 仓库

仓库是集中存放镜像文件的场所。有时候会把仓库和仓库注册服务器(Registry)混为一谈,并不严格区分。实际上,仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。

仓库分为公开仓库(Public)和私有仓库(Private)两种形式。

最大的公开仓库是 Docker Hub,存放了数量庞大的镜像供用户下载。 国内的公开仓库包括 Docker Pool 等,可以提供大陆用户更稳定快速的访问。

当然,用户也可以在本地网络内创建一个私有仓库。

当用户创建了自己的镜像之后就可以使用 push 命令将它上传到公有或者私有仓库,这样下次在另外一台机器上使用这个镜像时候,只需要从仓库上 pull 下来就可以了。

Docker仓库的概念跟Git类似,注册服务器可以理解为Github这样的托管服务


部署Django

  1. 在安装好Docker之后,在宿主机安装gunicorn,容器内我们用异步的方式来启动Django
pip isntall gunicorn gevent
  1. Django配置settings.py对应的应用:

    INSTALLED_APPS = [
        'gunicorn'
    ]
  2. Django项目的根目录编写gunicorn的配置文件:gunicorn.conf.py

    import multiprocessing
    
    bind = "0.0.0.0:8000"   #绑定的ip与端口
    workers = 1                #进程数

    这里注意一点,ip必须是0.0.0.0,不要写成127.0.0.1,否则外部环境会访问不到容器内的服务

  3. 导出你的python对应的依赖列表:

    pip freeze > requirements.txt
  4. 在根目录编写Dockerfile文件

    FROM python:3.7
    WORKDIR /Project/mydjango
    
    COPY requirements.txt ./
    RUN pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
    
    COPY . .
    ENV LANG C.UTF-8
    
    CMD ["gunicorn", "mydjango.wsgi:application","-c","./gunicorn.conf.py"]
  5. 打包

    docker build -t '你的项目名' .
  6. 然后查看镜像

    docker images
  7. 启动镜像服务

    docker run -it --rm -p 8000:8000 你的项目名