docker-compose一键部署django

因为在这段时间里,总是需要为项目更换新的服务器,每次手动配置django环境已经是熟练得不要不要了。尽管已经达到一个相当熟练的状态,整个项目在全新的服务器中部署下来还是需要一两个小时,而且都是重复性的劳动,为了更好地迁移项目,我选择尝试用dockerdocker-compose来创建和启动容器,实现尽可能方便地一键式部署。

在实际的生产中,一个项目需要定义数量总多的docker容器,并且容器之间有着错综复杂的依赖关系,手动创建和配置复杂的容器关系,效率会很低下。docker-compose可以定义容器集群编排,可以在不同的服务器上一键式复用配置。

1. ubuntu安装docker

ubuntu中自带了低版本的docker,需要先卸载旧版本,再安装最新的版本

# 卸载旧版本
apt-get remove docker docker-engine docker.io containerd runc

# 安装依赖
apt update
apt-get install ca-certificates curl gnupg lsb-release

# 安装GPG证书
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -

# 写入软件源
add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"

# 安装新版本
apt-get install docker-ce docker-ce-cli containerd.io

在安装后需要对docker进行换源,使用国内镜像源提高下载速度

vim /etc/docker/daemon.json # 未配置过时,该文件不存在,往其中加入下面内容

# 加入内容
{
    "registry-mirrors": ["https://y0qd3iq.mirror.aliyuncs.com"]
}

# 重启docker,让其生效
systemctl restart docker

最后可以通过下面命令判断是否修改成功

docker info | grep -i Mirrors -A 1

输出结果里有加入的镜像源,即修改成功

image-20220531131838681

2.docker-compose安装
 # 下载docker-compose
 curl -L https://github.com/docker/compose/releases/download/1.17.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
 
 # 增加执行权限
 sudo chmod +x /usr/local/bin/docker-compose
 
 # 查看是否安装成功
 docker-compose --version
3.docker-compose

在我使用的项目中使用django+uwsgi+nginx+mysql,在项目中编排了3个容器:

  • django+uwsgi容器:python后端框架和处理动态请求
  • mysql容器:数据库框架
  • nginx容器:处理静态资源请求

其实整个docker-compose最重要的就是docker-compose.yml核心编排文件,我的编排文件是在这篇大神文章的基础上修改的,你可以根据自己项目里需要的东西数量不同来修改你的编排文件,无论是增加容器还是减少容器。

 # 进入docker-compose.yml所在文件夹,输入以下命令构建镜像
 sudo docker-compose build
 
 # 查看已生成的镜像
 sudo docker images
 
 # 启动容器组服务,这里启动后会一直运行,不能关闭,这里可以推荐nohup或者tmux让命令一直运行
 sudo docker-compose up
 
 # 查看运行中的容器
 sudo docker ps

总的来说,在完成你的编排文件和各个容器所需要的配置文件后,使用docker-compose构建镜像和启动容器组服务,就可以省去一系列的环境配置,单独配置环境还可以出现各种坑,但是在docker中却是不存在,一切都是顺通无阻。

当然更重要的是排错,在写配置文件是会出现一系列的问题,所以最重要的是排错,排错要好好的看日志文件中的报错,下面列举了一些我遇上的错误

出现的错误
ERROR: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/info": dial unix /var/run/docker.sock: connect: permission denied

如果出现上述错误,是因为当前用户不在docker组

sudo groupadd docker     #添加docker用户组
sudo gpasswd -a $USER docker     #将登陆用户加入到docker用户组中
newgrp docker     #更新用户组
docker info    #测试docker命令是否可以使用sudo正常使用

uwsgi启动错误并不会停止进程,但是此时如果你通过端口去访问的话会出现的错误502 Bad Gateway,这个时候需要去日志中查看失败的信息,日志文件在你的配置文件uwsgi.ini中项daemonize就是uwsgi的错误日志路径,而绝大多数的错误都是由于该配置文件内容的错误导致

  • 端口占用
probably another instance of uWSGI is running on the same address (0.0.0.0:8000).
bind(): Address already in use [core/socket.c line 769]

错误原因是重复使用uwsgi uwsgi.ini命令,8000端口已经被占用,使用命令pkill -f uwsgi -9关闭所有uwsgi的进程,在bash中可以通过使用命令ps -ef查看所有进程。

  • module设置错误
--- no python application found, check your startup logs for errors ---

主要是由于配置文件uwsgi.ini中的module设置的问题,module=project_name.wsgi:application这里的project_name一定要和自己项目根目录下包含setting.py的文件夹名字相同,原配置是绝对路径的也需要改为module=project_name.wsgi:application

image-20220406205700389

小结

整篇文章是在大江狗的文章的配置基础上修改实现Docker部署Django由浅入深系列(下): 八步部署Django+Uwsgi+Nginx+MySQL+Redis

学习之路无尽头!!!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值