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.mzph.cn/news/886335.shtml

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

相关文章

深度学习工具和框架详细指南:PyTorch、TensorFlow、Keras

引言 在深度学习的世界中&#xff0c;PyTorch、TensorFlow和Keras是最受欢迎的工具和框架&#xff0c;它们为研究者和开发者提供了强大且易于使用的接口。在本文中&#xff0c;我们将深入探索这三个框架&#xff0c;涵盖如何用它们实现经典深度学习模型&#xff0c;并通过代码…

蓝桥杯-洛谷刷题-day3(C++)

目录 1.忽略回车的字符串输入 i.getline() ii.逐个字符的识别再输入 2.获取绝对值abs() 3.做题时的误区 4.多个变量的某一个到达判断条件 i.max() 5.[NOIP2016 提高组] 玩具谜题 i.代码 6.逻辑上的圆圈 i.有限个数n的数组 7.数组的定义 i.动态数组 1.忽略回车的字符串输…

元器件封装

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

C++ 的发展

目录 C 的发展总结&#xff1a;​编辑 1. C 的早期发展&#xff08;1979-1985&#xff09; 2. C 标准化过程&#xff08;1985-1998&#xff09; 3. C 标准演化&#xff08;2003-2011&#xff09; 4. C11&#xff08;2011年&#xff09; 5. C14&#xff08;2014年&#xf…

【MySQL】MySQL在Centos环境安装

&#x1f525;个人主页&#xff1a; Forcible Bug Maker &#x1f525;专栏&#xff1a; MySQL 目录 &#x1f308;前言&#x1f525;卸载不要的环境&#x1f525;检查系统安装包&#x1f525;卸载这些默认安装包&#x1f525;获取mysql官方yum源&#x1f525;安装mysql yum源…

【算法】动态规划中01背包问题解析

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &#x1f4e2;本文由 JohnKi 原创&#xff0c;首发于 CSDN&#x1f649; &#x1f4e2;未来很长&#…

Linux开发工具:Vim 与 gcc,打造高效编程的魔法双剑

文章目录 一、初识Vim模式 二、vim基本操作2.1基础操作2.2命令模式/正常模式2.2.1光标定位2.2.2复制粘贴、删除2.2.3撤销2.2.4替换字符2.2.5替换模式 2.3底行模式2.3.1退出vim和**保存文件**2.3.2定位文本字符串2.3.3命令2.3.4实现分屏2.3.5替换指定字符串 2.4补充指令2.4.1视图…

[JAVA]MyBatis框架—如何获取SqlSession对象实现数据交互(基础篇)

假设我们要查询数据库的用户信息&#xff0c;在MyBatis框架中&#xff0c;首先需要通过SqlSessionFactory创建SqlSession&#xff0c;然后才能使用SqlSession获取对应的Mapper接口&#xff0c;进而执行查询操作 在前一章我们学习了如何创建MyBatis的配置文件mybatis.config.xm…

Linux基础开发工具使用

目录 1. 软件包管理器yum 1.1 概念介绍 1.2 更换镜像源&#xff08;可选&#xff09; 1.3 工具的搜索/查看/安装/卸载 1.4 优势 2. vim编辑器 2.1 vi和vim 2.2 三种常用模式和操作 2.3 配置vim 3. Linux编译器-gcc/g 4. Linux调试器-gdb 5. make和Makefile 6.…

群控系统服务端开发模式-应用开发-前端图片格式功能开发

一、添加视图 在根目录下src文件夹下views文件夹下param文件夹下grade文件夹下&#xff0c;新建index.vue&#xff0c;代码如下 <template><div class"app-container"><div class"filter-container" style"float:left;"><…

【WPF】Prism库学习(一)

Prism介绍 1. Prism框架概述&#xff1a; Prism是一个用于构建松耦合、可维护和可测试的XAML应用程序的框架。它支持WPF、.NET MAUI、Uno Platform和Xamarin Forms等多个平台。对于每个平台&#xff0c;Prism都有单独的发布版本&#xff0c;并且它们在不同的时间线上独立开发。…

The Planets: Earth -- 练习

环境搭建 该靶场环境来自Vulnhub -------- Difficulty: Easy 靶机与Kali的IP地址只需要在同一局域网即可&#xff08;同一个网段,即两虚拟机处于同一网络模式&#xff09;&#xff0c;所以需要调整KALI和靶场的网络模式&#xff0c;为了方便测试本地采用NAT模式。 注意&…

C/C++语言基础--initializer_list表达式、tuple元组、pair对组简介

本专栏目的 更新C/C的基础语法&#xff0c;包括C的一些新特性 前言 initializer_list表达式、tuple元组、pair对组再C日常还是比较常用的&#xff0c;尤其是对组在刷算法还是挺好用的&#xff0c;这里做一个简介&#xff1b;这三个语法结合C17的结构化绑定会更好用&#xff…

『VUE』27. 透传属性与inheritAttrs(详细图文注释)

目录 什么是透传属性&#xff08;Forwarding Attributes&#xff09;使用条件唯一根节点禁用透传属性继承总结 欢迎关注 『VUE』 专栏&#xff0c;持续更新中 欢迎关注 『VUE』 专栏&#xff0c;持续更新中 什么是透传属性&#xff08;Forwarding Attributes&#xff09; 在 V…

演员王子辰—专注革命题材 《前行者》后再出发

2021年10月22日在北京卫视播出的由张鲁一、聂远等人主演的电视剧《前行者》&#xff0c;讲述了在二十世纪三十年代初&#xff0c;因叛徒出卖&#xff0c;我上海地下党组织遭到严重破坏&#xff0c;革命事业陷入一片白色恐怖之中。我党情报员马天目刚从法国归来&#xff0c;临危…

【电脑】解决DiskGenius调整分区大小时报错“文件使用的簇被标记为空闲或与其它文件有交叉”

【电脑】解决DiskGenius调整分区大小时报错“文件使用的簇被标记为空闲或与其它文件有交叉” 零、报错 在使用DiskGenius对磁盘分区进行调整时&#xff0c;DiskGenius检查出磁盘报错&#xff0c;报错信息&#xff1a;文件使用的簇被标记为空闲或与其它文件有交叉&#xff0c;…

远程控制步骤

当远在千里之外的朋友想求助你帮他找到他电脑上的文件、或者是给他安装软件时。但是你给他说了他又找不到&#xff0c;那么这时你就可以通过控制对方的电脑去做一系列的操作。 如何远程控制对方的电脑非常关键。 方法一&#xff08;Windows自带远程桌面功能&#xff09;&#…

蓝桥杯——数组

1、移动数组元素 package day3;import java.util.Arrays;public class Demo1 {public static void main(String[] args) {int[] arr {1,2,3,4,5,6};int k 2;int[] arr_new f(arr,k);for (int i : arr_new) {System.out.print(i",");}//或System.out.println();St…

【大数据技术基础 | 实验十】Hive实验:部署Hive

文章目录 一、实验目的二、实验要求三、实验原理四、实验环境五、实验内容和步骤&#xff08;一&#xff09;安装部署&#xff08;二&#xff09;配置HDFS&#xff08;三&#xff09;启动Hive 六、实验结果&#xff08;一&#xff09;启动结果&#xff08;二&#xff09;Hive基…

MQTT从入门到精通之MQTT Dashboard

MQTT Dashboard 1 Dashboard简介 EMQX 提供了一个内置的管理控制台&#xff0c;即 EMQX Dashboard。方便用户通过 Web 页面就能轻松管理和监控 EMQX 集群&#xff0c;并配置和使用所需的各项功能。 访问地址&#xff1a;http://ip:18083 首次登录访问账号&#xff1a;admin…