<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
映象加速源
映象加速器 | 映象加速器地址 |
---|---|
Docker 中國官方映象 | https://registry.docker-cn.com |
DaoCloud 映象站 | http://f1361db2.m.daocloud.io |
Azure 中國映象 | https://dockerhub.azk8s.cn |
科大映象站 | https://docker.mirrors.ustc.edu.cn |
阿里雲(需要註冊,建議) | https://<your_code>.mirror.aliyuncs.com |
七牛雲 | https://reg-mirror.qiniu.com |
網易雲 | https://hub-mirror.c.163.com |
騰訊雲 | https://mirror.ccs.tencentyun.com |
建立.dockignore
檔案
.git settings/local.py **/__pycache__
1.使用pip freeze > requirements.txt
命令打包好專案的依賴包列表(這種方式只適合在虛擬環境中匯出虛擬環境中的包,如果不是在虛擬環境下就會匯出全域性環境的python的環境包)
2.要想在全域性環境中匯出我們專案的依賴包,可以利用python包pipreqs
# 進入到專案所在目錄,在執行下面的命令 $> pip install pipreqs $> pipreqs . --encoding=utf8 --force # 「.」 指的是將匯出依賴包的檔案放在當前目錄下 # 「--encoding=utf8」 指的是存放檔案的編碼為utf-8,否則會報錯 # 「--force」 --force 強制執行,當 生成目錄下的requirements.txt存在時強子覆蓋
3.建立dockfile檔案
# 指定基礎映象 FROM python:3.7 #ENV server.params= # updata太慢 設定映象源 RUN sed -i s@/deb.debian.org/@/mirrors.aliyun.com/@g /etc/apt/sources.list && apt-get clean && apt-get update && apt-get install python3-dev default-libmysqlclient-dev -y # 建立 code 資料夾並將其設定為工作目錄 RUN mkdir /code WORKDIR /code # 將 requirements.txt 複製到容器的 recruitment 目錄 ADD requirements.txt /code/ # 更新 pip 並 安裝依賴庫 RUN pip install pip -U && pip install -r requirements.txt # COPY 是不解壓的 ADD . /code/ # CMD [ "/bin/sh", "/code/start.local.bat" ]
FROM
python:3.7 指令從倉庫拉取一個包含 python 3.7 的 Linux 作業系統環境(Linux 版本為 Debian)。RUN
和 WORKDIR
指令都是針對容器的,功能是在容器裡建立目錄、並將其設定為工作目錄。注意宿主機是沒有這個目錄的。ADD
指令出現了兩次。ADD requirements.txt /code/
意思是將宿主機當前目錄(即 Dockerfile
所在目錄)的 requirements.txt
檔案複製到容器的 /code
目錄中。ADD . /code/
意思是把當前目錄所有內容複製到容器 /code/
目錄,注意中間那個點。version: "3" services: # 設定應用 容器 app: restart: always build: . # todo 根據當前專案 dockerfile生成,相當於 docker build -t="ouruser/sinatra:v2" . # bash shell視窗 -c命令列 預設遷移 和 執行 command: bash -c "python manage.py runserver 0.0.0.0:8080" # bash -c "python manage.py runserver 0.0.0.0:8080" volumes: - .:/code ports: - "8080:8080" depends_on: - db networks: - db_network # 設定資料庫 容器 db: image: mysql:8 # 版本一定要對應! volumes: - "./mysql/data:/var/lib/mysql" # 設定timestamp 可為 null # 設定字元集 (不是utf8會報錯 # collation 這是排序規則 # - "./mysql/conf/my.cnf:/etc/mysql/my.cnf" command: "mysqld --user=root --explicit_defaults_for_timestamp --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci" # - -character-set-server=utf8mb4 # 設定預設位元組 # - -collation-server=utf8mb4_general_ci # 設定排序 # - -explicit_defaults_for_timestamp=true # 設定可為 null # --default-authentication-plugin=mysql_native_password # 使用 5.7 版本的密碼驗證 # "mysqld --user=root --explicit_defaults_for_timestamp --character-set-server=utf8mb4" ports: - "3307:3306" restart: always environment: - MYSQL_ROOT_PASSWORD=123456 # 一定要設定 - MYSQL_DATABASE=django_recruitment networks: - db_network # 設定網路 networks: db_network: driver: bridge
version
代表 docker-compose.yml 的版本,目前最新版為 3,不需要改動它。從整體上看,我們定義了二個容器,分別是app
、db
,容器之間通過定義的埠進行通訊。定義了網路db_network
,只有處在同一網路下的容器才能夠互相通訊。不同網路之間是隔離的,即便採用同樣的埠,也無法通訊。
定義了一個名叫 app 的容器。後面的內容都是 app 容器的相關設定:
restart
:除正常工作外,容器會在任何時候重啟,比如遭遇 bug、程序崩潰、docker 重啟等情況。build
:指定一個包含Dockerfile
的路徑,並通過此Dockerfile
來構建容器映象。注意那個 “.” ,代表當前目錄。command
:容器執行時需要執行的命令。這裡就是我們很熟悉的執行開發伺服器了。volumes
:卷,這是個很重要的概念。前面說過容器是和宿主機完全隔離的,但是有些時候又需要將其連通;比如我們開發的 Django 專案程式碼常常會更新,並且更新時還依賴如 Git 之類的程式,在容器裡操作就顯得不太方便。所以就有卷,它定義了宿主機和容器之間的對映:“.” 表示宿主機的當前目錄,“:” 為分隔符,“/code” 表示容器中的目錄。即宿主機當前目錄和容器的 /code 目錄是連通的,宿主機當前目錄的 Django 程式碼更新時,容器中的 /code 目錄中的程式碼也相應的更新了。這有點兒像是在容器上打了一個洞,某種程度上也是實用性和隔離性的一種妥協。嚴格意義上講,這裡用到的 .:/code 並不是卷,而是叫掛載,它兩是有區別的,只不過 docker-compose 允許將掛載寫到卷的設定中。
expose
:暴露容器的8000埠供其他容器存取,宿主機和外界無法存取networks
:能夠存取db_network
depends_on
: 意思是此容器需要等待 db 容器啟動完畢才能夠啟動。分析一下 db 容器:
image
:從倉庫拉取 MySQL 5.7 。volumes
:這裡出現的 static-volume 叫卷。它的使用方式像這樣:static-volume:/code/collected_static ,冒號後面還是容器內的目錄,但冒號前的卻不是宿主機目錄、僅僅是卷的名稱而已。從本質上講,資料卷也是實現了宿主機和容器的目錄對映,但是資料卷是由 Docker
進行管理的,你甚至都不需要知道資料卷儲存在宿主機的具體位置。相比掛載,資料卷的優點是由於是 Docker
統一管理的,不存在由於許可權不夠引發的掛載問題,也不需要在不同伺服器指定不同的路徑;缺點是它不太適合單組態檔的對映。和掛載一樣,資料卷的生命週期脫離了容器,刪除容器之後卷還是存在的。下次構建映象時,指定卷的名稱就可以繼續使用了。
ports
:MySQL 預設通訊埠為 3306 。environment
:定義容器的環境變數,設定了 MySQL 的 root 使用者的密碼、資料庫的名稱。network
:只能夠存取db_network。新增db容器後記得的修改Django裡的資料庫設定。我們在開發專案中,往往是使用
django
自帶的sqlite
進行快速開發測試,後面部署再使用mysql,這裡也是一樣的,個人建議部署到伺服器可以先使用帶過去的sqlite
進行測試(且此時資料庫是有資料的), 進行真正上線則使用mysql
(沒有資料)
ALLOWED_HOSTS = [ '*'] DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), } } # 部署用資料庫設定 # DATABASES = { # 'default': { # 'ENGINE': 'django.db.backends.mysql', # 'NAME': 'django_recruitment', # 'USER': 'root', # 'PASSWORD': '123456', # 'HOST': 'db', # 'HOST': '127.0.0.1', # 'PORT': '3306', # 'OPTIONS': {'charset': 'utf8mb4'}, # } # } # todo 注意:這裡使用的是db別名,docker會自動解析成ip 部署!
由於我們所設定的資料是空的,此時我們需要生成表和資料遷移
5.1 生成表
進入到sh
命令視窗
bash python manage.py migrate
5.2 資料遷移
1.django先連線回原來的資料庫,
python manage.py dumpdata > data.json
2.匯出資料,並修改檔案編碼! 不然後面 loaddata
會報錯!
3.進入mysql
終端,設定忽略外來鍵 和 刪除 auth_permission
和 django_content_type
表 ( 由於在資料遷移過程中這兩個表資料預設生成)
set foreign_key_checks=0; truncate table django_content_type; truncate table auth_permission; set foreign_key_checks=1;
4.回到專案容器終端
進入到sh
命令視窗
bash python manage.py loaddata data.json # mysql版本一定要一樣 不然報錯
部署命令
執行命令docker-compose build
構造映象,再使用docker-compose up
即可啟用服務。
下面附上一下經常用到的命令:
到此這篇關於雲原生Docker部署Django和mysql專案的文章就介紹到這了,更多相關Docker部署Django mysql內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45