使用docker-compose编排django、mysql实战
背景:
本萌最近在部署自己开发的项目的时候发现同一套代码上传到服务器上后,部分功能莫名其妙的有点问题,服务器的各项配置都没有做过变动,所以想把项目转战到docker。
奈何刚接触docker,很多地方都不懂,在这个坑里面折腾了一两天。决定对本次实践做个过程总结希望少点人走弯路。
系统环境:Centos7
一、docker安装
1、以root用户登录(使用sudo命令也行,本人懒,不想敲那么多字符),删除旧版本的docker;
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
2、如果以前安装过docker的,需要先删除以前的docker文件;
rm -rfv /var/lib/docker/
3、安装docker-ce(最新的系统可以不需要执行,本人为了保险起见执行了 ^0^);
yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
4、下载docker-ce的yum源配置文件;
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
5、安装docker-ce;
yum install docker-ce
6、设置docker-ce随系统启动;
systemctl enable docker
7、启动docker;
systemctl start docker
8、验证docker是否安装成功;
docker -v
检查结果如下:

9、安装docker-compose
curl -L https://github.com/docker/compose/releases/download/1.20.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
二、编写项目dockerfile文件
在动手写之前,先看下项目结构:

编写好的Dockerfile文件如下:
FROM python:3.6.
ENV PYTHONUMBUFFERED
RUN mkdir /leartd
RUN mkdir /leartd/dockermysql
WORKDIR /leartd
ADD requirements.txt /leartd/
RUN pip install -r requirements.txt
ADD . /leartd/
三、编写docker-compose.yml文件
version: ''
services:
db:
image: mysql
restart: always
command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --init-connect='SET NAMES utf8mb4;' --innodb-flush-log-at-trx-commit=
expose:
- ""
volumes:
- ./dockermysql:/var/lib/mysql:rw
environment:
- MYSQL_DATABASE=demodb
- MYSQL_ROOT_PASSWORD=123456
web:
build: .
command: python manage.py runserver 0.0.0.0: --insecure
volumes:
- .:/leartd
ports:
- "8080:9000"
depends_on:
- db
command:执行的命令内容是为了给mysql指定字符编码,不指定时,默认使用的是lanti1编码,在使用中文字符的时候会乱码
四、修改项目settings.py文件配置
修改地方有两个,
1、
ALLOWED_HOSTS = ['*', ]
2、
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'demodb',
'USER': 'root',
'PASSWORD': '123456',
'HOST': 'db',
}
}
这里的NAME就是docker-compose.yml文件中的MYSQL_DATABASE,PASSWORD为docker-compose.yml文件中的MYSQL_ROOT_PASSWORD,HOST为docker-compose.yml文件第三行的内容
五、编译项目
docker-compose build
六、启动项目
docker-compose up
或
docker-compose up -d(后台运行)
在浏览器中输入localhost:8080就可以成功访问项目了
七、附录
1、查看当前docker容器中已有的image
docker image ls
2、查看所有的容器
docker ps -a
3、批量停止在运行中的容器
docker ps -a | grep 'Up' | awk '{print $1}'| xargs docker container stop
4、批量删除Exited状态的容器
docker ps -a | grep 'Exited' | awk '{print $1}'| xargs docker container rm
5、批量删除name为none的image
docker image ls | grep none | awk '{print $3}' | xargs docker image rm
八、未完全解决的问题:
通过docker-compose up运行项目后,首次需要去web容器里面手动执行makemigrations、migrate、createsuperuser命令。
暂时不知道怎么处理,如有大神路过还望指点一二
九、需要后续处理的问题:
搭建私有registry,把镜像提交到私有的registry。
使用docker-compose编排django、mysql实战的更多相关文章
- 使用Docker compose编排Laravel应用
前言 Laravel官方开发环境推荐的是Homestead(其实就是一个封装好的Vagrant box),我感觉这个比较重,于是自己用Docker compose编排了一套开发环境,在这里分享下. 环 ...
- Docker(二十六)-Docker Compose编排容器
1. 前言 Docker Compose 是 Docker 容器进行编排的工具,定义和运行多容器的应用,可以一条命令启动多个容器. 使用Compose 基本上分为三步: Dockerfile 定义应用 ...
- Docker系列之(五):使用Docker Compose编排容器
1. 前言 Docker Compose 是 Docker 容器进行编排的工具,定义和运行多容器的应用,可以一条命令启动多个容器. 使用Compose 基本上分为三步: Dockerfile 定义应用 ...
- docker compose 编排
Compose是Docker的服务编排工具,主要用来构建基于Docker的复杂应用,Compose 通过一个配置文件来管理多个Docker容器,非常适合组合使用多个容器进行开发的场景. 说明:Comp ...
- Docker Compose编排工具部署lnmp实践及理论(详细)
目录 一.理论概述 编排 部署 Compose原理 二.使用docker compose 部署lnmp 三.测试 四.总结 一.理论概述 Docker Compose是一个定义及运行多个Docker容 ...
- 基于Docker Compose构建的MySQL MHA集群
Docker MySQL MHA 基于Docker 1.13.1之上构建的MySQL MHA Docker Compose Project 可快速启动GTID模式下的MasterHA集群, 主用于My ...
- 使用Docker Compose编排Spring Cloud微服务
文章目录 微服务构建实例 简化Compose的编写 编排高可用的Eureka Server 编排高可用Spring Cloud微服务集群及动态伸缩 微服务项目名称 项目微服务中的角色 microser ...
- 使用docker compose编排容器
一.安装docker compose 二进制包安装 1.安装 Docker Compose 从 官方 GitHub Release 处直接下载编译好的二进制文件即可 # curl -L https:/ ...
- 使用Docker Compose编排微服务
一般微服务架构会包含若干个微服务,而每个微服务可以有多个实例,如果每个微服务都有手动启停,那么效率就很低.维护量比较大. 所以我们可以使用Docker Compose来轻松.高效地管理容器. 一.安装 ...
- asp.net core容器&mysql容器network互联 & docker compose方式编排启动多个容器
文章简介 asp.net core webapi容器与Mysql容器互联(network方式) docker compose方式编排启动多个容器 asp.net core webapi容器与Mysql ...
随机推荐
- django学习笔记(2)
Part 2: The admin site ====> Creating an admin user$ python manage.py createsuperuser Username: ...
- matplotlib绑定到PyQt5(有菜单)
稍微复杂地实现matplotlib绑定到PyQt5(有菜单) [知识点] import matplotlib matplotlib.use("Qt5Agg") [效果图] [源代码 ...
- PHP 注释规范
注释在写代码的过程中非常重要,好的注释能让你的代码读起来更轻松,在写代码的时候一定要注意注释的规范. php里面常见的几种注释方式: 1.文件头的注释,介绍文件名,功能以及作者版本号等信息 /** * ...
- CodeForces 593D Happy Tree Party [LCA+并查集]
题意:给一棵树,每条边有一个权值,给两种操作,第一种是询问y向下整除从a到b的最短路径中每条边的权值后y的值,第二种是改变某条边的权值. 思路:y的最大值为1e18,最多除大于等于2的数不超过60次即 ...
- P4171 [JSOI2010]满汉全席
简要的学了一下2-sat,然而不会输出方案. 就是个sb模板题啦 // luogu-judger-enable-o2 #include<bits/stdc++.h> #define il ...
- I NETWORK [thread1] waiting for connections on port 27017
小技巧:mongodb安装完之后可以将安装目录的/bin添加到系统环境变量 一.问题 windows上安装完mongodb之后,设置完dbpath,一直卡在这里 二.解决办法 别关这个终端,再开个终端 ...
- SSIS 发送邮件
在SSIS中Send Mail的方法主要有三种,使用Send Mail Task,使用Script Task和使用存储过程msdb.dbo.sp_send_dbmail. 一,使用Send Mail ...
- 聊聊前段插件之Datatables
在web开发过程中表格数据展示是一个很常见的功能,而且用户对其要求也比较高,性能.易用性等.今天我推荐一款利器给大家——Datatables:Datatables中文网. 一.介绍 Datatable ...
- WebGL2系列之实例数组(Instanced Arrays)
实例化数组 实例化是一种只调用一次渲染函数却能绘制出很多物体的技术,它节省渲染一个物体时从CPU到GPU的通信时间.实例数组是这样的一个对象,使用它,可以把原来的的uniform变量转换成attrib ...
- LeetCode 刷题笔记 155. 最小栈(Min Stack)
tag: 栈(stack) 题目描述 设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈. push(x) -- 将元素 x 推入栈中. pop() -- 删除栈顶的元素 ...