zoukankan      html  css  js  c++  java
  • Dockerfile编写

    1 Dockerfile编写

    Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像,用来构建镜像的
    # docker pull 
    # 通过容器---》打包成镜像--》压缩--》拿到任何位置
    # 通过Dockerfile构建镜像
    
    1、对于开发人员:可以为开发团队提供一个完全一致的开发环境;
    2、对于测试人员:可以直接拿开发时所构建的镜像或者通过Dockerfile文件构建一个新的镜像开始工作了;
    3、对于运维人员:在部署时,可以实现应用的无缝移植。
    
    命令	                        作用
    FROM image_name:tag    	   定义了使用哪个基础镜像启动构建流程
    # 镜像名字,基于哪个镜像构建的
    MAINTAINER user_name	     声明镜像的创建者
    ENV key value	             设置环境变量 (可以写多条)
    RUN command	               是Dockerfile的核心部分(可以写多条)
    # 写要执行的命令(centos上装一个python3.6,原来在linux上装python,如何操作,就用命令一行一行写出来)
    
    RUN wget http://www..../python.tar.gz
    RUN tar -cvf python.tar.gz
    RUN cd python
    RUN make && make install
    RUN pip3 install django==1.11.9
    
    ADD source_dir/file dest_dir/file	将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后自动解压
    COPY source_dir/file dest_dir/file	和ADD相似,但是如果有压缩文件并不能解压
    WORKDIR path_dir	设置工作目录(docker exec 进去,就在当前设置的路径下   / )
    
    CMD [命令]    容器一运行,就会执行命令
    # ADD和COPY的区别?一个会解压,一个默认不会解压
    
    
    
    # 写一个Dockerfile,基于python3.6 搭建运行环境:django,drf,uwsgi
    # 名字必须交 Dockerfile ,当你构建的时候,会在当前路径下找这个文件,自动构建
    vim Dockerfile
    
    FROM python:3.6
    MAINTAINER lqz
    ADD ./django_test.tar /home
    RUN pip install -r /home/django_test/requirement.txt -i https://pypi.doubanio.com/simple
    CMD ["/bin/bash"]
    
    
    # 基于docker file构建
    docker build -t='django1.11.9' .
    
    # 本地就会有一个基于dockerfile,构建的镜像
    docker run -di --name=myproject -p 8080:8080 django1.11.9
    
    进入到容器,启动项目:python manage.py runserver 0.0.0.0:8080
      
      
      
    
    
    json模块3.5之前 不支持loads  bytes格式
    json模块3.6以后,loads bytes格式就可以
    
    你同事写的代码,拉倒你本地,一运行,走到一个地方就报错,因为json loads的时候出了错,3.5环境,排查没发现问题,
    去源码看,发现源码根本不支持loads bytes格式,他点开源码看到是支持的,在他机器上没问题,  3.6 ,3.5 
    
    

    2 容器部署项目,用nginx做负载均衡

    # 1 在项目路径下写Dockerfile
    FROM python:3.6
    MAINTAINER lqz
    ADD ./requirement.txt /home/
    RUN pip install -r /home/requirement.txt -i https://pypi.douban.com/simple/
    WORKDIR /home/django_test
    EXPOSE 8080
    VOLUME ["/home"]
    CMD ["uwsgi", "--ini", "/home/django_test/uwsgi.ini"]
    
    # 2 在项目路径下写一个uwsgi.ini
    
    [uwsgi]
    #也可以使用http
    http=0.0.0.0:8080
    #配置项目路径,项目的所在目录
    chdir=/home/django_test
    #配置wsgi接口模块文件路径
    wsgi-file=django_test/wsgi.py
    #配置启动的进程数
    processes=4
    #配置每个进程的线程数
    threads=2
    #配置启动管理主进程
    master=True
    #配置存放主进程的进程号文件
    pidfile=uwsgi.pid
    
    # 3 传到git上(我们直接复制过去了)
    
    在服务器从git上拉下来,解压开
    # 4 基于docker file构建镜像
    docker build -t='django1.11.9' .
    
    
    
    #5  运行起django+uwsgi的容器
    docker run -di --name=mydjango1 -v /home/s13/myproject:/home -p 8080:8080 django1.11.9   
    docker run -di --name=mydjango2 -v /home/s13/myproject2:/home -p 8088:8080 django1.11.9 
        
        
    # 6 基于ngixn镜像跑起一个容器来,做目录映射(在宿主机,修改nginx的配置文件)
    # 创建几个文件夹
    mkdir -p /home/nginx/conf /home/nginx/html /home/nginx/logs
    vim /home/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	101.133.225.166:8080;
    			server	101.133.225.166:8088;
    		}
        server {
            listen       80;
            server_name  localhost;
            location / {
              #负载均衡配置
              proxy_pass http://node;
            }  
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
        }
    }
    
    docker run --name nginx -id -p 80:80 -v /home/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /home/nginx/html:/etc/nginx/html -v /home/nginx/logs:/var/log/nginx nginx
            
    #7  访问http://101.133.225.166/, 会打到不通的docker容器内,即便有一个服务停了,也不会影响项目的运行
    
    # 因为你django docker容器做了目录映射---》只需要修改代码,重启容器即可(git pull 即可)
    # 不停服更新,停一半,更新,启动--在把另一半更新了
    # 停服更新
    

    3 私有仓库搭建

    # 镜像获取:
    docker pull
    dockerfile构建
    拷贝tar文件,load过来
    
    # 公司内部用的镜像,docker hub上没有,私服(私有服务器)
    
    # 操作步骤
    # 1 拉一个registry镜像  (本质是个什么?web服务(想像成 web项目在里面))
    docker pull registry
    # 2 跑起容器来
    docker run -di --name=registry -p 5000:5000 registry
    # 3 浏览器输入地址(目前是空的)
    http://宿主机:5000/v2/_catalog
        
    # 4 vi /etc/docker/daemon.json (文件如果没有就创建出来),以后docker pull 先从自己配置的这个拉,再去远程拉
    {"insecure-registries":["101.133.225.166:5000"]} 
    
    # 5 重启docker 服务
    systemctl restart docker
    
    # 6 启动容器
    docker restart registry
    
    # 7 要通过docker tag将该镜像标志为要推送到私有仓库(可能是dockerfile构建的,也可能是通过容器打包成的)
    docker tag django1.11.9 101.133.225.166:5000/django1.11.9
    # docker tag redis 101.133.225.166:5000/myredis
    
    # 8 通过 docker push 命令将 django 镜像 push到私有仓库中
    docker push 101.133.225.166:5000/django1.11.9
    #docker push 101.133.225.166:5000/myredis
      
    # 9 再访问这个地址http://宿主机:5000/v2/_catalog
    就能看到你上次的镜像再里面了
    
    # 10 只要在etc/docker/daemon.json,配置了这个{"insecure-registries":["101.133.225.166:5000"]} 的所有小伙伴,都可以拉取我上传的镜像
    
    docker pull 101.133.225.166:5000/myredis
    
    # 公司可能没有私服,直接通过dockerfile构建
    # 大一点的公司,搭建私有仓库,里面放了一些镜像(不让你去docker hub下了,直接只从私有仓库下载)
    
    
  • 相关阅读:
    Cypress web自动化7-连接器connectors
    Cypress web自动化6- Assertions断言使用(should, expect)
    Cypress web自动化5-table表格元素(别名使用Aliasing)
    Cypress web自动化4-操作页面元素(Actions行为事件)
    Cypress web自动化3- 登录web网站案例脚本
    Cypress web自动化2-pycharm写第一个脚本
    MapReduce实现手机上网流量分析(业务逻辑)
    Cannot initialize Cluster. Please check your configuration for mapreduce.framework.name and the co
    Input path does not exist: file:/.......
    基于Maven引入Hadoop包报Missing artifact jdk.tools:jdk.tools:jar:1.6
  • 原文地址:https://www.cnblogs.com/kai-/p/12803626.html
Copyright © 2011-2022 走看看