docker 运行容器_Docker之运行 Django 容器

首先此篇笔记默认你已经安装好了 Docker,并了解 Docker 的基础概念,诸如镜像、容器、以及他们之间的关系等。

如果不太了解,等我回头了解清楚以后,可以再写一篇文章阐述一下。(狗头

当然,对于这篇文章,你就算不是很了解相关概念也没关系,照着我的步骤先敲一遍代码,然后慢慢理解也可以。

本文的内容大致如下几步:

  1. 镜像准备
  2. Django 文件准备
  3. Dockerfile 文件准备
  4. build 构建一个容器
  5. run 运行该容器
  6. 测试与查看

1、镜像准备

这里用的是 Python 3.6 版本的镜像,通过如下命令下载:

docker pull python:3.6

信息显示完成以后,通过如下命令确认已经下载的所有镜像:

docker image ls

大致如下图所示:

8d9b0d4174fce4a35d8b3e2b6da91f7c.png

至此,我们的镜像就准备完了。

2、Django 文件准备

我的测试文件目录在 /home/hunter/docker/ 目录下。
在该目录下开启一个新的 Django 项目:

django-admin startproject Web

编辑settings.py文件,将ALLOWDD_HOSTS设置为允许所有 ip 访问。

ALLOWED_HOSTS = ['*']

/home/hunter/docker/Web/目录下创建一个requirements.txt文件,写入如下内容:

#requirements.txt
Django==3.0.3

至此, Django 相关文件创建完毕。

3、Dockerfile 文件准备

Dockerfile 的文件内容如下:

FROM python:3.6
RUN mkdir /usr/src/myapp -p
COPY . /usr/src/myapp
WORKDIR /usr/src/myapp
RUN pip install -r requirements.txt -i  https://mirrors.aliyun.com/pypi/simple/
WORKDIR /usr/src/myapp/Web
CMD python manage.py runserver 0:7979

FROM python:3.6: 这条命令表明是使用 python:3.6 这个版本的 Python 镜像,其实所谓的 Python 镜像,其实也就是一个只装了 Python 3.6 版本的 Linux 操作系统,这个后面我们可以进入系统看一下。

RUN mkdir /usr/src/myapp -p :这条命令表示的是在该镜像里递归地创建这样一个文件夹, RUN 表示执行什么命令,后面的 mkdir 等命令和 Linux 操作系统都是一致的。

COPY . /usr/src/myapp: COPY 是复制命令, . 表示你所在的操作系统(非镜像操作系统)当前目录,这条语句的意思是把当前文件夹的所有内容都拷贝到镜像系统的 /usr/src/myapp 目录下。

WORKDIR /usr/src/myapp: WORKDIR 后面加上镜像操作系统的文件夹,表明工作的文件夹是镜像系统的 /usr/src/myapp 文件夹。

RUN pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/: 上面一条语句切换到了镜像系统的工作文件夹,这条语句则是为上面干净的镜像系统安装相关依赖,这里只用到了 Django 这一个第三方库,所以在 requirements.txt 里面写入即可,-i 是指定下载源,这些都和 Linux 上的命令是一致的。

WORKDIR /usr/src/myapp/Web: 这是把工作目录切换到 我们的 Django 系统的根目录下。

CMD python manage.py runserver 0:7979: CMD 表示的是在镜像系统内执行什么命令,这个是 Django 项目的启动命令。

4、build 构建一个容器

前面我们的所有准备工作都已经做完了,然后使用 build 来把我们构建的系统变成一个可以运行的容器(container)。

在 Dockerfile 所在的文件夹,在我这里是 /home/hunter/docker/ ,执行如下命令:

docker build . -t python:3.6

然后就可以看到Dockerfile一行一行执行命令的信息输出,类似下图:

f80f2ff5cbdfd18b90c40ee3c919d83f.png

当上述指令执行完毕,输出类似于如下信息,则表示容器创建成功:

9a1267b452f53d03a39263a87f06bab0.png

复制一下倒数第二行 built 后面的一串代码,这个后面构建容器,也就是 container 的时候要用到。

5、run 运行容器

接下来我们运行创建一个容器,使用如下命令:

docker run -p 7979:7979 6811c43789de

6811c43789de这一串代码,就是上一步复制下来的 id,这一行命令的意思是运行这个容器,并将容器的 7979 端口映射到你本身操作系统的 7979 端口。

为什么要映射端口呢?

因为每一个容器都类似于一个小黑盒,与外界是不连通的,要访问里面的信息,必须将其映射出来。

我看过很多教程教程,他们在执行这一步之后,会输出Django系统初始化的一些信息,但我这里,没有显示。

6、 测试与查看

我们在浏览器访问一下,服务器的 ip+port,在我这里是http://192.168.31.222:7979/ ,就可以看到我们搭建的系统已经运行起来了,如下如所示:

10ce646ba51b467eaa7e2234f4d62d90.png

在我们执行 run 命令的地方也可以看到 请求的输出信息:

03d775c76ae694d4cd94739a3442304e.png

然后,我们可以进入一下我们构建的这个 container 看一下。

首先,docker container ls 查看所有正在运行的 container,可以看到类似如下信息:

bd6bc4dce58daecd289346e8eab5fbde.png

有我们刚刚运行的 container 信息,包括 container idport 映射信息,name 等字段。

我们可以通过 container id 或者 name 这个字段进入我们刚刚创建的 container,我用 container id 进入容器:

docker container exec -it 524d98f18334 bash

然后就进入了我们创建的 container 系统,查看一下 container 里面运行的 Python 进程:

ps -ef | grep python

可以看到有 端口为 7979 的 Django 系统在运行:

然后可以 使用 exit 退出该容器。

以上,就是使用 Docker 来运行一个 Django 容器的全过程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/558576.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql类似的数据库_MemSQL学习笔记-类似MySQL的数据库

http://gigaom.com/cloud/ex-facebookers-launch-memsql-to-make-your-database-fly/-- 多主-从http://www.mysqlops.com/2012/02/14/diy_multi_master_replication.htmlhttp://www.cnblogs.com/liuhao/archive/2012/06/26/2563702.html前facebook员工和前微软sql server工程师…

mysql8.0与mysql7.0_MySQL 5.7 vs 8.0,哪个性能更牛?

测试mysql5.7和mysql8.0分别在读写,选定,只写模式下不同并发时的性能(tps,qps)最早测试使用版本为mysql5.7.22和mysql8.0.15sysbench测试前先重启mysql服务,并清除os的缓存(避免多次测试时命中缓存)每次进行测试都是新生成测试数据…

linux+mysql+导出备份_Linux系统MySQL备份的导入导出的具体分析

问题描述如何对 ECS Linux 系统中的 MySQL 进行备份的导入和导出。处理办法MySQL 备份的导出MySQL 备份的导入MySQL 备份的导出注意:如果您使用的是帮助中心的一键环境配置,那么 MySQL 的安装目录是 /alidata/server/mysql。如果您将 MySQL 安装到其他目…

springmvc使用requestmapping无法访问控制类_研究人员称人类使用的新烟碱类杀虫剂让蜜蜂无法入睡...

来自布里斯托尔大学的科学家进行了研究,显示常见的杀虫剂可以阻止蜜蜂和苍蝇睡个好觉。就像人类一样,许多昆虫也需要睡眠才能正常工作。然而,如果它们接触过新烟碱类杀虫剂,它们的睡眠就会受到影响,新烟碱类杀虫剂是一…

linux 监控mysql脚本_Linux系统MySQL主从同步监控shell脚本

操作系统:CentOS系统目的:定时监控MySQL数据库主从是否同步,如果不同步,记录故障时间,并执行命令使主从恢复同步状态1、创建脚本文件vi /home/crontab/check_mysql_slave.sh #编辑,添加下面代码#!/bin/sh…

mysql 1066解决方法_MySQL查询语法帮助:错误#1066-表格/别名不唯...

我有四个表,user,user_billingprofile,user_shippingprofile和user_address.用户:userId,dateCreateduser_billingprofile:userId,地址user_shippingprofile:userId,地址user_address:随机地址废话这是我必须一目了然地获取用户帐…

python创建新进程_Python:创建新进程

我是Python新手。我应该创建一个有多个菜单的GUI。单击特定菜单时,应启动一个新进程,并且不应挂起用户界面。但我不能做到这一点。在网上搜索之后,我做了一个类似的代码。在在这段代码中,我的目标是使“print deep”语句处于活动状…

python协成_Python协程(上)

几个概念:event_loop 事件循环:程序开启一个无限的循环,程序员会把一些函数注册到事件循环上。当满足事件发生的时候,调用相应的协程函数。coroutine 协程:协程对象,指一个使用async关键字定义的函数&#…

python参数检验框架_基于python的人员识别检测框架研究

import numpy as np # 数据处理的库 Numpyimport cv2 # 图像处理的库 OpenCvimport osimport shutilimport _threadimport wximport csvfrom importlib import reloadfrom skimage import io as iioimport face_recognize_punchcardimport sys# 创建 cv2 摄像头对象#…

js父元素获取子元素img_css,前端_父标签div中包含一个子元素img标签,子元素div标签,为什么img要加上浮动,子元素div才会处于正常位置?,css,前端 - phpStudy...

父标签div中包含一个子元素img标签,子元素div标签,为什么img要加上浮动,子元素div才会处于正常位置?dom结构如图img加上float 子元素div显示正常。不加float div显示错位。附上我写的一个dome测试用的,大家可本地看下究…

android运营商获取本机号码_一键登录已成大势所趋,Android端操作指南来啦!

根据极光(Aurora Mobile)发布的《2019年Q2移动互联网行业数据研究报告》,2019年第二季度,移动网民人均安装APP总量已达56款。面对如此繁多的APP,想在用户的手机中占据一席之地,移动开发者们就不得不努力提升用户体验。而现实却是&…

mysql数据库中删除数据用什么语句_mysql数据库删除数据语句

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里云数据库专家保驾护航,为用户…

spring批量写入mysql数据库_MyBatis-spring和spring JDBC批量插入Mysql的效率比较

工具框架用spring-batch,数据库是mysql(未做特殊优化)。比较数据框架mybatis和spring jdbc的插入效率。Mybatis三种实现:1、mybatis的官方写法Java代码publicvoidbatchInsert1(List poilist)throwsException {SqlSession sqlSession sqlSessionFactory.…

mysql启动触发器_MYSQL中禁用/启动触发器

在使用MYSQL过程中,经常会使用到触发器,但是有时使用不当会造成一些麻烦。有没有一种办法可以控制触发器的调用呢?触发器顾名思义就是数据库在一定的调条件自动调用的SQL语句,触发器拒绝了人工调用的过程,由数据库MYSQ…

mysql数据库权威指南_MySQL_MySQL权威指南读书笔记(三),第二章:MYSQL数据库里面的数 - phpStudy...

MySQL权威指南读书笔记(三)第二章:MYSQL数据库里面的数据用想用好MYSQL,就必须透彻理解MYSQL是如何看待和处理数据的。本章主要讨论了两个问题:一是SQL所能处理的数据值的类型;二是这些数据类型…

mysql 批量替换 所有表_[收藏]批量替换一个数据库中所有表中所有记录

/***********批量替换一个数据库中所有表中所有记录************/declare delStr nvarchar(500)set delStr这里是要替换的字符/**********以下为操作实体************/set nocount ondeclare tableName nvarchar(100),columnName nvarchar(100),tbID int,iRow int,iResult intd…

java偶数和_Java编程计算1-100之间所有偶数的和。

展开全部 public class Demo05ShiCao{public static void main(String[] args){int sum1 = 0; for(int i = 1; i <= 100; i++){if(i % 2 == 0){sum1 +=i; } } System.out.println("结果e5a48de588b63231313335323631343130323136353331333366303138是:" + sum1);…

金额转换java_java金额转换

像商品价格&#xff0c;订单&#xff0c;结算都会涉及到一些金额的问题&#xff0c;为了避免精度丢失通常会做一些处理&#xff0c;常规的系统中金额一般精确到小数点后两位&#xff0c;也就是分&#xff1b;这样数据库在设计的时候金额就直接存储整型数据类型&#xff0c;前端…

java 栈 大小_java – JVM堆栈大小规范

Question, what does 1 MB stack size states in JVM as I have no idea what size a stack frame of?1 MB默认线程堆栈大小意味着每个线程默认具有1MB(1048576字节)的堆栈空间.例外情况是,如果您的代码使用其中一个Thread构造函数创建一个线程,您可以在其中提供堆栈大小参数.…

java bloomfilter_爬虫技术之——bloom filter(含java代码)

在爬虫系统中&#xff0c;在内存中维护着两个关于URL的队列&#xff0c;ToDo队列和Visited队列&#xff0c;ToDo队列存放的是爬虫从已经爬取的网页中解析出来的即将爬取的URL&#xff0c;但是网页是互联的&#xff0c;很可能解析出来的URL是已经爬取到的&#xff0c;因此需要VI…