zoukankan      html  css  js  c++  java
  • Docker进阶

    1、应用部署

    # 在容器内部署mysql
    # -e表示环境变量
    
    docker run -di --name=mysql -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
    # 官方提供的
    docker run --name some-mysql -v /my/own/datadir:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
            
    # 在容器内部署redis
    docker run -di -p 6377:6379 redis:latest
            
    # 在容器内部署nginx
    docker run -di --name=mynginx -p 8080:80 nginx

    2、部署应用映射外部目录

    # 部署redis,把配置文件和数据目录映射出来
    # 操作步骤
        -1 mkdir /reids /redis/conf /redis/data
        -2 vim /redis/conf/redis.conf
            # 配置文件
            bind 0.0.0.0
            daemonize NO
            protected-mode no
            requirepass 123456
        -3 创建并运行容器
        docker run -p 6378:6379 --name redis_6379 -v /redis/conf/redis.conf:/etc/redis/redis.conf -v /redis/data:/data -di redis redis-server /etc/redis/redis.conf
        -4 本地window机器上远程连接到了docker里的redis
        -5 cmd窗口下
            redis-cli -h 101.133.225.166 -p 6378
        -6 认证
            auth 123456
        -7 写入数据
            set name lqz
        -8 保存数据
            save或者是bgsave
        -9 在宿主机的/redis/data路径下就能看到一个文件
        -10 不管多少次重启redis容器,数据都还在
        -11 原来的redis容器没了,按照第三步再启动一遍,数据都还在

    3、迁移与备份

    3.0 其他操作

    # 删除所有容器()
    docker rm `docker ps -a -q`
    # 删除所有镜像
    docker rmi `docker images -q`
    
    # 通过自己构建的image启动容器
    docker run -id --name=mydjango -p 8088:8088  mydjango python /project/django_test/manage.py runserver 0.0.0.0:8088
                   
    # 查看容器运行日志
    docker logs 容器id
    
    
    # 操作步骤
        1 启动一个python容器
            docker run -di --name=lqz python:3.6
        2 进入装软件
            docker exec -it lqz /bin/bash
            mkdir /project
            pip install django==1.11.1 
            退出
        3 把项目拷贝到容器内部
            docker cp /opt/lqz/django_test lqz:/project
                
        4 把容器做成镜像
            docker commit lqz mydjango
        5 基于自己做的镜像运行容器
        docker run -id --name=mydjango -p 8088:8088  mydjango python /project/django_test/manage.py runserver 0.0.0.0:8088

    3.1 容器保存为镜像

    docker commit 容器名字 镜像名字
    docker commit 19b mydjango
    pip install django==1.11.11 -i https://pypi.douban.com/simple/

    3.2 把镜像打包成压缩包

    docker save -o mydjango.tar mydjango

    3.3 把压缩包恢复为镜像

    docker load -i mydjango.tar

    4、dockerfile

    1 dockerfile是什么
        一个文件,里面一堆指令,通过这个文件可以生成镜像
    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    设置工作目录
        
        
    3 写一个dockerfile(文件名字必须交dockerfile)
    vim dockerfile
        FROM python:3.6
        MAINTAINER lqz
        EXPOSE 8080
        ADD ./requirement.txt /home/
        RUN pip install -r /home/requirement.txt -i https://pypi.douban.com/simple/ 
        RUN pip install uwsgi -i https://pypi.douban.com/simple/
        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 通过dockerfile构建出镜像
        docker build -t='django_1.11.11' .
    5 查看镜像
        docker images 
        
    6 启动容器
    docker run -di --name=mydjango2 -v /opt/lqz/:/home -p 8080:8080 django_1.11.11
    
    7 在外部访问即可
    
    8 配置nginx转发
    # 创建文件件
    mkdir -p /opt/nginx/conf /opt/nginx/html /opt/nginx/logs
    # 新建配置文件
    vim 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:8081;
            server    101.133.225.166:8082;
        }
        server {
            listen       80;
            server_name  localhost;
            location / {
              #proxy_pass http://101.133.225.166:8080;
              #负载均衡配置
              proxy_pass http://node;
            }  
        }
    }
    
    # docker 中运行nginx
    docker run --name nginx -id -p 8888:80 -v /opt/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /opt/nginx/html:/etc/nginx/html -v /opt/nginx/logs:/var/log/nginx nginx
                    
    9 配置负载均衡
    # 修改nginx配置文件
    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:8081;
            server    101.133.225.166:8082;
        }
        server {
            listen       80;
            server_name  localhost;
            location / {
              #proxy_pass http://101.133.225.166:8080;
              #负载均衡配置
              proxy_pass http://node;
            }  
        }
    }
    # 多启动几个docker容器
    docker run -di --name=mydjango3 -v /opt/lqz/django_test2/:/home/django_test/ -p 8081:8080 django_1.11.11
    docker run -di --name=mydjango3 -v /opt/lqz/django_test2/:/home/django_test/ -p 8082:8080 django_1.11.11
            
    # 重启nginx
    # 假设8081的容器挂了,8080的容器挂了,正常提供服务,
    # 再把docker容器启动起来即可

    5、私有仓库

    1 把自己的镜像传到docker hub上
        -docker login  输入用户名密码
                                            镜像ID       用户名        镜像name    版本
        -给你要上传的image打个标签docker tag 5452fa6715c0 liuqingzheng/django1.11.9:v1
        -docker images
        -docker push liuqingzheng/django1.11.9:v1

    步骤

    1 拉取私有仓库镜像
        docker pull registry
    2 启动容器
        docker run -di --name=registry -p 5000:5000 registry
    3 打开浏览器 输入地址http://101.133.225.166:5000/v2/_catalog看到{"repositories":[]} 表示私有仓库搭建成功并且内容为空
    4 配置
        修改daemon.json
        vi /etc/docker/daemon.json
        添加以下内容,保存退出。
        {"insecure-registries":["101.133.225.166:5000"]} 
        此步用于让 docker信任私有仓库地址
    5 重启docker 服务
        systemctl restart docker
    6 重启容器
        docker start registry
    7 打标签
        docker tag 5452fa6715c0 101.133.225.166:5000/django1.11.11
    8 上传到私有仓库
    docker push 101.133.225.166:5000/django1.11.11
        
    9 从私有仓库拉取镜像
    docker pull 101.133.225.166:5000/django1.11.11

    6、docker-compose

    1 docker-compose是一个单机情况下容器编排的工具
    2 通过yml文件定义多个容器
    3 默认名字docker-compose.yml
    4 三个概念,Service  Networks ,Volumes
        一个service代表一个container,这个container可以从docker hub的image来创建,或者从本地dockerfile build的image来创建
    5 version:有1,2,3版本,目前都用"3"
    
    
    6 安装
    curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.4/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
    chmod +x /usr/local/bin/docker-compose
    
    7 验证安装成功
        docker-compose -v

    6.1部署多应用

    # 部署flask redis
    1 创建Dockerfile
    vim Dockerfile
    FROM python:3.6
    COPY . /app
    WORKDIR /app
    RUN pip install flask redis
    EXPOSE 5000
    CMD [ "python", "app.py" ]
    
    2 创建docker-compose文件
    vim docker-compose.yml
    version: "3"
    services:
      redis:
        image: redis
      web:
        build:
          context: .
          dockerfile: Dockerfile
        ports:
          - 8080:5000
        environment:
          REDIS_HOST: redis
    3 创建app.py
    vim app.py
    from flask import Flask
    from redis import Redis
    import os
    import socket
    app = Flask(__name__)
    redis = Redis(host=os.environ.get('REDIS_HOST', '127.0.0.1'), port=6379)
    @app.route('/')
    def hello():
        redis.incr('hits')
        return '你好! 查看 %s 次, hostname 是 %s.
    ' % (redis.get('hits'),socket.gethostname())
    if __name__ == "__main__":
        app.run(host="0.0.0.0", port=5000, debug=True)
    4 启动--运行
    docker-compose up
    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
      

    7、多个容器直接通信方式

    1 端口映射到宿主机,直接访问宿主机
    2 通过ip地址访问
    3 run的时候指定 --link 容器 
    docker run -di --name=centos1 centos:centos7
    docker run -di --name=centos2 --link centos1 centos:centos7
        
    进入到centos2中 ping centos1 可以ping同
    
    
    # 跨主机的容器通信
        -端口映射
  • 相关阅读:
    [商业][思想]《免费 商业的未来 Free The Future of a Radical Price》 克里斯·安德森(美)
    《幸福就在你身边》第六课、心动就要行动【哈佛大学"幸福课"精华】
    人性歪曲的心理调适 一【犹豫心理、怯场心理、依赖心理、盲从心理、攀比心理】
    《幸福就在你身边》第九课、确信自己有好命【哈佛大学"幸福课"精华】
    ORACLE FLASHBACK恢复删除的所有表
    抽象类和接口的例子
    抽象类专题二:抽象类的用途
    Entity Framework中的批量提交与事务处理[转]
    如何处理JSON中的特殊字符
    C# params参数的应用
  • 原文地址:https://www.cnblogs.com/ZhZhang12138/p/14886354.html
Copyright © 2011-2022 走看看