docker_django_mysql

4 篇文章 0 订阅
3 篇文章 0 订阅

参考 使用Docker部署Django服务
参考 Docker run 命令参数及使用

install docker + docker-compose

sudo apt install docker-ce -y
sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose 
sudo chmod +x /usr/local/bin/docker-compose
docker -v
docker-compose -v
docker version
docker-compose version

Docker run 命令参数

# 说明下参数意义
-i 打开STDIN,用于控制台交互
-t 分配一个伪终端 - 分配tty设备,该可以支持终端登录,默认为false
-d 分离模式: 在后台运行 - 指定容器运行于前台还是后台,默认为false
-p 映射端口:docker内部端口: 端口映射,只有将容器端口映射到外部,外部才能访问
-e 环境变量,指定一些服务内读取的变量,以初始化服务,这里的变量意义从字面上不难理解
--network 指定容器所在网络,需要互相访问的容器记得指定到同一个网络!
--name 容器名,这个名字在同一个容器网络里是可以直接当成域名访问的!

docker exec -it $(docker ps -a|awk '{print $1}') /bin/bash # 实际不能进入,要用 容器id 替换掉 $(docker ps -a|awk '{print $1}')

Docker 命令大全 - www.runoob.com

docker images # 查看已经存在的镜像
docker ps -a  # 查看全部状态的容器 # https://www.runoob.com/docker/docker-ps-command.html
docker ps -a|awk '{print $1}' # 只显示镜像id
# 下面两个同样的效果
docker rm $(docker ps -a -q)                # 删除所有已经停止的容器
docker rm $(docker ps -aq|awk '{print $1}') # 删除所有已经停止的容器

创建专属网络

docker network ls # 查看专属网络
docker network create django_net   # 创建专属网络
docker network inspect django_net  # 查看网络内部信息

docker install images

docker search mysql  # 查看可用版本
docker images        # 查看已经存在的镜像 - 检查是否安装完成

# 拉取 容器
docker pull mysql:8.0.18
docker pull python:3.8

docker 运行容器

参考 Docker 安装 MySQL

 # 运行容器
docker run -itd --name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0.18 # ref runoob

docker run -d -p 3337:3306 --network django_net --name django_mysql -v $PWD/db:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_USER=admin -e MYSQL_PASSWORD=123456  mysql:8.0.18

-e, --env=[]               指定环境变量,容器中可以使用该环境变量
-d, --detach=false         指定容器运行于前台还是后台,默认为false
-p, --publish=[]           指定容器暴露的端口 
-v, --volume=[]            给容器挂载存储卷,挂载到容器的某个目录
--name=""                  指定容器名字,后续可以通过名字进行容器管理,links特性需要使用名字 

# 查看专属网络的容器对应的IP地址
docker network inspect django_net|grep IPv4Address
docker inspect --format '{{ .NetworkSettings.IPAddress }}' 容器id

# 验证 容器内 mysql 是否运行正常
# 1. 进入 容器内部测试
docker exec -it 41708994233e /bin/bash # 实际不能进入,要用 容器id 替换掉 $(docker ps -a|awk '{print $1}')

# 2. 远程登录测试
mysql -h172.18.0.2 -uroot -p123456  -e 'show databases;' # 远程登录测试容器是否运行正常,远端是3306端口


mysql -uroot -P3307 -p123456  -e 'show databases;' # 为什么进不去呢。。。。

查看端口

Linux 查看端口占用情况可以使用 lsof 和 netstat 命令 # https://www.runoob.com/w3cnote/linux-check-port-usage.html

lsof -i:端口号
netstat -tunlp |grep grep 端口号
-t (tcp) 仅显示tcp相关选项
-u (udp)仅显示udp相关选项
-n 拒绝显示别名,能显示数字的全部转化为数字
-l 仅列出在Listen(监听)的服务状态
-p 显示建立相关链接的程序名

使用Dockerfile 部署Django应用

# Dockerfile
# use base python image with python 3.8
FROM python:3.8
RUN echo "这是一个py3.8环境,使用Dockerfile构建一个Django3.8的环境"

# install mysql-client
RUN apt-get update
RUN apt-get install -y mysql-client
 
# 镜像作者
MAINTAINER spider spider@company.com
 
# 设置 python 环境变量
ENV PYTHONUNBUFFERED 1
# env
ENV RUN_MODE=DEPLOY
 
# 创建 my_blog 文件夹
RUN mkdir /my_blog
 
# 将 my_blog 文件夹为工作目录
WORKDIR /my_blog
 
# 将当前目录加入到工作目录中(. 表示当前目录)
ADD . /my_blog

# 利用 pip 安装依赖 (-i 表示指定清华源,默认源下载过慢)  # include django
RUN pip3 install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

#设置环境变量
ENV SPIDER=/my_blog

# RUN server after docker is up
CMD ./start.sh

编写 start.sh 命令脚本 - https://www.cangmangai.cn/archives/docker-django-deployment

# start.sh

#!/bin/sh
# 从第一行到最后一行分别表示:
# 1. 守护进程执行 celery,没有这个需求的小伙伴可以将第一行命令其删除
# 1. 收集静态文件到根目录,
# 2. 生成数据库可执行文件,
# 3. 根据数据库可执行文件来修改数据库
# 4. 启动 django 服务
python manage.py collectstatic --noinput &&
python manage.py makemigrations &&
python manage.py migrate &&
python manage.py runserver 0.0.0.0:8000 &&

在Dockerfile所在目录进行构建

docker build . -t django_web

启动django服务

docker run -d --network django_web --name django_web -p 6060:8000 django_web
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值