Django|把我的网站部署到容器中---解决了我每次迁移网站的痛点


文章目录

  • 把我的网站部署到容器中---解决了我每次迁移网站的痛点
    • 1.前言or需求
    • 2.框架构思
      • 2.1三容器思想
      • 2.2单容器思想
    • 3.容器制作---环境准备
    • 4.做好的容器打包为镜像
    • 整理成DockerFile
    • 附录

把我的网站部署到容器中—解决了我每次迁移网站的痛点 1.前言or需求
究极根本还是money不足,导致我经常换各家服务器以参与新用户优惠。首年服务器价格还是很实惠的,但这就需要我不断的迁移网站。因为网站依赖的环境和部署很繁琐,每次迁移都是心力交瘁,痛并难受着!还好,现在我学习了docker和kubernetes这些容器虚拟化技术。这就计划把网站容器化,以保持环境一致性和持久化。下次在进行网站迁移时直接docker pull 我的镜像,然后启动容器即可。妈妈再也不用担心我熬夜写bug啦!
Django|把我的网站部署到容器中---解决了我每次迁移网站的痛点
文章图片

2.框架构思
最好的选择是以k8s的pod形式运行,然后做service暴露,这样达到外部访问的目的。But,money!k8s少说三台2c4g服务器,果断放弃这种方案。
现在就只有docker可以利用了,还好一台服务器可以搞定。
你可能需要:
阿里云服务器选购优惠
原创 Docker&K8s—Docker的安装、部署、镜像管理、容器操作、Dockerfile
原创 Docker&K8s—跟我一步步部署K8s(二进制安装部署)
原创 三台ECS使用kubeadm快速部署最新版本K8sv1.21.3
原创 利用阿里云ECS部署自己的私有harbor镜像仓库
2.1三容器思想
mysql 和 redis各位一个容器,在k8s集群中最好这样做,但是我用的docker,所以使用了第二种方法,见下文。
Django|把我的网站部署到容器中---解决了我每次迁移网站的痛点
文章图片

2.2单容器思想
也就是定制一个Centos镜像,满足所有依赖环境。后边采用此种思想实现。后边发现所有东西集合在一个容器里行成的镜像太大,3个多G。。。。But,money!将就用吧先。。。。
Django|把我的网站部署到容器中---解决了我每次迁移网站的痛点
文章图片

3.容器制作—环境准备
  1. 安装docker
    参考我之前的文章:原创 Docker&K8s—Docker的安装、部署、镜像管理、容器操作、Dockerfile
  2. docker镜像
    docker pull centos:centos7

    镜像拉去后进入容器:
    # 运行容器 特权 端口映射 后台 docker run -dti --name bt -p80:80 -p8888:8888 --privileged=true dachongming/django-web:bt /usr/sbin/init# 进入容器 docker exec -ti 7c5784e1f1f7 /bin/bash # 关闭防火墙 [root@7c5784e1f1f7 /]# systemctl stop firewalld

  3. 安装python3
    yum install python3 -y

  4. 安装uwsgi
    直接pip3安装会报缺少依赖错误,先安装依赖
    yum install gcc yum install python3-devel.x86_64

    此时,pip3安装成功
    pip3 install uwsgi

  5. 安装nginx
    # 先安装依赖epel-release 不然会报:No package nginx available yum install epel-release# 此时安装nginx yum install nginx

  6. 安装宝塔面板
    # 安装宝塔 中间按提示输入yes即可 [root@7c5784e1f1f7 /]# yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh

    服务器一定先端口放行
    此时浏览器访问:服务器公网IP:8888/1dea6e26
  7. 安装mysql、安装redis
    登陆宝塔后,搜索安装mysql和redis即可
    Django|把我的网站部署到容器中---解决了我每次迁移网站的痛点
    文章图片

4.做好的容器打包为镜像 持久保存:
docker commit -p CONTAINER ID docker.io/dachongming/alpine:v3.14.0_with_1.txt
docker commit -p 7c5784e1f1f7 docker.io/dachongming/bloglee:v1 docker push docker.io/dachongming/bloglee:v1

推送dockerhub比较慢,可以把镜像推送到我们的私有仓库:
docker commit -p 7c5784e1f1f7 harbor.liboer.top/public/bloglee:v1 docker push harbor.liboer.top/public/bloglee:v1

你可能需要:
阿里云服务器选购优惠
原创 利用阿里云ECS部署自己的私有harbor镜像仓库
整理成DockerFile
FROM dachongming/bloglee:v1MAINTAINER libo_sober@163.comCOPY BlogLee /app/WORKDIR /app/BlogLeeRUN source ./bloglee.sql &&\ pips install ./requirements.txt &&\ uwsgi --ini ./uwsgi.ini nginx# 最后启动容器 docker run -dti --name bloglee -p80:80 -p8888:8888 -v/mydata/BlogLee:/app/ --privileged=true dachongming/bloglee:v1

【Django|把我的网站部署到容器中---解决了我每次迁移网站的痛点】后边有些还需要测试,我的服务器太卡啦,运行几个容器就宕机了。。。找时间在虚拟机上测一下吧
附录
查看运行容器 docker ps查看所有容器 docker ps -a进入容器 其中字符串为容器ID:docker exec -it d27bd3008ad9 /bin/bash停用全部运行中的容器: docker stop $(docker ps -q)删除全部容器: docker rm $(docker ps -aq)一条命令实现停用并删除容器: docker stop $(docker ps -q) & docker rm $(docker ps -aq)

    推荐阅读