1.Docker拉取CentOS镜像
搜索可用镜像列表 docker search centos
拉取镜像 docker pull centos
(根据该镜像创建的容器是CentOS8环境)
2.用镜像centos创建一个名为test的容器
docker run -p 1234:8080 --name test -idt centos
并把服务器1234端口映射到容器的8080端口(端口映射后续不太方便添加或修改,这一步慎重一些比较好)
参考:
Docker容器设置端口映射的方法_docker容器端口映射到服务器-CSDN博客
3.进入test容器,更改yum源
进入容器 docker exec -it test /bin/bash
yum( Yellow dog Updater, Modified)是一个在 Fedora 和 RedHat 以及 SUSE 中的 Shell 前端软件包管理器。
基于 RPM 包管理,能够从指定的服务器自动下载 RPM 包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。
后续需要用yum安装文本编辑器vim
cd /etc/yum.repos.d/
sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
yum install wget
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo
yum clean all
yum makecache
更改yum源的目的是解决报错:
Failed to download metadata for repo ‘AppStream’: Cannot prepare
internal mirrorlist: No URLs in mirrorlist”
出现这个错误提示的原因是CentOS 8 已于2021年12月31日停止官方服务了.
参考:
问题解决:Failed to download metadata for repo ‘appstream‘: Cannot prepare internal mirrorlist:…-腾讯云开发者社区-腾讯云 (tencent.com)
在 CentOS 8 中安装软件出现 “错误:为仓库 ‘appstream’ 下载元数据失败” 的解决办法 - 知乎 (zhihu.com)
4.安装Anaconda
使用Anaconda主要由于以下两个原因:
一是容器中手动搭建python环境非常繁琐麻烦,使用Anaconda的话可以在创建conda环境时conda create -n test python=3.8
一句命令解决。
二是pip3安装uwsgi会报错。
ERROR: Failed building wheel for uwsgi Failed to build uwsgi ERROR:
Could not build wheels for uwsgi, which is required to install
pyproject.toml-based projects
搜索了一圈,最简单的解决方法是在Anaconda虚拟环境中直接使用 conda install
安装,所以先下载Anaconda创建虚拟环境
下载Anaconda
cd到.sh文件的目标目录,执行以下语句从官网下载文件:
wget https://repo.anaconda.com/archive/Anaconda3-2024.02-1-Linux-x86_64.sh
wget太慢可以直接用windows系统访问这个网址下载好后用Xftp传到服务器。 退出当前test容器:
exit
将传输到服务器tmp目录下的python3安装包复制到test容器的usr/local目录中:docker cp /tmp/Anaconda3-2024.02-1-Linux-x86_64.sh test:/usr/local
再重新进入容器的相应目录继续下列步骤即可 (wget下载5min左右,windows下载1min左右、传输1min左右)
进入.sh文件所在目录
运行安装脚本 bash Anaconda3-2024.02-1-Linux-x86_64.sh
按回车键查看许可协议至结束
输入yes回车确认安装
选择安装路径时,回车选择默认路径。需要更改路径则输入自定义路径,这里更改为 /usr/local/anaconda3
等待安装完成
选择是否初始化Anaconda:
输入yes
配置环境变量
需要先下载vim,方便后续编辑配置文件: yum install vim
编辑profile:vim /etc/profile
在文件尾部添加以下内容
export ANACONDA_PATH=/usr/local/anaconda3
export PATH=$PATH:$ANACONDA_PATH/bin
使环境变量生效 source /etc/profile
查看版本检验是否安装成功 conda --version
参考:
CentOS8安装配置Anaconda&Python_cent8安装conda-CSDN博客
5.创建conda环境并安装django和uwsgi
conda创建名为test的python3.8环境:conda create -n test python=3.8
python3.8以下好像没有适合的uwsgi版本,python3.7.2环境中 conda install uwsgi
报错:
Could not solve for environment specs The following packages are incompatible ├─ pin-1 is installable and it requires │ └─ python
3.7. , which can be installed; └─ uwsgi is not installable because there are no viable options
├─ uwsgi 2.0.21 would require
│ └─ python >=3.10,< 3.11.0a0 , which conflicts with any installable versions previously reported;
├─ uwsgi 2.0.21 would require
│ └─ python >=3.11,< 3.12.0a0 , which conflicts with any installable versions previously reported;
├─ uwsgi 2.0.21 would require
│ └─ python >=3.8,< 3.9.0a0 , which conflicts with any installable versions previously reported;
└─ uwsgi 2.0.21 would require
└─ python >=3.9,< 3.10.0a0 , which conflicts with any installable versions previously reported.*
激活环境:
source activate
conda activate test
只使用
conda activate test
会报错CondaError: Run ‘conda init’ before ‘conda activate’
conda init
无法解决
参考:Run ‘conda init’ before 'conda activate’报错 - 知乎 (zhihu.com)
安装django conda install django
安装uwsgi conda install uwsgi
关闭环境再次启动,激活conda环境时报错 bash: activate: No such file or directory
可以输入以下指令解决
source /etc/profile
source activate
conda activate test
6.将django项目复制到容器中
可以先利用Xftp将项目传输到服务器的/tmp目录下,然后执行docker cp /tmp/proFile test:/home
将名为proFile的文件复制到test容器的/home目录中
7.编写uwsgi启动配置文件
在django项目目录下(manage.py同级目录)新建配置文件uwsgi.ini,内容如下:
[uwsgi]
http= 0.0.0.0:8080 #端口号填写docker容器的映射端口
chdir = /home/test #项目所在目录(manage.py)的绝对路径
wsgi-file = test/wsgi.py #wsgi.py文件相对于manage.py的相对路径
processes = 1
threads = 4
为uwsgi建立软连接
执行 where is uwsgi
确定uwsgi的绝对路径
建立软连接 ln -s uwsgi绝对路径 /usr/bin/uwsgi
启动uwsgi
cd到uwsgi.ini文件所在目录
运行 uwsgi --ini uwsgi.ini
检查uwsgi是否成功启动
ps -ef|grep uwsgi
若显示以下内容,则uwsgi启动成功
root 47 1 4 09:38 ? 00:00:00 uwsgi --ini uwsgi.ini
root 48 47 0 09:38 ? 00:00:00 uwsgi --ini uwsgi.ini
root 49 47 0 09:38 ? 00:00:00 uwsgi --ini uwsgi.ini
root 53 47 0 09:38 ? 00:00:00 uwsgi --ini uwsgi.ini
root 54 47 0 09:38 ? 00:00:00 uwsgi --ini uwsgi.ini
root 65 18 0 09:38 pts/1 00:00:00 grep --color=auto uwsgi
这时候项目应该已经运行起来了,可以浏览器访问 http://服务器ip地址:服务器映射docker端口号 检验一下
出现这样的页面就是运行成功了。
参考:
基于docker部署nginx+uwsgi+django_docker django-CSDN博客
docker容器内uwsgi及nginx服务部署_docker uwsgi nginx 开机自启动-CSDN博客
查看端口占用情况 netstat -lnp|grep 8080
杀掉占用某个端口的进程 fuser -k 8080/tcp