Docker+Django项目部署-从Linux+Windows实战

一、概述

1. 什么是Docker

Docker 是一个开源的应用容器引擎,支持在win、mac、Linux系统上进行安装。可以帮助我们在一台电脑上创建出多个隔离的环境,比传统的虚拟机极大的节省资源

  • 为什么要创建隔离的环境?
假设你先在有一个centos7.6系统运行程序,而这个程序需要依赖【ubuntu系统的服务A】 + 【centos7.9的服务B】- 传统的方式:买新服务器- 虚拟化方式:在原来的NB服务器上利用虚拟化技术创建虚拟机(vmware、kvm等),用虚拟机做隔离去跑新的业务。- docker的方式:利用docker软件创建一个新的容器,用容器去做隔离区跑新的业务。
  • 为什么docker可以比虚拟机极大的节省资源?
 - 虚拟机的方式,是在电脑完整的创建一个操作系统。- docker的方式,创建的容器不是完整的操作系统,而是充分利用宿主机内核+进程,只是创建了一些必备的资源。

在这里插入图片描述

2. 概念

在这里插入图片描述

  • DockerHub,远程镜像仓库。https://hub.docker.com/
    仓库中有官方的一些镜像文件,也有开发者自定义的镜像文件。
    
  • Images,本地镜像仓库。
    可以去远程仓库下载镜像到本地仓库,后续再根据镜像为“模版”去创建容器。本地的镜像也可以发布到远程镜像库。
    
    • 镜像是之前用虚拟机创建操作系统时的ISO文件吗?
    不是,此处是docker中的特殊的文件
    
    • 镜像是个什么样的文件?
    镜像就是充当模版来使用,在他得内部包含打包好了的:运行所需依赖 + 业务代码。
    后期基于镜像一键创建出的容器也就会自动包含依赖和业务代码,直接就可以运行了,不需要再安装+拷贝代码了。
    
  • Containers,容器
    容器就是根据镜像创造出来的一个个隔离的环境。
    
    在这里插入图片描述

二、服务器准备

在这里插入图片描述

  • 学习环境:win电脑 -> centos7虚拟机【docker】 -> docker容器
  • 线上环境:云平台 -> 购买云主机【docker】 -> docker容器

1. 环境准备

  • 在win电脑安装:vmware工具 + 创建centos系统(初始化)

1.1 VMware

  • 下载安装:

在这里插入图片描述

  • 虚拟化支持:
    在这里插入图片描述
    在这里插入图片描述
    注意:开启后重启即可,如果电脑提示无法启动,则需要先进入bios在主板中设置开启支持Hyper-V。

2. CentOS系统

清华大学开源软件镜像站
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

>>>uname -r
>>>cat /etc/redhat-release

在这里插入图片描述

3. 网络配置

  • 默认登录无法上网,需要配置下网络才行

3.1 Win电脑

配置DNS和网关
在这里插入图片描述

3.2 CentOS主机

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static         # 由原来的dhcp改成static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=cfbd5cd7-fa17-48e6-9d13-715f33e1f08d
DEVICE=ens33
ONBOOT=yes              # 由原来的no改成yes
IPADDR=192.168.115.133  # 新增,当前主机的IP
GATEWAY=192.168.115.2   # 网关
NETMASK=255.255.255.0   # 掩码
DNS1=8.8.8.8            # NDS服务器
DNS2=8.8.4.4            # NDS服务器

在这里插入图片描述

service network restart
systemctl restart network

重启后,可以ping百度测试:

ping baidu.com

在这里插入图片描述

4. 系统初始化

  • 关闭selinux (vi /etc/selinux/config)
    • 查看状态
      getenforce
      
    • 临时关闭
      setenforce    0
      
    • 永久关闭
      vi /etc/selinux/config
      
      # 设置为disabled
      SELINUX=disabled
      
  • 防火墙
    • 查看防火墙状态
      systemctl status firewalld
      
    • 关闭
      systemctl stop firewalld
      
    • 关闭开机启动防火墙
      systemctl disable firewalld
      
  • net-tools
    yum install net-tools -y
    
  • openssh-server
    yum install openssh-server -y
    
    systemctl start sshd.service
    
    systemctl enable sshd.service
    
  • 可以在win上用xshell等工具SSH连接centos
  • wget
    yum install wget -y
    
  • centos常用工具包
    yum install -y wget bash-completion vim lrzsz wget expect net-tools nc nmap tree dos2unix htop iftop iotop unzip telnet sl psmisc nethogs glances bc ntpdate openldap-devel
    

三、安装Docker

1. 安装docker-ce社区版

  • 配置repo源
    curl -o /etc/yum.repos.d/Centos-7.repo http://mirrors.aliyun.com/repo/Centos-7.repo
    curl -o /etc/yum.repos.d/docker-ce.repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repoyum clean all && yum makecache
    
    在这里插入图片描述
  • 查看可下载版本
    yum list docker-ce --showduplicates | sort -r
    
  • 安装
    # 最新版
    yum install -y docker-ce# 指定版本
    yum install -y docker-ce-23.0.6
    
    在这里插入图片描述

2. 启动docker-ce社区版

  • 设置开机启动

    systemctl enable docker 
    
  • 启动docker

    systemctl start docker  
    
    systemctl restart docker 
    

    在这里插入图片描述
    在这里插入图片描述

  • 下载镜像

    docker pull ubuntu
    

    在这里插入图片描述
    在这里插入图片描述

  • 停止docker

    systemctl stop docker  
    
  • 其他

    ## 查看docker信息
    docker version## 查看docker信息
    docker info## docker-client
    which docker## docker daemon
    ps -ef |grep docker
    

3. 宿主机网卡转发(端口转发)

cat <<EOF > /etc/sysctl.d/docker.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.all.rp_filter = 0
net.ipv4.ip_forward=1
EOF
sysctl -p /etc/sysctl.d/docker.conf

在这里插入图片描述

4. 配置镜像加速

  • 类似于pip源,以后在docker中下载镜像时,使用加速器,下载就会比较快。
    https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors注册自己的帐号
    在这里插入图片描述
  • https://www.daocloud.io/mirror#accelerator-doc注册账号也有加速器地址
    在这里插入图片描述
sudo mkdir -p /etc/docker			# 指定目录
sudo tee /etc/docker/daemon.json <<-'EOF'		# 创建目录后创建文件(daemon.json),写入内容
{"registry-mirrors": ["https://t57hdrx1.mirror.aliyuncs.com","http://f1361db2.m.daocloud.io"]
}
EOF

在这里插入图片描述

systemctl daemon-reload
systemctl restart docker 

在这里插入图片描述

四、实战篇:部署Flask网站

需求:基于docker创建在Ubuntu18.04系统上运行开发的Flask网站。
流程:

  • 在centos7.9+安装docker
  • 基于docker软件
    • 获取基础镜像Ubuntu18.04
    • 在基础镜像基础上构建自定义镜像【Ubuntu18.04+python+代码】
    • 基于镜像创建容器+运行

4.1 下载基础镜像

https://hub.docker.com/_/ubuntu/tags
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

[root@192 ~]# docker images
REPOSITORY     TAG       IMAGE ID       CREATED          SIZE
[root@192 ~]#
[root@192 ~]#
[root@192 ~]# docker pull ubuntu:18.04
[root@192 ~]#
[root@192 ~]#
18.04: Pulling from library/ubuntu
284055322776: Pull complete 
Digest: sha256:0fedbd5bd9fb72089c7bbca476949e10593cebed9b1fb9edf5b79dbbacddd7d6
Status: Downloaded newer image for ubuntu:18.04
docker.io/library/ubuntu:18.04
[root@192 ~]# 
[root@192 ~]# 
[root@192 ~]# docker images
REPOSITORY     TAG       IMAGE ID       CREATED          SIZE
ubuntu         18.04     5a214d77f5d7   20 months ago    63.1MB
[root@192 ~]# 
[root@192 ~]# 

在这里插入图片描述

4.2 构建镜像

4.2.1 编写Dockerfile+语法

  • 在docker宿主机centos7.9创建2个文件:
    • Dockerfile
    • app.py
# Dockerfile# Base images 基础镜像
FROM ubuntu:18.04		# from就是基于那个基础的镜像(基于Ubuntu:18.04)#MAINTAINER 维护者信息
LABEL MAINTAINER   xxx  xxx@live.com	# 自定义的作者是谁#RUN 执行以下命令
RUN apt update
RUN apt install python3  python3-pip  -y
RUN pip3 install flask
RUN mkdir -p /data/www/#拷贝文件至工作目录
COPY app.py  /data/www/app.py#工作目录
WORKDIR /data/www/#EXPOSE 映射端口
EXPOSE 80#容器启动时执行命令
CMD ["python3","app.py"]
from flask import Flaskapp = Flask(__name__)@app.route("/index")
def index():return "欢迎光临红浪漫"if __name__ == "__main__":app.run(host="0.0.0.0",port=8000)

4.2.2 命令创建自定义镜像(模板)

 docker build  -t  Stara/v0:0.1  .  -f Dockerfile # docker build:用于从 Dockerfile 构建一个 Docker 镜像。
# -t:--tag 的简写,用于指定镜像的名称和标签。
# Stara/v0:0.1  - Stara 是镜像的仓库名称(repository)。- v0 是镜像的名称(name)。- 0.1 是镜像的标签(tag),通常用于版本控制。. 表示当前目录下寻找 Dockerfile 并构建镜像。-f 是 --file 的简写,用于指定 Dockerfile 的文件名。

在这里插入图片描述
在这里插入图片描述

4.2.3 基于镜像创建容器+运行

docker run xxx/web1:1.0
# 但是网站对外访问不了,要做端口转发

在这里插入图片描述

docker run -p 80:8000 xxx/web1:1.0
# 80 当前宿主机centos监听的端口,转发给8000(代码写的8000)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

docker run -d -p 80:8000 xxx/web1:1.0
# -d表示在后台运行,代码不需要停止,返回的这一串是创建的容器id

在这里插入图片描述
在这里插入图片描述

docker ps
# 罗列出来目前正在运行的所有容器,用的同一个镜像,容器名字随机生成的

在这里插入图片描述

docker run -d -p 84:8000 --name v222 xxx/web1:1.0
# 指定名字叫v222

在这里插入图片描述

# 查看所有容器,包括正在运行的和已经停止的docker ps -a

在这里插入图片描述

#  停止容器 ID 为 550(前三位id数字) 的容器
docker  stop 550

在这里插入图片描述

# 停下来没有用了,删除
docker rm 550

在这里插入图片描述

4.3 在Dockerfile编写的指令意思

  • FROM 指定基础镜像,必须为第一个命令
    格式:FROM <image>FROM <image>:<tag>
    示例:FROM mysql:5.7
    注意:tag是可选的,如果不使用tag时,会使用latest版本的基础镜像
    
  • MAINTAINER 镜像维护者的信息
    格式:MAINTAINER <name>
    示例:MAINTAINER xxxMAINTAINER xxx@live.comMAINTAINER xxx<wupeiqi@live.com>
    
  • ENV
    格式:ENV <key> <value>ENV <key>=<value>
    示例:ENV myName JohnENV myCat=fluffy
    
  • COPY|ADD 添加本地文件到镜像中
    格式:COPY <src>... <dest>
    示例:ADD hom* /mydir/          # 添加所有以"hom"开头的文件ADD test relativeDir/     # 添加 "test" 到 $WORKDIR/relativeDir/ADD test /absoluteDir/    # 添加 "test" 到 /absoluteDir/注意:针对压缩包使用ADD的话,会自动解压。
    
  • WORKDIR 工作目录
    格式:WORKDIR /path/to/workdir
    示例:WORKDIR /a  (这时工作目录为/a)
    注意:通过WORKDIR设置工作目录后,Dockerfile中其后的命令RUN、CMD、ENTRYPOINT、ADD、COPY等命令都会在该目录下执行
    
  • RUN 构建镜像过程中执行命令
    格式:RUN <command>
    示例:RUN yum install nginxRUN pip install djangoRUN mkdir test && rm -rf /var/lib/unusedfiles
    注意:RUN指令创建的中间镜像会被缓存,并会在下次构建中使用。如果不想使用这些缓存镜像,可以在构建时指定--no-cache参数,如:docker build --no-cache
    

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

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

相关文章

[GXYCTF2019]BabyUpload--详细解析

信息搜集 进入界面&#xff0c;直接就是文件上传界面&#xff0c;结合题目&#xff0c;得知考察的是文件上传漏洞。 思路 文件上传漏洞&#xff0c;第一步先看有没有前端校验&#xff1a; 没有前端校验。 我们写一个一句话木马文件&#xff1a; //shell.php GIF89a <…

北京大学c++程序设计听课笔记101

基本概念 程序运行期间&#xff0c;每个函数都会占用一段连续的内存空间。而函数名就是该函数所占内存区域的起始地址&#xff08;也称“入口地址”&#xff09;。我们可以将函数的入口地址赋给一个指针变量&#xff0c;使该指针变量指向该函数。然后通过指针变量就可以调用这个…

基本数据类型和包装类型的区别、缓存池、自动拆箱装箱(面试题)

目录 1. 八种基本类型及对应包装类型 2. 基本类型和包装类型 区别 3. 自动拆箱装箱 3.1 自动装箱 3.2 自动拆箱 3.3 缓存池 4. 高频面试案例分析 1. 八种基本类型及对应包装类型 基本数据类型类型描述范围&#xff08;指数形式&#xff09;位数包装类型byte整型&#x…

双子数(枚举素数)

#include <iostream> #include <vector> #include <cmath> using namespace std;vector<long long> generate(long long n) {vector<bool> is(n 1, true);// 标记是否为素数&#xff0c;初始值全为 truevector<long long> v;is[0] is[1]…

Springboot集成ElasticSearch实现minio文件内容全文检索

一、docker安装Elasticsearch &#xff08;1&#xff09;springboot和Elasticsearch的版本对应关系如下&#xff0c;请看版本对应&#xff1a; 注意安装对应版本&#xff0c;否则可能会出现一些未知的错误。 &#xff08;2&#xff09;拉取镜像 docker pull elasticsearch:7…

思源笔记 Creating group siyuan (1000) permission denied (are you root?)

错误提示 siyuan_jx85-1 | Creating group siyuan (1000) siyuan_jx85-1 | addgroup: permission denied (are you root?) siyuan_jx85-1 | Creating group siyuan (1000) siyuan_jx85-1 | addgroup: permission denied (are you root?) siyuan_jx85-1 | Creating group siy…

基于Matlab的碎纸片的自动拼接复原技术

碎纸片的自动拼接复原技术 摘要&#xff1a;破碎文件的拼接在司法物证复原、历史文献修复以及军事情报获取等领域都有着重要的应用。目前发现对碎纸片的拼接大部分由人工完成&#xff0c;准确率较高&#xff0c;但耗费大量人力财力及时间&#xff0c;效率很低。随着计算机技术的…

SpringBoot(5)-SpringSecurity

目录 一、是什么 二、实战测试 2.1 认识 2.2 认证和授权 2.3 权限控制和注销 2.4 记住我 一、是什么 Spring Security是一个框架&#xff0c;侧重于为java应用程序提供身份验证和授权。 Web应用的安全性主要分为两个部分&#xff1a; 认证&#xff08;Authentication&…

【eNSP】企业网络架构实验——vlan间的路由通信(三)

VLAN间的路由是指不同VLAN之间的通信&#xff0c;通常VLAN是用来分割网络流量和提高网络安全性的。 一、VLAN 1. 什么是VLAN&#xff1f; VLAN&#xff0c;全称是虚拟局域网&#xff08;Virtual Local Area Network&#xff09;&#xff0c;是一种将物理局域网&#xff08;LA…

DAY65||Bellman_ford 队列优化算法(又名SPFA)|bellman_ford之判断负权回路|bellman_ford之单源有限最短路

Bellman_ford 队列优化算法&#xff08;又名SPFA&#xff09; 94. 城市间货物运输 I 思路 大家可以发现 Bellman_ford 算法每次松弛 都是对所有边进行松弛。 但真正有效的松弛&#xff0c;是基于已经计算过的节点在做的松弛。 给大家举一个例子&#xff1a; 本图中&#xff…

FRP 实现内网穿透

如何通过 FRP 实现内网穿透&#xff1a;群晖 NAS 的 Gitea 和 GitLab 访问配置指南 在自建服务的过程中&#xff0c;经常会遇到内网访问受限的问题。本文将介绍如何利用 FRP&#xff08;Fast Reverse Proxy&#xff09;来实现内网穿透&#xff0c;以便在外网访问群晖 NAS 上的…

【优选算法 — 滑动窗口】水果成篮 找到字符串中所有字母异位词

水果成篮 水果成篮 题目描述 因为只有两个篮子&#xff0c;每个篮子装的水果种类相同&#xff0c;如果从 0 开始摘&#xff0c;则只能摘 0 和 1 两个种类 &#xff1b; 因为当我们在两个果篮都装有水果的情况下&#xff0c;如果再走到下一颗果树&#xff0c;果树的水果种类…

1、使用vscode+eide+stm32cubeMx开发stm32

步骤1&#xff1a;在vscode中安装如下的插件 步骤2&#xff1a;点击Embedded IDE&#xff0c;点击“新建项目”-----空项目-----Cortex-M项目。 步骤3&#xff1a;输入项目名&#xff0c;回车后会要制定保存路径&#xff0c;此时就是一个已项目名命名的文件夹。 步骤4&#xff…

【数据库系列】 Spring Boot 集成 Neo4j 的详细介绍

Spring Boot 提供了对 Neo4j 的良好支持&#xff0c;使得开发者可以更方便地使用图数据库。通过使用 Spring Data Neo4j&#xff0c;开发者可以轻松地进行数据访问、操作以及管理。本文将详细介绍如何在 Spring Boot 应用中集成 Neo4j&#xff0c;包括基本配置、实体定义、数据…

高亚科技签约美妥维志化工,提升业务协同与项目运营效率

近日&#xff0c;中国企业管理软件资深服务商高亚科技与韶关美妥维志化工有限公司&#xff08;以下简称“美妥维志”&#xff09;正式签约。基于高亚科技的8Manage PM项目管理软件&#xff0c;美妥维志将实现项目进度、人员审批及问题的统一管理&#xff0c;提升部门间协同效率…

Python安装(ubuntu)

一&#xff1a;安装指定版本的python python3 --version直接返回ubuntu自带的3.8.10的版本 radarswradarsw-Precision-5560:~$ python3 --version Python 3.8.10通过指令直接安装&#xff0c;会报错如下; radarswradarsw-Precision-5560:~$ sudo apt install python3.11 正在…

大模型基础BERT——Transformers的双向编码器表示

大模型基础BERT——Transformers的双向编码器表示 整体概况 BERT&#xff1a;用于语言理解的深度双向Transform的预训练 论文题目&#xff1a;BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding Bidirectional Encoder Representations from…

云计算复习文档

云计算复习文档 一 云计算概述 名词&#xff1a; 云计算 1.0 &#xff1a; 面向数据中心管理员的IT基础设施资源虚拟化阶段 通过计算虚拟化技术将企业IT应用与底层的基础设施彻底分离、解耦 将多个企业IT应用实例及运行环境复用在相同的物理服务器上&#xff0c;并通过虚…

探索大规模语言模型(LLM)在心理健康护理领域中的应用与潜力

概述 心理健康是公共卫生最重要的领域之一。根据美国国家精神卫生研究所&#xff08;NIMH&#xff09;的数据&#xff0c;到 2021 年&#xff0c;22.8% 的美国成年人将患上某种形式的精神疾病。在全球范围内&#xff0c;精神疾病占非致命性疾病负担的 30%&#xff0c;并被世界…

Tensorflow基本概念

简介&#xff1a;本文从Graph讲到Session&#xff0c;同时讲解了tf.constant创建tensor的用法和variable需要初始化的知识点&#xff0c;可以给你打好一个学习Tensorflow的基础。本文都是基于TensorFlow1.14.0的版本下运行。 本专栏将会系统的讲解TensorFlow在1.14.0版本下的各…