使用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 ...
随机推荐
- 函数内联inline
C++语言支持函数内联,其目的是为了提高函数的执行效率(速度). 宏的优点 在C程序中,可以用宏代码提高执行效率. 编译预处理器用拷贝宏代码的方式取代函数调用,省去了参数压栈,生成汇编语言的CALL调 ...
- 二维码QR Code简介及其解码实现(zxing-cpp)
二维码QR Code(Quick Response Code)是由Denso公司于1994年9月研制的一种矩阵二维码符号,它具有一维条码及其它二维条码所具有的信息容量大.可靠性高.可表示汉字及图象多种 ...
- C语言编译过程以及gcc编译参数
1.1 C语言编译过程,gcc参数简介 1.1.1 C语言编译过程 一.gcc - o a a.c -o:指定文件输出名字 二.C语言编译的过程: 1.1.1 ...
- java日志框架log4j详细配置及与slf4j使用教程
一.log4j基本用法 首先,配置log4j的jar,maven工程配置以下依赖,非maven工程从maven仓库下载jar添加到“build path” 1 2 3 4 5 <dependen ...
- C#时间间隔
System.Diagnostics.Stopwatch stopwatch = new System.Diagnostics.Stopwatch(); stopwatch.Start(); stop ...
- lua编程之元表与元方法
一. 前言 lua是一种非常轻量的动态类型语言,在1993年由由Roberto Ierusalimschy.Waldemar Celes 和 Luiz Henrique de Figueiredo等人 ...
- fortran shapefile学习
试图编写一个fortran程序,用以判断给定的点是否落在给定shapefile的范围内. 需要利用到FortranGIS库 ,而该库又依赖于Shapefile C Library 安装shapelib ...
- dbutis事务管理
1.在dao层用dbutils实现事务管理 //从a--->b帐户转100元 public void transfer() throws SQLException{ Connection con ...
- Linux学习之常用命令(二)
1.上次介绍了一些常用的系统命令,这次又总结了一些小命令,故分享一下: 网卡地址查询的命令: ifconfig #不同于Windows系统,它的是ifconfig而不是ipconfig ip -a # ...
- Oz 创建Ubuntu镜像
参考链接: http://blog.csdn.net/gcogle/article/details/52767135http://tlinux.blog.51cto.com/7288656/17497 ...