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.repo
    
    yum 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 Flask

app = 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 xxx
        MAINTAINER xxx@live.com
        MAINTAINER xxx<wupeiqi@live.com>
    
  • ENV
    格式:
        ENV <key> <value>
        ENV <key>=<value>
    示例:
        ENV myName John
        ENV 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 nginx
        RUN pip install django
        RUN mkdir test && rm -rf /var/lib/unusedfiles
    注意:
    	RUN指令创建的中间镜像会被缓存,并会在下次构建中使用。如果不想使用这些缓存镜像,可以在构建时指定--no-cache参数,如:docker build --no-cache
    

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[项目代码] YOLOv5 铁路工人安全帽安全背心识别 [目标检测]

YOLOv5是一种单阶段&#xff08;one-stage&#xff09;检测算法&#xff0c;它将目标检测问题转化为一个回归问题&#xff0c;能够在一次前向传播过程中同时完成目标的分类和定位任务。相较于两阶段检测算法&#xff08;如Faster R-CNN&#xff09;&#xff0c;YOLOv5具有更高的…

蓝桥杯备赛(持续更新)

16届蓝桥杯算法类知识图谱.pdf 1. 格式打印 %03d&#xff1a;如果是两位数&#xff0c;将会在前面添上一位0 %.2f&#xff1a;会保留两位小数 如果是long&#xff0c;必须在数字后面加上L。 2. 进制转化 2.1. 十进制转任意进制&#xff1a; 十进制转任意进制时&#xff…

使用Element UI实现前端分页,及el-table表格跨页选择数据,切换分页保留分页数据,限制多选数量

文章目录 一、前端分页1、模板部分 (\<template>)2、数据部分 (data)3、计算属性 (computed)4、方法 (methods) 二、跨页选择1、模板部分 (\<template>)2、数据部分 (data)3、方法 (methods) 三、限制数量1、模板部分 (\<template>)2、数据部分 (data)3、方法…

ThriveX 博客管理系统前后端项目部署教程

前端 前端项目地址&#xff1a;https://github.com/LiuYuYang01/ThriveX-Blog 控制端项目地址&#xff1a;https://github.com/LiuYuYang01/ThriveX-Admin Vercel 首先以 Vercel 进行部署&#xff0c;两种方式部署都是一样的&#xff0c;我们以前端项目进行演示 首先我们先…

使用electron-egg把vue项目在linux Ubuntu环境下打包并安装运行

electron-egg一个入门简单、跨平台、企业级桌面软件开发框架https://www.kaka996.com/electron-egg 跳转地址 1,使用 git下载代码到本地,如果没有git需要进行安装 # gitee git clone https://gitee.com/dromara/electron-egg.git # github git clone https://github.com/dro…

力扣-Mysql-3322- 英超积分榜排名 III(中等)

一、题目来源 3322. 英超积分榜排名 III - 力扣&#xff08;LeetCode&#xff09; 二、数据表结构 表&#xff1a;SeasonStats --------------------------- | Column Name | Type | --------------------------- | season_id | int | | team_id …

深度学习基础—Beam search集束搜索

引言 深度学习基础—Seq2Seq模型https://blog.csdn.net/sniper_fandc/article/details/143781223?fromshareblogdetail&sharetypeblogdetail&sharerId143781223&sharereferPC&sharesourcesniper_fandc&sharefromfrom_link 上篇博客讲到&#xff0c;贪心算…

vueRouter路由切换时实现页面子元素动画效果, 左右两侧滑入滑出效果

说明 vue路由切换时&#xff0c;当前页面左侧和右侧容器分别从两侧滑出&#xff0c;新页面左右分别从两侧滑入 效果展示 路由切换-滑入滑出效果 难点和踩坑 现路由和新路由始终存在一个页面根容器&#xff0c;通过<transition>组件&#xff0c;效果只能对页面根容器有效…

【EasyExcel】复杂导出操作-自定义颜色样式等(版本3.1.x)

文章目录 前言一、自定义拦截器二、自定义操作1.自定义颜色2.合并单元格 三、复杂操作示例1.实体(使用了注解式样式)&#xff1a;2.自定义拦截器3.代码4.最终效果 前言 本文简单介绍阿里的EasyExcel的复杂导出操作&#xff0c;包括自定义样式&#xff0c;根据数据合并单元格等。…

集群搭建高可用

contos7.9 部署3节点 hadoop3.4 高可用集群 contos7.9 部署3节点 hadoop3.4 高可用集群环境信息Hadoop与Zookeeper的版本对应关系服务器角色分配使用端口服务器配置配置免密登录服务器配置初始化 init_server.sh配置主机名映射所有节点配置 hosts文件 hadoop 安装环境配置下载安…

Pycharm 配置 Poetry

Python 环境安装 参考以下&#xff1a; 官网安装步骤 CODA方式安装 Poetry 安装 Poetry在windows下的安装使用 1.下载软件包 下载地址 2.获取安装脚本下载地址 3.使用命令安装 打开cmd&#xff0c;进入安装包和脚本文件所在目录&#xff0c;执行命令&#xff1a; python …

卡尔曼滤波:从理论到应用的简介

卡尔曼滤波&#xff08;Kalman Filter&#xff09;是一种递归算法&#xff0c;用于对一系列噪声观测数据进行动态系统状态估计。它广泛应用于导航、控制系统、信号处理、金融预测等多个领域。本文将介绍卡尔曼滤波的基本原理、核心公式和应用案例。 1. 什么是卡尔曼滤波&#x…

聊聊Flink:Flink的运行时架构

一、运行时架构 上一篇我们可以看到Flink的核心组件的Deploy层&#xff0c;该层主要涉及了Flink的部署模式&#xff0c;Flink支持多种部署模式&#xff1a;本地、集群&#xff08;Standalone/YARN&#xff09;、云&#xff08;GCE/EC2&#xff09;。 Local&#xff08;本地&am…

元器件封装

元器件封装类型 为什么越来越多用贴片元件&#xff0c;而不是插件元件 为什么越来越多用贴片元件&#xff0c;而不是插件元件 1.体积小、质量小、容易保存和运输&#xff1b; 2.容易焊接和拆卸。抗震效果好。 贴片元件不用过孔&#xff0c;用锡少。直插元件最麻烦的就是拆卸&a…

[JAVAEE] 网络编程

目录 一. 什么是socket套接字 二. socket套接字 2.1 socket套接字根据传输层协议分类 2.2 TCP流套接字 UDP数据报套接字主要特点 三. UDP数据报套接字编程 3.1 DatagramSocket 是UDP socket, 用于发送和接受数据报 3.2 DatagramPacket 是UDP socket 发送和接收的数据报 …

GNN入门案例——KarateClub结点分类

文章目录 一、任务描述二、环境配置三、加载数据四、定义网络结构五、训练模型 一、任务描述 Karate Club 图任务是一个经典的图结构学习问题&#xff0c;通常用于社交网络分析和社区检测。该数据集是由 Wayne W. Zachary 在1977年收集的&#xff0c;描述了一个美国的空手道俱…

173. 二叉搜索树迭代器【 力扣(LeetCode) 】

文章目录 零、原题链接一、题目描述二、测试用例三、解题思路四、参考代码 零、原题链接 173. 二叉搜索树迭代器 一、题目描述 实现一个二叉搜索树迭代器类BSTIterator &#xff0c;表示一个按中序遍历二叉搜索树&#xff08;BST&#xff09;的迭代器&#xff1a; BSTIterato…

【lamafactory BLEU ROUGLE L评测】

1、BLEU/ROUGLE评测界面 2、这个是用BLEU 和ROUGL来评测 目录&#xff1a;saves/Qwen2-7B-Chat/lora/eval_2024-11-14-16-28-19/ 在saves文件夹 生成的文件如下 all_results.json文件 说明模型在这个测试集上是不好的 3、可以查看预测结果的文件 predict_result.json

前端开发中常用的包管理器(npm、yarn、pnpm、bower、parcel)

文章目录 1. npm (Node Package Manager)2. Yarn (Yarn Package Manager)3. pnpm4. Bower5. Parcel总结 前端开发中常用的包管理器主要有以下几个&#xff1a; 1. npm (Node Package Manager) 简介&#xff1a; npm 是 Node.js 的默认包管理器&#xff0c;也是最广泛使用的包…

Python爬虫项目 | 一、网易云音乐热歌榜歌曲

文章目录 1.文章概要1.1 实现方法1.2 实现代码1.3 最终效果 2.具体讲解2.1 使用的Python库2.2 代码说明2.2.1 创建目录保存文件2.2.2 爬取网易云音乐热歌榜单歌曲 2.3 过程展示 3 总结 1.文章概要 学习Python爬虫知识&#xff0c;实现简单的一个小案例&#xff0c;网易云音乐热…