什么是docker-compose?和Dockerfile有什么区别?快速部署django项目

简介: 什么是docker-compose?和Dockerfile有什么区别?快速部署django项目

docekr compose

今天来介绍一下什么是docker compose

Compose是一款可以定义和运行多容器的dcoker应用,通过使用Compose,我们可以编辑YAML文件去配置我们的应用服务,只需要一条命令,就能将我们在配置文件中写好的服务全部启动。

先来看看使用Compose的优点吧,这里简单的介绍一下官方列举的几种场景:

在单主机上进行多环境隔离

  1. Compose使用项目名去将环境隔离开来,我们可以在以下场景应用项目名
  • 在开发人员主机上,创建单个环境的多个副本(例如本次的需求已经进入测试阶段了,这部分代码最好保留着,但下一个需求进来了我们在原有基础上继续开发)
  • 在共享主机或开发人员主机上,防止互相干扰,使用项目名称设置为唯一的编号
  1. 创建容器时保留卷数据
  • Compose会保存你服务所需要的所有的卷,当运行docker-compose up的时候,如果它发现了任何以前运行过的容器,他会将卷从旧的容器复制进入新的容器,该过程确保数据不会丢失
    仅重新创建已更改的容器
  • Compose缓存了用于创建容器的配置,重新启动未更改的服务时,Compose将重新使用现有的容器,重复使用容器的意义在于我们可以高效的对环境进行配置和更改。(然而在我工作的实际环境中,有时候环境由不得开发人员。。。。)

使用Compose永远记住这三步

  1. 使用Dockerfile定义用用程序的环境,以便在任何地方可以复用。
  2. 在docker-compose.yml文件中定义组成你应用的各种服务,所以它们可以在一个隔离的环境中运行。
  3. 运行docker-compose up 然后Compose会启动并运行你的整个应用程序。

快速教程,使用Compose来部署Django

官方给的教程演示了如何使用docker Compose 快速配置和运行一个Django/PostgreSQL应用,在学习之前,请确保先安装了Compose。

首先我们需要创建一个Dockerfile,一个Python依赖文件,一个docker-compose.yml文件(.yml和.yaml拓展名都是可以的)

  1. 创建一个空项目目录。
    起一个好记住的名字,目录会包含所有构建镜像的资源。
  2. 创建一个叫做Dockerfile的新文件在上面创建的项目目录中。
    该Dockerfile定义了镜像的内容,通过写在内部的一条或多条命令。如果想查看更多关于Dockerfile的信息,大家可以看这篇文章。
  3. 在Dockerfile中写入以下内容。

FROM python:3
    ENV PYTHONUNBUFFERED=1
    WORKDIR /code
    COPY requirements.txt /code/
    RUN pip install -r requirements.txt
    COPY . /code/

这里使用了以python3为基础的镜像,镜像的环境会在我们安装了python依赖后改变

  1. 保存Dockerfile
  2. 创建requirements.txt在我们上面创建的目录中
    该文件会在运行Dockerfile时被用到,可以参考上面dockerfile中的内容

RUN pip install -r requirements.txt
  1. 在requirements.txt中写入下列内容

Django>=3.0,<4.0
    psycopg2-binary>=2.8
  1. 保存requirements.txt文件
  2. 创建docker-compose.yml文件
    docker-compose.yml文件描述了组成你应用的服务,这这个例子中这些服务分别是web服务器和数据库,compose文件同样也写了服务应用了哪些docker镜像,以及他们如何协同工作的。比如是否需要共用数据卷,关于更多的docker-compsose.yml的写法可以参考官方文档,根据自己的需求来写。
  3. 在docker-compose.yml中填写如下内容

version: "3.9"
  services:
    db:
      image: postgres
      environment:
        - POSTGRES_DB=postgres
        - POSTGRES_USER=postgres
        - POSTGRES_PASSWORD=postgres
    web:
      build: .
      command: python manage.py runserver 0.0.0.0:8000
      volumes:
        - .:/code
      ports:
        - "8000:8000"
      depends_on:
        - db
  1. 保存和关闭docker-compose.yml文件

到目前为止,我们已经准备好了使用docker-compose.yml部署django项目的所有准备工作,那么熟悉django的同学应该知道,我们还需要通过django的命令来创建我们的django项目,除此之外还需要配置数据库。

创建一个django项目

在项目目录下运行以下命令

sudo docker-compose run web django-admin startproject composeexample .

该命令会创建我们的django应用,在执行完商民的命令之后执行ls命令就能看到我们的django项目了。

之后的链接数据库的部分就不介绍了。

之后如果我们想好好的关闭我们的服务,可以在使用

docker-compose down

在项目的根目录,之后我们就可以安全的删除django项目了

总结

其实,通过这个简单的例子,再对比docker-compose.yml和Dockerfile这俩个文件的话。可以看出其中的区别,Dockerfile的目的更多的是用来创建和准备一个需要的工作环境,比如再Dockerfile中我们需要指定一个大致的镜像需求作为基底。例如我们需要python3的环境,就可以使用python3的镜像进一步的定制,安装需求,做出我们自己要的镜像来。

而我们再docker-compose.yml文件中看到,它内部虽然也可以直接指定镜像来组成我们的服务,但他更多的作用在多容器协同,也就是服务的编排和整体配置。所以说dockerfile和docekr-compose.yml的应用场景还是区别比较大的。

reference:

https://docs.docker.com/compose/#features

https://docs.docker.com/compose/django/

本文转载至


相关文章
|
7月前
|
数据采集 存储 Docker
深入理解Docker:为你的爬虫项目提供隔离环境
本教程介绍如何使用Docker构建隔离环境,运行Python爬虫项目,采集小红书视频页面的简介和评论。主要内容包括: 1. **Docker隔离环境**:通过Docker容器化爬虫,确保环境独立、易于部署。 2. **代理IP技术**:利用亿牛云爬虫代理突破反爬限制。 3. **Cookie与User-Agent设置**:伪装请求头,模拟真实用户访问。 4. **多线程采集**:提高数据采集效率。 前置知识要求:Python基础、Docker基本操作及HTML解析(可选)。教程还涵盖常见错误解决方法和延伸练习,帮助你优化爬虫代码并避免陷阱。
214 7
深入理解Docker:为你的爬虫项目提供隔离环境
|
2月前
|
存储 前端开发 应用服务中间件
Django 实战:静态文件与媒体文件从开发配置到生产部署
Django项目中,静态文件(Static Files)和媒体文件(Media Files)是两类不同用途的文件。本文详细介绍了它们的区别、配置方法以及在开发与生产环境中的处理方式,并结合用户头像上传功能进行实战演示,最后讲解了如何通过Nginx或OpenResty部署静态与媒体文件服务。
119 1
|
6月前
|
Kubernetes Docker 容器
Kubernetes与Docker参数对照:理解Pod中的command、args与Dockerfile中的CMD、ENTRYPOINT。
需要明确的是,理解这些都需要对Docker和Kubernetes有一定深度的理解,才能把握二者的区别和联系。虽然它们都是容器技术的二个重要组成部分,但各有其特性和适用场景,理解它们的本质和工作方式,才能更好的使用这些工具,将各自的优点整合到生产环境中,实现软件的快速开发和部署。
203 25
|
9月前
|
NoSQL Java Linux
《docker高级篇(大厂进阶):2.DockerFile解析》包括:是什么、DockerFile构建过程解析、DockerFile常用保留字指令、案例、小总结
《docker高级篇(大厂进阶):2.DockerFile解析》包括:是什么、DockerFile构建过程解析、DockerFile常用保留字指令、案例、小总结
458 76
|
6月前
|
Docker Python 容器
Docker——阿里云服务器使用Docker部署python项目全程小记
本文记录了我在阿里云服务器上使用Docker部署python项目(flask为例)的全过程,在这里记录和分享一下,希望可以给大家提供一些参考。
664 2
|
7月前
|
存储 Kubernetes C++
Docker、containerd、CRI-O 和 runc 之间的区别
通过理解这些组件的角色和功能,可以更好地选择和配置容器环境,以满足特定的需求和应用场景。
471 25
|
9月前
|
关系型数据库 应用服务中间件 PHP
实战~如何组织一个多容器项目docker-compose
本文介绍了如何使用Docker搭建Nginx、PHP和MySQL的环境。首先启动Nginx容器并查看IP地址,接着启动Alpine容器并安装curl测试连通性。通过`--link`方式或`docker-compose`配置文件实现服务间的通信。最后展示了Nginx配置文件和PHP代码示例,验证了各服务的正常运行。
223 3
实战~如何组织一个多容器项目docker-compose
|
8月前
|
Kubernetes Linux 虚拟化
入门级容器技术解析:Docker和K8s的区别与关系
本文介绍了容器技术的发展历程及其重要组成部分Docker和Kubernetes。从传统物理机到虚拟机,再到容器化,每一步都旨在更高效地利用服务器资源并简化应用部署。容器技术通过隔离环境、减少依赖冲突和提高可移植性,解决了传统部署方式中的诸多问题。Docker作为容器化平台,专注于创建和管理容器;而Kubernetes则是一个强大的容器编排系统,用于自动化部署、扩展和管理容器化应用。两者相辅相成,共同推动了现代云原生应用的快速发展。
2295 11
|
9月前
|
存储 Kubernetes Docker
Kubernetes(k8s)和Docker Compose本质区别
理解它们的区别和各自的优势,有助于选择合适的工具来满足特定的项目需求。
986 19