背景:

本萌最近在部署自己开发的项目的时候发现同一套代码上传到服务器上后,部分功能莫名其妙的有点问题,服务器的各项配置都没有做过变动,所以想把项目转战到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实战的更多相关文章

  1. 使用Docker compose编排Laravel应用

    前言 Laravel官方开发环境推荐的是Homestead(其实就是一个封装好的Vagrant box),我感觉这个比较重,于是自己用Docker compose编排了一套开发环境,在这里分享下. 环 ...

  2. Docker(二十六)-Docker Compose编排容器

    1. 前言 Docker Compose 是 Docker 容器进行编排的工具,定义和运行多容器的应用,可以一条命令启动多个容器. 使用Compose 基本上分为三步: Dockerfile 定义应用 ...

  3. Docker系列之(五):使用Docker Compose编排容器

    1. 前言 Docker Compose 是 Docker 容器进行编排的工具,定义和运行多容器的应用,可以一条命令启动多个容器. 使用Compose 基本上分为三步: Dockerfile 定义应用 ...

  4. docker compose 编排

    Compose是Docker的服务编排工具,主要用来构建基于Docker的复杂应用,Compose 通过一个配置文件来管理多个Docker容器,非常适合组合使用多个容器进行开发的场景. 说明:Comp ...

  5. Docker Compose编排工具部署lnmp实践及理论(详细)

    目录 一.理论概述 编排 部署 Compose原理 二.使用docker compose 部署lnmp 三.测试 四.总结 一.理论概述 Docker Compose是一个定义及运行多个Docker容 ...

  6. 基于Docker Compose构建的MySQL MHA集群

    Docker MySQL MHA 基于Docker 1.13.1之上构建的MySQL MHA Docker Compose Project 可快速启动GTID模式下的MasterHA集群, 主用于My ...

  7. 使用Docker Compose编排Spring Cloud微服务

    文章目录 微服务构建实例 简化Compose的编写 编排高可用的Eureka Server 编排高可用Spring Cloud微服务集群及动态伸缩 微服务项目名称 项目微服务中的角色 microser ...

  8. 使用docker compose编排容器

    一.安装docker compose 二进制包安装 1.安装 Docker Compose 从 官方 GitHub Release 处直接下载编译好的二进制文件即可 # curl -L https:/ ...

  9. 使用Docker Compose编排微服务

    一般微服务架构会包含若干个微服务,而每个微服务可以有多个实例,如果每个微服务都有手动启停,那么效率就很低.维护量比较大. 所以我们可以使用Docker Compose来轻松.高效地管理容器. 一.安装 ...

  10. asp.net core容器&mysql容器network互联 & docker compose方式编排启动多个容器

    文章简介 asp.net core webapi容器与Mysql容器互联(network方式) docker compose方式编排启动多个容器 asp.net core webapi容器与Mysql ...

随机推荐

  1. Nopcommerce主要用到的技术及特点

    很多人都说通过阅读.学习大神们高质量的代码是提高自己技术能力最快的方式之一.我觉得通过阅读NopCommerce的源码,可以从中学习很多企业系统.软件开发的规范和一些新的技术.技巧,可以快速地提高我们 ...

  2. 用xpo实现dc技术的关键点-XPO是如何处理接口类型与真实类型的对应关系的

    https://www.devexpress.com/Support/Center/Question/Details/Q487000/xpodatamodel-and-model-interfaces ...

  3. python-flask-ssti(模版注入漏洞)

    SSTI(Server-Side Template Injection) 服务端模板注入 ,就是服务器模板中拼接了恶意用户输入导致各种漏洞.通过模板,Web应用可以把输入转换成特定的HTML文件或者e ...

  4. linux镜像(持续更新)

    Linux系统历史衍生图:https://upload.wikimedia.org/wikipedia/commons/1/1b/Linux_Distribution_Timeline.svg ubu ...

  5. [硬件配置]记录Ubuntu 14.04 下安装无线网卡驱动解决无法连接WiFi的过程

    新电脑安装了Ubuntu 14.04,但是网络连接中只有以太网而没有WiFi的选项. 打开System Setting系统设置-Software&Updates软件&更新-Additi ...

  6. NO--15 微信小程序,scroll-view选项卡和跳转

    大多数的商城类小程序都有这个功能,点击“全部订单”,“待付款”,“待发货”,“待收货”,“已完成”,会跳转页面且跳至与之相对应的选项卡中.所以我们在开发该小程序时也做了相同的功能.如下图:   scr ...

  7. 帝国后端php通用Api接口

    先来看一下api数据接口和那些小程序之间的关系,如下面的描述,百度小程序,微信小程序,轻应用,app像这些我们都称为终端小应用.api提供数据:会为各终端小应用提供统一的数据格式.客户小应用,从api ...

  8. IEEE1588 ( PTP ) 协议简介

    IEEE1588 协议,又称 PTP( precise time protocol,精确时间协议),可以达到亚微秒级别时间同步精度,于 2002 年发布 version 1,2008 年发布 vers ...

  9. Redis源码阅读(四)集群-请求分配

    Redis源码阅读(四)集群-请求分配 集群搭建好之后,用户发送的命令请求可以被分配到不同的节点去处理.那Redis对命令请求分配的依据是什么?如果节点数量有变动,命令又是如何重新分配的,重分配的过程 ...

  10. 从Web抓取信息

    来源:python编程快速上手——Al Sweigart webbrowser:是 Python 自带的,打开浏览器获取指定页面. requests:从因特网上下载文件和网页. Beautiful S ...