構築django+mariadb环境的时候所做的备忘录,使用docker-compose
我想做的事情
我想要使用docker-compose构建Django容器和MariaDB容器,并创建一个环境,以便从Django容器访问MariaDB容器的数据库。由于遇到一些麻烦,所以我将步骤记录下来作为备忘录。
环境
我正在使用树莓派操作系统(32位)进行尝试。
pi@master:~ $ uname -a
Linux master 5.10.103-v7l+ #1529 SMP Tue Mar 8 12:24:00 GMT 2022 armv7l GNU/Linux
pi@master:~ $ docker --version
Docker version 20.10.17, build 100c701
pi@master:~ $ docker-compose --version
docker-compose version 1.21.0, build unknown
各容器的IP地址和端口转发设置如下所示。关于docker-compose的其他详细设置将不进行说明。
-
- djangoコンテナ
IP : 172.100.0.2 (172.100.0.0/24)
ポート : 8888:8888
mariadbコンテナ
IP : 172.100.0.4 (172.100.0.0/24)
ポート : 3306:3306
MariaDB的配置内容
以下是在MariaDB容器中执行的配置内容。
使Mariadb可以从外部进行连接
编辑/etc/mysql/mariadb.conf.d/50-server.cnf,在bind-address设置中加入注释。
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address = 127.0.0.1 # ← この行をコメントアウトする
重新启动服务。
service mysql restart
如果运行netstat -atn命令,本地地址显示为tcp6 :::3306,则表示正常。
创建外部连接用户并设置权限
登录到Mariadb并执行以下SQL。
/* DB作成 */
create database django;
/* ユーザ作成と権限設定 */
create user 'django'@'172.100.0.%' identified by 'password';
grant all on django.* to 'django'@'172.100.0.%';
/* ユーザのパスワード設定 */
set password for 'django'@'172.100.0.%' = password('password'); -- 例:パスワードを"password"に設定
/* 確認 */
select user, host from mysql.user; -- django | 172.100.0.% が出ればOK
Django设置内容可以进行如下释义:
这是在Django容器中执行的配置内容。
修改 settings.py 文件
将DATABASES的设置更改为mysql。
因为在docker-compose中将hostname设置为mariadb,所以将HOST设置为主机名mariadb。
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'django',
'USER': 'django',
'PASSWORD': 'password',
'HOST': 'mariadb',
'PORT': '3306',
'OPTIONS': {
'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",
},
}
}
在这个设置下,django容器和mariadb容器之间应该可以通信。
如果能在django容器内执行”python manage.py dbshell”并连接到mariadb容器的数据库,那就算成功了。
从主机访问在Django容器中启动的应用程序。
假设存在一个Windows的浏览器,它与正在运行的Raspberry Pi容器以及django容器之间建立了一种关系。
Windowsのブラウザ → コンテナが起動しているRaspberry Pi
docker-composeで8888ポートをフォワーディングすることで接続できます。
コンテナが起動しているRaspberry Pi → djangoコンテナ
Raspberry Piのホストからdjangoコンテナへのアクセスを許可するよう設定が必要です。
djangoのsettings.pyのALLOWED_HOSTSの項目を修正します。今回は全許可で設定しています。
ALLOWED_HOSTS = ['*']
只需要下面一个选项:
在应用程序启动时,使用python manage.py runserver 0.0.0.0:8888命令,可以将8888端口启动在全主机上,而不是仅限于localhost。
这样,您就可以从Windows访问在Raspberry Pi上运行的容器了。