blog 二次开发随记 - 阶段1 - 使用 Docker 配置环境


2020/02/28

  • docker 下的 ubuntu 非常的精简,来 vim 都没有,还得 apt-get 安装下载,但是国内使用 apt-get 贼慢,需要修改源,但是修改源我起码得有个编辑器吧,不能用 vim 的情况下,只能考虑使用 echo,或通过 docker 命令复制进去,超级麻烦,我搞了几次,搞到一半都因为太繁琐而放弃了,真的,我就是想重新开发一下blog,配置个环境搞得这么麻烦???

  • docker 下的 centos 相对方便一点,首先他有 vi,而且 yum 的下载,在国内也还可以。

  • centos yum 源配置方法 https://www.cnblogs.com/handongyu/p/10272190.html

  • centos 直接安装 python 有些麻烦,下载清华上的 anaconda 镜像 https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/

  • 安装 anaconda 进入相应目录,然后 bash XXX.sh 即可,这块有个坑,就是当前纯净的 centos 上可能没有 bzip2,安装即可,具体可参考下文:https://blog.csdn.net/mysteryflower/article/details/93064195

  • 安装完毕后,需要重启一下 terminal,其实就是重新加载一下 .bashrc,exit出容器,再进入,终于成功了!

  • 介于我对现在这个容器表示很满意,我决定将其导出,以备后用,执行如下命令即可 docker export {container_id} > centos8_anaconda4.40.tar 注,容器导出的速度,挺慢的,得等好一会儿,导出文件默认在用户根目录下

  • pip 版本略低,更新一下版本,然后切换一下 pip 源

  • 没有 git,安装一下 git, yum install -y git —— 注:yum install -y 这里的 -y 为安装过程中全部选择 yes 的意思。

  • 创建 SSH_KEY,以便于在 github 上 pull 项目, ssh-keygen -t rsa -C "youremail@example.com",一路 yes,生成的秘钥默认在 ~/.ssh/ 目录下,生成后将公钥添加到 github 账户下,这就略过了。

  • 从 github 上拉取文件到本地。

  • 由于需要上传一些文件到容器内,可以使用 docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH,例如:docker cp requirements.txt 40fe77fe6d6b:/home/blogproject/ 这里的 requirements.txt 是在宿主机当前目录下的

  • pip install -r requirements.txt 安装依赖文件

  • pip 安装 django-haystack==2.8.1 时遇到一个bug,使用 pip install -U setuptools 解决。

  • 由于我复制的项目文件,没有初始化数据库,所以还需要做一下数据库的初始化&迁移。 ``` # 1. 创建更改的文件 python manage.py makemigrations

2. 将生成的py文件应用到数据库

python manage.py migrate

- 开始运行吧~ ```python manage.py runserver```,但是不行,还需要进行端口映射,然后就发现很坑,这个端口映射,建议是在容器初始化的时候做,怎么破?—— 没办法,用 docker commit 吧

- 注,docker centos 上没有 ifconfig ,```yum install -y net-tools.x86_64``` 解决,这块似乎可以使用 yum search ifconfig,来查找这个命令源于那个包,很方便。

- docker commit :从容器创建一个新的镜像。 ```docker commit -m "anaconda4.4.0_django_blogproject" 40fe77fe6d6b blogproject:v0.0.1```,导出后可以看到,docker image 增加了一个。

- 加上端口映射,重新 run 起容器。```docker run -p 8000:8000 -it xxxx /bib/bash

-然后进入容器后,再启用 django 本地服务,特别注意的是,命令 python manage.py runserver 默认监听为本地 127.0.0.1:8000,所以即使通过端口映射出去,外面也无法访问,必须特别指定监听端口为 python manage.py runserver 0.0.0.0:8000,监听所有的地址请求

  • over~第一阶段完成,我们的原始项目,终于正常的 run 起来了!!