详细解读docker部署项目

本文涉及的产品
云原生内存数据库 Tair,内存型 2GB
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
简介: 详细解读docker部署项目

1.通过docker部署django项目

1.创建一个django项目,将django项目提交到gitee

2.进入虚拟机的/opt目录下创建yessir文件夹,进入yessir文件夹,通过git clone将gitee仓库的项目拉下来

cd /opt

mkdir yessir

cd yessir

git clone

3.通过python3.6镜像启动一个python的容器,创建/project文件夹,并在里面安装djang1.11.11

docker run -di --name python3 python:3.6 # 通过镜像python3.6启动一个名为python3的容器

docker exec -it python3 bash # 进入容器python3

pip install django==1.11.11 # 在容器内安装django1.11.11

mkdir /project # 在容器内创建/project文件夹

exit # 退出容器

4.把宿主机中的项目拷贝到容器中(需要进入django项目所在的路径)

【root@yessir yessir1】# pwd # 输出结果为:/opt/yessir1

【root@yessir yessir】# docker cp django_test/ 95d5:/project/

5.把容器id为95d5的容器做成镜像

docker commit 95d5 mydjango # 把容器id为95d5的容器做成镜像,镜像名为mydjango

6.通过mydjango镜像运行实例出容器

docker run -di --name django_pro -p 8088:8088 mydjango python //代码效果参考:http://www.zidongmutanji.com/bxxx/146504.html

/project/django_test/manage.py runserver 0.0.0.0:8088

# 通过镜像mydjango进行端口映射 宿主机端口:容器端口 运行名为django_pro的容器,

# 后面可以跟执行的代码,但是路径必须配对,否则会报错

7.通过访问虚拟机ip:端口号 就能访问到该项目

2 dockerfile(很重要)

1.dockerfile本质

一个docker脚本文件,里面一堆指令,通过这个文件可以生成镜像,

2.dockerfile指令

命令 作用

FROM image_name:tag 定义了使用哪个基础镜像启动构建流程

MAINTAINER user_name 声明镜像的创建者

ENV key value 设置环境变量 (可以写多条)

RUN command 是Dockerfile的核心部分(可以写多条)

ADD source_dir/file dest_dir/file 将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后自动解压

COPY source_dir/file dest_dir/file 和ADD相似,但是如果有压缩文件并不能解压

WORKDIR path_dir 设置工作目录

Dockerfile部署django项目并用Nginx负载均衡

1.django项目中生成包含项目依赖包以及版本的requirements.txt文件

# requirements.txt

django==1.11.11

pymysql

2.在django项目下新建uwsgi.ini文件,输入配置内容

# uwsgi.ini

【uwsgi】

# 配置和nginx连接的socket连接

socket=0.0.0.0:8080

# 也可以使用http

# http=0.0.0.0:8080

# 配置项目路径,项目的所在路径

chdir=/home/docker_test

# 配置wsgi接口模块文件路径

wsgi-file=docker_test/wsgi.py

# 配置启动的进程数

processes=4

# 配置每个进程的线程数

threads=2

# 配置启动管理主进程

master=True

# 配置存放主进程的进程号文件

pidfile=uwsgi.pid

# 配置dump日志记录

daemonize=uwsgi.log

3.django项目中新建Dockerfile文件(名字必须叫Dockerfile),输入配置内容

# Dockerfile

FROM python:3.6

MAINTAINER yessir

EXPOSE 8080

ADD ./requirements.txt /home/

RUN pip install -r /home/requirements.txt -i

RUN pip install uwsgi -i

VOLUME 【"/home"】

WORKDIR /home/django_test

# CMD 【"uwsgi", "--ini", "/home/django_test/uwsgi.ini"】

CMD 【"python", "/home/django_test/manage.py", "runserver","0.0.0.0:8080"】

4.将django项目提交到gitte上(需要进入项目所在的路径下)

git init

git add .

git commit -m '项目初始化'

git remote add origin

git push -u origin master

5.在虚拟机中将django项目通过git clone从gitee上拉下来

cd /opt/

mkdir yessir

cd yessir

git clone

6.在虚拟机中构建镜像

cd /opt/yessir/django_test/

docker build -t mydjango:v1 .

# -t表示tag,也就是给构建的镜像命名,:v1表示定义版本为v1版本

# 通过当前目录下的Dockerfile构建一个名为mydjango的镜像,v1为版本号

# 注意不要忽略了v1后面的 . 否则会报错

7.查看镜像,通过镜像实例出容器

docker images

docker run -di --name django_pro -v /opt/yessir/django_test/:/homed/jango_test/ -p 8080:8080 mydjango:v1

docker run -di --name django_pro1 -v /opt/yessir/django_test/:/home/django_test/ -p 8081:8080 mydjango:v1

docker run -di --name django_pro2 -v /opt/yessir/django_test/:/home/django_test/ -p 8082:8080 mydjango:v1

8.通过访问宿主机对应端口即可访问到

9.通过Nginx转发

创建目录

mkdir -p /opt/nginx/conf /opt/nginx/html /opt/nginx/logs

新建Nginx配置文件

# 在nginx/conf文件夹下创建nginx.conf配置文件

vim /opt/nginx/conf/nginx.conf

写入如下配置:

worker_processes 1;

events {

worker_connections 1024;

}

http {

include mime.types;

default_type application/octet-stream;

sendfile on;

keepalive_timeout 65;

upstream node {

server 10.0.0.200:8080;

server 10.0.0.200:8081;

server 10.0.0.200:8082;

}

server {

listen 80;

server_name localhost;

location / {

#proxy_pass

#负载均衡配置

proxy_pass

}

}

}

另起一个docker容器运行nginx

如果这里nginx转发不成功可能是因为mime.types文件不存在,需要复制一个过来,放到conf目录下

types {

text/html html htm shtml;

text/css css;

text/xml xml plist;

image/gif gif;

image/jpeg jpeg jpg;

application/javascript js;

application/atom+xml atom;

application/rss+xml rss;

text/mathml mml;

text/plain txt;

text/vnd.sun.j2me.app-descriptor jad;

text/vnd.wap.wml wml;

text/x-component htc;

image/png png;

image/svg+xml svg svgz;

image/tiff tif tiff;

image/vnd.wap.wbmp wbmp;

image/webp webp;

image/x-icon ico;

image/x-jng jng;

image/x-ms-bmp bmp;

application/font-woff woff;

application/java-archive jar war ear;

application/json json;

application/mac-binhex40 hqx;

application/msword doc;

application/pdf pdf;

application/postscript ps eps ai;

application/rtf rtf;

application/vnd.apple.mpegurl m3u8;

application/vnd.google-earth.kml+xml kml;

application/vnd.google-earth.kmz kmz;

application/vnd.ms-excel xls;

application/vnd.ms-fontobject eot;

application/vnd.ms-powerpoint ppt;

application/vnd.oasis.opendocument.graphics odg;

application/vnd.oasis.opendocument.presentation odp;

application/vnd.oasis.opendocument.spreadsheet ods;

application/vnd.oasis.opendocument.text odt;

application/vnd.openxmlformats-officedocument.presentationml.presentation

pptx;

application/vnd.openxmlformats-officedocument.spreadsheetml.sheet

xlsx;

application/vnd.openxmlformats-officedocument.wordprocessingml.document

docx;

application/vnd.wap.wmlc wmlc;

application/x-7z-compressed 7z;

application/x-cocoa cco;

application/x-java-archive-diff jardiff;

application/x-java-jnlp-file jnlp;

application/x-makeself run;

application/x-perl pl pm;

application/x-pilot prc pdb;

application/x-rar-compressed rar;

application/x-redhat-package-manager rpm;

application/x-sea sea;

application/x-shockwave-flash swf;

application/x-stuffit sit;

application/x-tcl tcl tk;

application/x-x509-ca-cert der pem crt;

application/x-xpinstall xpi;

application/xhtml+xml xhtml;

application/xspf+xml xspf;

application/zip zip;

application/octet-stream bin exe dll;

application/octet-stream deb;

application/octet-stream dmg;

application/octet-stream iso img;

application/octet-stream msi msp msm;

application/octet-stream apk ipa;

audio/midi mid midi kar;

audio/mpeg mp3;

audio/ogg ogg;

audio/x-m4a m4a;

audio/x-realaudio ra;

video/3gpp 3gpp 3gp;

video/mp2t ts;

video/mp4 mp4;

video/mpeg mpeg mpg;

video/quicktime mov;

video/webm webm;

video/x-flv flv;

video/x-m4v m4v;

video/x-mng mng;

video/x-ms-asf asx asf;

video/x-ms-wmv wmv;

video/x-msvideo avi;

}

mime.types文件内容

docker run -di --name nginx -p 8888:80 -v /opt/nginx/conf/nginx.conf:/etc/conf/nginx.conf -v /opt/nginx/html:/etc/nginx/html -v /opt/nginx/logs:/var/log/nginx nginx

# 通过nginx进行端口转发 然后将不同的文件映射到docker容器中对应的文件路径下

多启动几个docker容器

docker run -di --name=mydjango3 -v /opt/yessir/django_test2/:/home/django_test/ -p 8081:8080 django_1.11.11

docker run -di --name=mydjango4 -v /opt/yessir/django_test2/:/home/django_test/ -p 8082:8080 django_1.11.11

# 重启nginx

# 假设8081的容器挂了,8080的容器挂了,正常提供服务,

# 再把docker容器启动起来即可

docker-compose

下载官网:

docker-compose是一个单机情况下容器编排的工具。

通过yml文件定义多个容器

通过一条命令根据yml去创建、管理这些容器

默认名字:docker-compose.yml

三个概念:Service、Networks、Volumes

一个service代表一个container,这个container可以从docker hub的image来创建,或者从本地dockerfile build的image来创建。

container创建的两种方式:

# 方式一:

1.利用docker hub的image来创建

# 方式二:

2.从本地的dockerfile build的image来创建

docker-compose有三个版本:1,2,3,目前都用"3"版本

5.1 安装

1.下载

Docker Compose 存放在Git Hub,不太稳定。 你可以也通过执行下面的命令,高速安装Docker Compose。

curl -L -s-uname -m` > /usr/local/bin/docker-compose

2.通过上面的命令,安装完Docker Compose后,该文件是不可执行的,所以我们需要给他添加上可执行的权限

chmod +x /usr/local/bin/docker-compose

3.校验是否安装成功

docker-compose -v # 查看版本

5.2 docker-compose.yml如何配置

建议:在pycharm中创建:docker-compose.yml 文件来书写,会有提示

docker-compose.yml 如何写

version: '3'

services:

wordpress:

image: wordpress

ports:

- 8080:80

environment:

WORDPRESS_DB_HOST: mysql

WORDPRESS_DB_PASSWORD: root

volumes:

- mysql-data:/var/lib/mysql

3 docker-compose部署多应用

通过docker-compose部署flask,redis

1.创建Dockerfile

vim Dockerfile

Dockerfile配置

FROM python:3.6

COPY . /app

WORKDIR /app

RUN pip install flask redis

EXPOSE 5000

CMD 【 "python", "app.py" 】

2.创建docker-compose.yml 文件

注意:yml类型的文件,要求每个冒号 : 和每个 - 符号后面必须有一个空格,否则会报错

vim docker-compose.yml

docker-compose.yml 配置

version: "3"

services:

redis:

image: redis

web:

build:

context: .

dockerfile: Dockerfile

ports:

- 8080:5000

//代码效果参考:http://www.zidongmutanji.com/zsjx/524339.html

environment:

REDIS_HOST: redis

3.创建app.py

vim app.py

在 app.py 内书写代码

相关文章
|
9天前
|
消息中间件 编解码 Docker
Docker部署RabbitMQ消息中间件
【7月更文挑战第4天】Docker部署RabbitMQ消息中间件
41 3
|
7天前
|
存储 Java Docker
使用Docker部署Java应用的最佳实践
使用Docker部署Java应用的最佳实践
|
7天前
|
存储 Java Docker
使用Docker部署Java应用的最佳实践
使用Docker部署Java应用的最佳实践
|
7天前
|
存储 移动开发 程序员
Docker部署Dillinger个人文本编辑器
【7月更文挑战第6天】Docker部署Dillinger个人文本编辑器
20 1
|
12天前
|
消息中间件 数据可视化 RocketMQ
【RocketMQ系列二】通过docker部署单机RocketMQ
【RocketMQ系列二】通过docker部署单机RocketMQ
42 4
|
9天前
|
存储 开发者 Docker
|
14天前
|
Nacos 数据中心 Docker
Docker 部署 Nacos 集群
Docker 部署 Nacos 集群
|
4天前
|
Java 应用服务中间件 持续交付
Java面试题:简述Docker等容器化技术的原理及其在Java应用部署中的作用。
Java面试题:简述Docker等容器化技术的原理及其在Java应用部署中的作用。
11 0
|
6天前
|
JSON 测试技术 数据安全/隐私保护
【Docker项目实战篇】Docker部署PDF多功能工具Stirling-PDF
【7月更文挑战第7天】Docker部署PDF多功能工具Stirling-PDF
28 0
|
7天前
|
Ubuntu Linux 数据安全/隐私保护
Linux系统使用Docker部署Cloudreve云盘并实现远程访问
Linux系统使用Docker部署Cloudreve云盘并实现远程访问
13 0