欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 时评 > Docker+Django项目部署-从Linux+Windows实战

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

2025/11/12 13:45:01 来源:https://blog.csdn.net/m0_69402477/article/details/143804451  浏览:    关键词: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
    
  • CMD 构建容器后调用,也就是在容器启动时才进行调用

    格式:CMD ["executable","param1","param2"] (执行可执行文件,优先)CMD ["param1","param2"] (设置了ENTRYPOINT,则直接调用ENTRYPOINT添加参数)CMD command param1 param2 (执行shell内部命令)
    示例:CMD ["/usr/bin/wc","--help"]CMD ping www.baidu.com
    注意:CMD不同于RUN,CMD用于指定在容器启动时所要执行的命令,而RUN用于指定镜像构建时所要执行的命令。
    
  • ENTRYPOINT 设置容器初始化命令,使其可执行化

    格式:ENTRYPOINT ["executable", "param1", "param2"] (可执行文件, 优先)ENTRYPOINT command param1 param2 (shell内部命令)
    示例:ENTRYPOINT ["/usr/bin/wc","--help"]
    注意:ENTRYPOINT与CMD非常类似,不同的是通过docker run执行的命令不会覆盖ENTRYPOINT,而docker run命令中指定的任何参数,都会被当做参数再次传递给ENTRYPOINT。Dockerfile中只允许有一个ENTRYPOINT命令,多指定时会覆盖前面的设置,而只执行最后的ENTRYPOINT指令
    

    在这里插入图片描述

  • EXPOSE 暴漏端口

    格式:EXPOSE <port> [<port>...]
    示例:EXPOSE 80 443EXPOSE 8080EXPOSE 11211/tcp 11211/udp
    注意:就是一个端口的标识,实际开发时,没什么意义。因为端口的映射会在run命令时进行指定。
    

4.4 构建

docker build  -t v1:0.01  .  -f Dockerfile 
docker build  -t v1:0.01  .  -f Dockerfile  --no-cache# 不需要缓存:--no-cache

在这里插入图片描述

  • 容器批量销毁:
docker pa -aq 	# 只把容器id罗列出来
docker stop `docker ps -aq`
docker rm `docker ps -aq`

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

  • 进入正在存活的容器进行操作
dockers exec  -ti 容器id bash
# -t(--tty):分配一个伪终端(pseudo-terminal),使得你可以在命令执行期间与容器的标准输入/输出进行交互。这对于需要查看实时输出或使用交互式命令(如 bash、sh 等)非常有用。
# -i(--interactive):保持标准输入(stdin)打开,即使它没有连接到终端。这允许你在运行的命令中输入数据,例如在交互式 shell 中输入命令。

在这里插入图片描述

五、案例

案例1:基础指令

# Base images 基础镜像
FROM ubuntu:18.04#MAINTAINER 维护者信息
LABEL maintainer xxx xxx@live.com# 环境变量
ENV PRO_PATH /data/www#RUN 执行以下命令
RUN mkdir -p PRO_PATH#RUN 执行以下命令
RUN mkdir -p $PRO_PATH/mediea#COPY 拷贝文件至工作目录
COPY *.py  $PRO_PATH/#ADD 拷贝文件至工作目录+解压
ADD *.tgz  $PRO_PATH/mediea/#工作目录
WORKDIR /data/www/
  • 构建镜像:
docker build  -t v1:0.01  .  -f Dockerfile1
  • 创建容器:
# 创建容器,退出结束(因为容器中没有前台进程)docker run v1:0.01# 创建容器,主动创建一个前台的输入进程docker run -i v1:0.01docker run -i v1:0.01 bashdocker run -i v1:0.01 sh# 创建容器,主动创建一个前台的输入进程,不卡宿主机docker run -di v1:0.01 docker run -di v1:0.01 bashdocker run -di v1:0.01 sh# 创建容器,主动创建一个ping的进程docker run centos ping baidu.com# 创建容器,主动创建一个ping的进程,不卡住宿主机docker run -d centos ping baidu.com# 创建容器,主动创建一个终端+输入输出进程,进入容器内交互(退出容器停止)docker run -ti centos bashdocker run -ti centos /bin/shdocker run -ti v0:0.1 bash# 创建容器,并进入容器内,退出时结束容器后,自动删除。docker run -ti --rm centos bash# ############ 在正式开发时 ################ 创建容器(编辑镜像,让容器启动时自动创建一个前台进程)docker run -d v0:0.1# 后期想要进入正在存活的容器docker exec -it 容器ID bash
# 批量停止容器
docker stop `docker ps -aq`# 批量删除容器
docker rm `docker ps -aq`

案例2:CMD

CMD用于指定在容器启动时所要执行的命令,而RUN用于指定镜像构建时所要执行的命令。
例如:容器启动时,必须要有一个前台进程,一般在容器创建后去启动时,基于CMD运行一个前台进程。

# Base images 基础镜像
FROM ubuntu:18.04#MAINTAINER 维护者信息
LABEL maintainer wupeiqi wupeiqi@live.com# 环境变量
ENV PRO_PATH /data/www#RUN 执行以下命令
RUN apt update
RUN apt install inetutils-ping -y#RUN 执行以下命令
RUN mkdir -p PRO_PATH#RUN 执行以下命令
RUN mkdir -p $PRO_PATH/mediea#COPY 拷贝文件至工作目录
COPY *.py  $PRO_PATH/#ADD 拷贝文件至工作目录+解压
ADD *.tgz  $PRO_PATH/mediea/#WORKDIR 工作目录
WORKDIR /data/www/# CMD 容器启动时自动执行的前台进程
#     1.可以有多个CMD,但只有最后一个生效。
#     2.CMD的命令会被docker run覆盖
# CMD ping baidu.comCMD ["ping","baidu.com"]
  • 构建镜像:
docker build  -t v1:0.2  .  -f Dockerfile2
  • 创建容器+启动:
# 创建容器,由镜像中有前台线程,用-d参数,别卡主屏幕
docker run -d v1:0.2
# 后面的命令会覆盖CMD
docker run -d v1:0.2  ping pythonav.com
docker run -d v1:0.2  tail -f /data/www/app.py

在这里插入图片描述

案例3:ENTRYPOINT

ENTRYPOINT与CMD非常类似。

不同的是通过docker run执行的命令不会覆盖ENTRYPOINT,而docker run命令中指定的任何参数,都会被当做参数再次传递给ENTRYPOINT。

Dockerfile中只允许有一个ENTRYPOINT命令,多定义会覆盖前面的设置,而只执行最后的ENTRYPOINT指令

格式:ENTRYPOINT ["executable", "param1", "param2"] (可执行文件, 优先)ENTRYPOINT command param1 param2 (shell内部命令)
示例:ENTRYPOINT ["/usr/bin/wc","--help"]
# Base images 基础镜像
FROM ubuntu:18.04#MAINTAINER 维护者信息
LABEL maintainer wupeiqi wupeiqi@live.com# 环境变量
ENV PRO_PATH /data/www#RUN 执行以下命令
RUN apt update
RUN apt install inetutils-ping -y#RUN 执行以下命令
RUN mkdir -p PRO_PATH#RUN 执行以下命令
RUN mkdir -p $PRO_PATH/mediea#COPY 拷贝文件至工作目录
COPY *.py  $PRO_PATH/#ADD 拷贝文件至工作目录+解压
ADD *.tgz  $PRO_PATH/mediea/#WORKDIR 工作目录
WORKDIR /data/www/# ENTRYPOINT 容器启动时自动执行的前台进程
#     1.可以有多个ENTRYPOINT,但只有最后一个生效。
#     2.docker run传入的命令不会覆盖ENTRYPOINT,而是当成参数向后传入给ENTRYPOINT
ENTRYPOINT ["ping","baidu.com"]
  • 构建镜像:
docker build  -t v1:0.4  .  -f Dockerfile4
  • 创建容器+启动:
# 创建容器,由镜像中有前台线程,用-d参数,别卡主屏幕
docker run -d v1:0.4
# 后面的命令不会覆盖ENTRYPOINT,而是当成参数向后传入给ENTRYPOINT
docker run -d v1:0.4  ping pythonav.com
docker run -d v1:0.4  tail -f /data/www/app.py

在这里插入图片描述

案例4:EXPOSE

EXPOSE表示容器暴漏的端口。

就是一个端口的标识,实际开发时,没什么意义。因为端口的映射会在 docker run 命令时进行指定。

# Base images 基础镜像
FROM ubuntu:18.04#MAINTAINER 维护者信息
LABEL maintainer wupeiqi@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 8000#容器启动时执行命令
CMD ["python3","app.py"]
  • 构建镜像:
docker build  -t v1:0.5  .  -f Dockerfile5
  • 创建容器+启动:
# 创建容器,由镜像中有前台线程,用-d参数,别卡主屏幕
docker run -d -p 80:8000 v1:0.5

在这里插入图片描述

六、实战篇:Django项目部署

  • 需求:在容器中创建centos7.9+python3.9.5+django3.2+gitee拉代码
  • 流程:
    • 下载基础镜像centos7.9
    • 编写dockerfile -> python3.9.5+django3.2+gitee拉代码+前台运行django
    • 构建镜像
    • 创建容器+运行

6.1 下载基础镜像

[root@localhost crm1]# 
[root@localhost crm1]# 
[root@localhost crm1]# docker pull centos:7.9.2009
7.9.2009: Pulling from library/centos
2d473b07cdd5: Pull complete 
Digest: sha256:9d4bcbbb213dfd745b58be38b13b996ebb5ac315fe75711bd618426a630e0987
Status: Downloaded newer image for centos:7.9.2009
docker.io/library/centos:7.9.2009
[root@localhost crm1]# 
[root@localhost crm1]# 
[root@localhost crm1]# docker images
REPOSITORY   TAG        IMAGE ID       CREATED             SIZE
nginx        latest     605c77e624dd   17 months ago       141MB
ubuntu       18.04      5a214d77f5d7   20 months ago       63.1MB
centos       7.9.2009   eeb6ee3f44bd   20 months ago       204MB

6.2 构建镜像

6.2.1 编写Dockerfile

# Base images 基础镜像
FROM centos:7.6.1810#MAINTAINER 维护者信息
LABEL maintainer wupeiqi@live.com# GCC编译器
RUN yum install gcc -y# Python依赖
RUN yum install -y zlib zlib-devel bzip2 bzip2-devel ncurses ncurses-devel readline readline-devel openssl openssl-devel  xz lzma xz-devel sqlite sqlite-devel gdbm gdbm-devel tk tk-devel  mysql-devel python-devel libffi-devel# wget
RUN yum install wget -y# 目录
RUN mkdir -p /data/
WORKDIR /data/# SQLite升级
RUN wget https://www.sqlite.org/2023/sqlite-autoconf-3420000.tar.gz  --no-check-certificate
RUN tar -zxvf sqlite-autoconf-3420000.tar.gz
WORKDIR /data/sqlite-autoconf-3420000
RUN ./configure
RUN make && make install
ENV LD_LIBRARY_PATH="/usr/local/lib"# Python3.9环境
WORKDIR /data/
RUN wget https://www.python.org/ftp/python/3.9.5/Python-3.9.5.tgz
RUN tar -xvf Python-3.9.5.tgz
WORKDIR /data/Python-3.9.5/
RUN ./configure
RUN make && make install
RUN pip3.9 config set global.index-url https://pypi.douban.com/simple/# git
RUN yum install git -y
RUN git config --global user.name "武沛齐"
RUN git config --global user.email "wupeiqi@live.com"# git拉代码
WORKDIR /data/
RUN git clone https://gitee.com/wupeiqi/blog.git# 虚拟环境
RUN pip3.9 install virtualenv
RUN virtualenv  /envs/dj --python=python3.9
RUN /envs/dj/bin/pip3.9 install django==3.2# 运行项目
WORKDIR /data/blogCMD ["/envs/dj/bin/python","manage.py","runserver","0.0.0.0:9000"]

6.2.2 构建镜像

docker build -t dj  .  -f Dockerfile

6.2.3 启动容器

# 测试启动
docker run -p 80:9000 --rm dj# 正经启动
docker run -d -p 80:9000 dj

在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词