提示:学习笔记
前言
一、CentOS7安装Docker指定版本
示例:
1、安装依赖
yum install -y yum-utils device-mapper-persistent-data lvm2
2、添加docker软件源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
只保留稳定版本
yum-config-manager --disable docker-ce-edge
yum-config-manager --disable docker-ce-test
3、更新包索引
yum makecache fast
4、查看仓库中所有docker版本
yum list docker-ce --showduplicates|sort -r
5、 安装指定版本
yum -y install docker-ce-25.0.4-1
6、启动
systemctl start docker # 启动docker
systemctl enable docker # 开机自启
systemctl status docker # 查看启动状态
启动状态查看版本
7. 注意:若先更新python2–>python3,需要修改以下文件
问题原因
因为升级python后新建了软连接指向了新版本,除非同时升级yum不然无法使用。需要手动更改报错文件指向python2后即可解决
解决方法
找出python2 whereis python
vim /usr/libexec/urlgrabber-ext-down
/usr/bin/python ---------> /usr/bin/python2.7
linux 系统中存在多版本的python. yum 依赖 python 2, 而个人使用 python 3 导致
vim /usr/bin/yum-config-manager
/usr/bin/python ---------> /usr/bin/python2
二、Docker部署项目流程
1.DockerFile文件(无后缀)
FROM python:3.9
# 设置工作目录
WORKDIR /DjangoProject
# 复制项目文件到镜像中
COPY . /DjangoProject
# 安装项目依赖 --no-cache-dir 不使用缓存
RUN pip install --no-cache-dir -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
# RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
# 生成数据库
RUN python manage.py makemigrations && python manage.py migrate
# 对外暴露的端口号
EXPOSE 8000
# 使用 Gunicorn 运行 Django 项目
CMD ["gunicorn", "-c", "/DjangoProject/DjangoProject/gunicorn-config.py", "DjangoProject.wsgi"]
#CMD ["gunicorn", "--bind", "0.0.0.0:8000", "DjangoProject.wsgi"]
注意点1
Docker 镜像的 CentOS 是最小化的,这意味着它只包括运行容器所必需的最小组件。
如果需要一个包含更多预装工具和库的 CentOS 容器环境,可以基于已有的最小化 CentOS 镜像创建一个新的 Dockerfile,并在其中安装所需的额外软件包
# 使用官方最小化 CentOS 镜像
FROM centos:latest
# 安装常用工具
RUN yum -y update && yum clean all && \
yum -y install wget curl vim && \
yum clean all
2.gunicorn-config.py文件
项目根目录下创建logs文件夹
from multiprocessing import cpu_count
bind = ["0.0.0.0:8000"]
# daemon = True
pidfile = 'logs/gunicorn.pid'
workers = cpu_count() * 2
worker_class = "gevent"
worker_connections = 65535
keepalive = 600
timeout = 600
graceful_timeout = 600
forwarded_allow_ips = '*'
capture_output = True
loglevel = 'info'
errorlog = 'logs/error.log'
accesslog = 'logs/access.log'
注意点1(daemon = True)
Docker run 之后没反应 什么都没有 日志都没有
使用了daemon = True参数,这个参数是将Guncorn放到后台运行,所以消失了并且没有任何输出。
注意点2(Gunicorn的启动参数不生效)
Gunicorn的默认配置文件名称是gunicorn.conf.py,如果这里面写了内容,直接用参数运行是怎么都不会生效的。
3.项目启动
项目启动之前检查项目数据库ip是否为当前服务器ip
创建镜像
在项目更目录下运行,镜像名称不可大写
docker build -t djangoproject:v1 .
创建容器
docker run -itd --name 容器名 --restart=always -p 外部端口:容器内部端口 -v 外部挂载文件路径:容器内的挂载文件路径 镜像名 启动容器
-d :后台
-it:详细信息
–name:给容器取名
–restart=always 自启
-p:暴露端口
-v:挂载文件,持久化
# 项目目录下使用. 不在项目目录下时使用绝对路径
docker run -itd --name technology -p 9877:9877 --restart=always -v .:/DjangoProject djangoproject:v1
docker start 容器id 启动容器
docker stop 容器id 停止容器
docker restart 容器id 重新启动
docker rm -f 容器id 强制删除容器
docker rmi 镜像名 删除镜像
docker exec -it 容器id bash 进入容器的工作目录
docker exec -it 容器id 执行命令 进入容器执行命令
三、Docker安装指定版本的mariadb
1.查询mariadb
docker search mariadb
2.拉取mariadb数据库
docker pull mariadb:10.6.15
3.启动数据库
启动mariadb容器(设置密码,文件挂载)
docker run --name mariadb -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -v /data/docker/mariadb:/var/lib/maradb -d mariadb:10.6.15
4.开启远程访问
进入数据库
docker exec -it 容器id bash
设置某IP地址的某用户通过密码远程访问某库.表
grant all privileges on 库名.表名 to '用户名'@'IP地址' identified by '密码' with grant option;
当前mariadb的所有库
grant all privileges on *.* to 'root'@'%' identified by '123' with grant option;
立即生效
flush privileges;
其他方法:
1.更改 mysql 数据库里的 user 表里的 host 项,从localhost"改成%实现用户远程登录
select host,user from user where user=‘root’;
update user set host = ‘%’ where user=‘root’ and host=‘localhost’;
select host, user from user where user=‘root’;
.
2.先创建远程用户,再授权
create user ‘root’@‘%’ identified by ‘123’;
grant all privileges on . to ‘root’@‘%’ with grant option;
flush privileges;