docker+centos+django项目部署

Docker

cgroup

namespace

IAAS

PAAS

SAAS

centos7 docker

centos6 docker-io

docker-ce 开源社区

docker-ee 收费版本

安装

1.卸载原来的docker

yum remove docker

2.下载阿里云的docker仓库

wget -O /etc/yum.repos.d/docker-ce.repo  https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 

https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  1. 安装

    yum install docker-ce -y
    

镜像

类似于安装系统时候需要的iso镜像文件

容器

启动之后的镜像

仓库

存放镜像

可以用公用的

可以有私有的

class myclass():
    def __init__():
        pass
    
m=myclass()

配置文件

/etc/docker/daemon.json

{
    "registry-mirrors": [
        "https://1nj0zren.mirror.aliyuncs.com",
        "https://docker.mirrors.ustc.edu.cn",
        "http://f1361db2.m.daocloud.io",
        "https://registry.docker-cn.com"
    ]
}

docker生效

systemctl docker

启动

8、启动并加入开机启动

$ sudo systemctl start docker
$ sudo systemctl enable docker

测试docker是否安装正常

docker run hello-world

run 运行
hello-world 镜像名称

搜索镜像

Hub.docker.com 里面可以搜索

docker search redis

NAME(名字)                             DESCRIPTION(描述信息)                                     STARS(点赞数)              OFFICIAL(是否为官方)            AUTOMATED
mysql                             MySQL is a widely used, open-source relation…   8499                [OK]                
mariadb                           MariaDB is a community-developed fork of MyS…   2942                [OK]                

下载镜像

docker pull 镜像名称

运行容器

  • 如果本地没有此镜像,则会取docker hub 下载
  • 如果有的话,则直接根据参数运行
docker run
-d  后台启动
docker run --name redis-test -d redis 起名字
-it
-i 交互式操作
t 终端
--rm 容器退出,并把容器删掉


docker run -it centos 
exit

查看本地镜像

docker images
-q 只显示id

查看启动的容器

docker ps
-a  显示启动过的所有的容器

删除镜像

docker rmi 删除镜像
默认情况下不能删除启动过容器的镜像
-f 强制删掉

删除容器

docker rm id|name 删除容器
默认不能删除启动中的容器
-f 强制删除

关闭容器

docker stop id

退出容器不关闭容器

ctrl+p,q

进入正在启动中的容器

docker exec -it id|name bash
bash 是进入容器后执行的命令

查看容器的log日志

docker logs id|name
-f 查看实时日志输出

导出镜像

docker save -o name imagename|id
docker save id|imagesname > centos.tar.gz

导入镜像

docker load -i centos.tar.gz
docker load < centos.tar.gz 

提交

docker commit -m "message" 运行中的容器id

修改镜像名称

docker tag 原来名称 新名称
如果不存在tag,则在原来的镜像基础上加上tag信息,如果存在原来的tag信息,则会复制一份

删除所有的关闭状态下的容器

docker container prune

容器执行指令


docker run centos bash -c "echo s21"
docker run centos echo s21

#在容器里面执行命令
docker run centos "while true;doecho s21;sleep 1;done"

#容器后台执行
docker run -d centos bash -c "while true;doecho s21;sleep 1;done"


#查看日志输出
docker logs -f id|name
-f 查看实时日志输出

数据卷

将宿主机的文件挂载到容器里面

相当于文件夹共享

宿主机和容器内部的文件 实时同步

-v 宿主机目录:容器目录
docker run -it -v /opt/myetc:/etc centos bash
[root@localhost home]#docker run -it -v /ddd:/mydata centos bash
[root@d3d973d008d2 /]# ls

root@d3d973d008d2 /]# cd mydata/
[root@d3d973d008d2 mydata]# touch a.txt
[root@d3d973d008d2 mydata]# ll
total 0
-rw-r--r--. 1 root root 0 Aug  4 03:07 a.txt

[test@localhost ddd]$touch cc.txt
[test@localhost ddd]$ll
total 0
-rw-r--r--. 1 root root 0 Aug  4 11:07 a.txt
-rw-r--r--. 1 root root 0 Aug  4 11:08 bbb.txt
-rw-rw-r--. 1 test test 0 Aug  4 11:15 cc.txt
  
  
#容器内部实时
[root@d3d973d008d2 mydata]# ll
total 0
-rw-r--r--. 1 root root 0 Aug  4 03:07 a.txt
-rw-r--r--. 1 root root 0 Aug  4 03:08 bbb.txt
-rw-rw-r--. 1 1000 1000 0 Aug  4 03:15 cc.txt
[root@d3d973d008d2 mydata]# 

端口映射

docker run -d -P redis :端口是随机产生
docker run -d -p 宿主机上的端口:容器内的端口 redis :指定端口
docker run -d -p 2000:6379 redis 

docker port cl6容器id:查看该容器的端口
sst tnlp

查看容器的资源占用率

docker stats 容器id|name

docker info 查看docker信息

docker inspects 查看镜像信息

dockerfile

https://blog.csdn.net/wo18237095579/article/details/80540571

创建一个文件夹file

cd file

创建一个镜像配置文件dockerfile

vi dockerfile

FROM mycentos  指定基础镜像
RUN yum install -y wget 执行命令
RUN mkdir /mydata
COPY a.txt /mydata 将本地文件复制到镜像里面
ADD etc.tar.gz /mydata  :将本地文件复制到进项内,如果是压缩包,则自动解压
WORKDIR /mydata :指定工作目录,exec 进入时候默认的目录
ENV "echo s2"设置变量
VOLUME 设置数据卷
EXPOSE 5900 设置端口
CMD ["nginx", "-g", "daemon off;"] 执行命令
  • 构建自定义镜像:docker build -t mydocker3 .
  • 运行自定义镜像的容器并进入到容器环境下:docker run -it mydocker3
  • (会执行dockerfile文件内部写的命令)
  • 查看是否创建mydata : ls -l

文件命令:

copy 和add的区别

add 是自动解压

CMD只能有一个,RUN可以有多个

label maintainer=“[email protected]

检查:

docker inspect …

远端仓库

docker login:登录docker自己的仓库(先注册docker hub)

docker push myredis:将自己的镜像上传的远端自己的仓库 默认上传到自己的仓库

本地私有仓库

docker pull registry

下载完之后我们通过该镜像启动一个容器

docker run -d -p 5000:5000 registry

默认情况下,会将仓库存放于容器内的/tmp/registry目录下,这样如果容器被删除,则存放于容器中的镜像也会丢失,所以我们一般情况下会指定本地一个目录挂载到容器内的var/lib/registry下,

创建本地仓库

docker run -d -p 5000:5000 -v /opt/register:/var/lib/registry registry  
本地自己建一个私有仓库
docker tag redis 127.0.0.1:5000/redis 修改名称
docker push 127.0.0.1:5000/redis  上传到仓库
curl  127.0.0.1:5000/v2/_catalog 查看结果

让别人可以访问本地仓库:

要修改配置文件

vim /etc/docker/daemon.json

{
	# 配置加速
    "registry-mirrors": [
        "https://1nj0zren.mirror.aliyuncs.com",
        "https://docker.mirrors.ustc.edu.cn",
        "http://f1361db2.m.daocloud.io",
        "https://registry.docker-cn.com"
    ],
    # 本地仓库地址
     "insecure-registries": [
    "172.16.92.129:5000"  添加ip地址和端口
  ]
}

#重启docker
systemctl restart docker

#启动容器
docker start redis容器id号
docker tag redis 192.168.182.130:5000/redis 
docker push 192.168.182.130:5000/redis

  #拉取
docker pull 192.168.182.130:5000/redis
docker run -d -p 2001:3000 192.168.182.130:5000/redis
  

Eg:flask镜像

  • mkdir flaskdemo :新建flaskdemo文件夹
  • cd flaskdemo
  • vi main.py
from flask import Flask
app=Flask(__name__)
@app.route("/")
def index():
  return "hello"

if __name__=='__main__':
  app.run(port=3000,host='0.0.0.0')
  
#Python3 main.py(保证有python解释器)

dockerfile文件方式

  • vi flaskconf
FROM python:3.6-alpine3.9   #基础镜像
RUN mkdir /data
ADD main.py /data #将本地文件复制到远端去
RUN pip install flask -i https://pypi.douban.com/simple

WORKDIR /data
CMD ["python","main.py"] #执行main.py脚本

  • docker build -t flask -f flaskconf . :构建自定义的镜像flask根据配置文件flaskconf
  • Docker run -d flask -p 2001:3000 flask :启动容器 并定义宿主端口2001绑定(3000是docker中的端口)
  • docker ps
  • systemctl stop firewalld.service 关闭防火强
  • 浏览器访问 http:192.168.182.130:2001

查看

>>>  docker exec -it 1c2142df1cb2 /bin/sh                          
/data #                                                                                  
/data # ls                                                                               
main.py                                                                                  
/data # ls -a                                                                            
.        ..       main.py                                                                
/data #                                                   

上传

docker tag flask  192.168.182.130:5000/flask:v1
docker push 192.168.182.130:5000/flask:v1

别人访问:

docker pull 192.168.182.130:5000/flask:v1

docker run -d 192.168.182.130:5000/flask:v1

docker-compose

安装:

pip install docker-compose

docker-compose
自动补全命令配置
curl ...
vi docker-compose.yml

Yml:配置文件 最好和dockerfile文件再同一个路径下,只要能保证yml能找到dockerfile文件就可

排版工具:swam,docker-compose

vi docker-compose.yml:

version: '3'                                                                                             
services:                                                                                                
   web:                                                                                                  
     build:  #类似docker build  -t 镜像别名 -f dockerfile文件                                     
        context: .       #指定当前目录                                                                                
        dockerfile: /flaskdemo/flaskconf     #dockerfile文件                                                            
     ports:                                                                                              
     - "3000:3000"                                                                                       
   redis:                                                                                                
     image: "redis"    #image 默认调用本地镜像  如果没有就会去库里面下载 并启动docker run

vi main.py

from flask import Flask
from redis import Redis

app=Flask(__name__)
redis=Redis(host="redis",port=6379)

@app.route("/")
def index():
    count= redis.incr("hits")
    return "该页面被访问了{}次".format(count)

if __name__=="__main__":
    app.run(port=3000,host="0.0.0.0")

vi flaskconf

  • py脚本中也需要下载相应的模块 flask redis
FROM python:3.6-alpine3.9   #基础镜像
RUN mkdir /data
ADD main.py /data #将本地文件复制到远端去
RUN pip install flask redis -i https://pypi.douban.com/simple

WORKDIR /data
CMD ["python","main.py"] #执行main.py脚本

docker-compose命令:

build 重新构建容器

docker-compose build 

docker-compose up -d :运行守护线程方式容器

ps 查看运行中的容器

  • 同时启动web服务和redis服务
[root@localhost flaskdemo]#docker-compose ps
      Name                     Command               State           Ports         
-----------------------------------------------------------------------------------
flaskdemo_redis_1   docker-entrypoint.sh redis ...   Up      6379/tcp              
flaskdemo_web_1     python main.py                   Up      0.0.0.0:3000->3000/tcp

images 查看镜像

rm 删除停止容器

version: '3' #版本
services:
   web: 
     build: . # dockerfile文件叫Dockerfile
     ports:
     - "3000:3000"
   redis:
     image: "redis"
version: "3" 
services:

  redis:
    image: redis:alpine
    ports:
      - "6379"
    networks:
      - frontend

  db:
    image: postgres:9.4
    volumes:
      - db-data:/var/lib/postgresql/data
    networks:
      - backend

  vote:
    image: dockersamples/examplevotingapp_vote:before
    ports:
      - 5000:80
    networks:
      - frontend
    depends_on:  # 先谁启动
      - redis
      - db

dockerfile 部署crm

  • Pip install django=1.11.20
  • Pip freezz >requirement.txt
  • Django-admin startproject mycrm
  • vi crmconf
FROM python:3.6-alpine3.9  # 基础镜像
RUN mkdir /data   # 执行命令
COPY requirements.txt /data # 复制文件
COPY mycrm /data  #复制目录的时候,,默认情况下是复制目录下的所有文件,如果要复制整个目录,则需要在后面加上目录名称
WORKDIR /data # 指定工作目录
RUN pip install -r requirements.txt -i https://pypi.douban.com/simple #安装python第三方的包
EXPOSE 8080 # 启动时候的端口,必须的
CMD python manage.py runserver 0.0.0.0:8080 #启动django

vi manage.py


你可能感兴趣的:(部署)