zoukankan      html  css  js  c++  java
  • docker 使用

     docker
       前言:
         Docker是基于Go 语言 并遵从Apache2.0协议开源,
         Docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到
       任何流行的 Linux 机器上,也可以实现虚拟化.

    -docker:是一个开源的应用容器引擎 c/s 架构程序 优点: 1.更快速的交付和部署 2.更高效的虚拟化 3.更轻松的迁移和扩展 4.更简单的管理
    docker安装: 安装前的准备:
    -1. yum 包更新到最新: sudo yum update -2. 安装需要的软件包: sudo yum install -y yum-utils device-mapper-persistent-data lvm2 -3. 换源: sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/
              linux/centos/docker-ce.repo 安装:sudo yum install docker-ce 查看docker版本: docker -v 设置ustc的镜像: 编辑该文件: vi /etc/docker/daemon.json 在该文件中输入如下内容: {"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]} 启动docker: systemctl start docker 停止docker: systemctl stop docker 重启docker: systemctl restart docker 查看docker状态: systemctl status docker 开机启动: systemctl enable docker 查看docker概要信息: docker info 查看docker文档: docker --help 容器与虚拟机的区别: 容器:是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统; 虚拟机:则是在硬件层面实现。 -重点: -镜像(image):镜像当做容器的源代码 -镜像操作: 查看镜像: docker images 搜索镜像: docker search 镜像名称 拉取镜像: docker pull 镜像名称 eg: docker pull centos:7 删除镜像: docker rmi 镜像ID 删除所有镜像: docker rmi `docker images -q` -容器(container):一个一个的操作系统 -容器操作: 查看正在运行的容器: docker ps 查看所有容器: docker -a 查看最后一次运行的容器: docker ps -l 查看停止的容器: docker ps -f status=exited 停止容器: docker stop 容器名称(或者容器ID) 启动容器: docker start 容器名称(或者容器ID) 退出当前容器: exit 文件拷贝:(考进去) docker cp 需要拷贝的文件或目录 容器名称:容器目录 (考出来) docker cp 容器名称:容器目录 需要拷贝的文件或目录 目录挂载: 创建容器 添加-v参数 后边为 宿主机目录:容器目录
               匿名挂载:-v映射时只写了容器内的路径,没写容器外的路径
                具名挂载:-v 卷名:容器内路径
                指定路径挂载: -v /本地路径:容器内路径
                eg:docker run -di -v /usr/local/myhtml:/usr/local/myhtml --name=mycentos3 centos:7
                    查看容器IP地址: docker inspect 容器名称(容器ID) 
                                    docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称(容器ID)
                    删除容器: docker rm 容器名称(容器ID)
                    创建容器: docker run
                        交互式创建: docker run -it  --name=容器名称 镜像名称:标签 /bin/bash
                        守护式创建: docker run -di --name=容器名称 镜像名称:标签
                            登录守护式容器方式: docker exec -it 容器名称 (或者容器ID)  /bin/bash
                        
                        注:创建容器常用参数说明:
                            -i:表示运行容器
                            -t:表示容器启动后会进入其命令行  
                            --name :为创建的容器命名
                            -d:在run后面加上-d参数,则会创建一个守护式容器在后台运行
                            -p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口
                            -v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。
                注:两者兼得关系   就好比  类(镜像) --> 对象(容器)  

    docker 数据卷:
        让容器间数据共享:
            docker容器中产生的数据,同步到本地
        卷技术:目录的挂载,将我们容器内的目录,挂载到linux上面
        目的:容器的持久化和同步操作
    
        数据卷容器: volume-from 实现容器间的数据共享
            
            
        结论: 
            容器之间配置信息的传递,数据卷容器的生命周期一直持续到没有容器为止
            但是一旦你持久化到了本地,这个时候,本地的数据是不会删除的 
        
        dockerfile命令:
            CMD与ENTRYPOINT区别:
                cmd:指定这个容器启动的时候运行命令,只有最后一个生效,可被替代
                entpypoint:指定这个容器启动的时候运行命令,可以追加命令
                
                
    docker网络:
        docker0:docker自带的路由  不支持容器名 进行访问
        docker中的所有网络接口都是虚拟的,虚拟的转发效率高
        只要容器已删除,对应的网桥一对就没了
        docker0:默认域名不能访问,要link打通    
            
    --link: (新手使用) 不建议使用
        场景:容器1 跟 容器2 连接
        正向可以ping通过,反向不行
        本质:在hosts配置中增加了配置
        
    自定义网络:docker已经帮我们维护好了对应的关系 (推荐使用)
        查看所有网络: docker network ls
        bridge: 桥接docker(默认)
        none: 不配配置网络
        host: 和宿主机共享网络
        containe: 容器间 网络连接 (局限大)
    
         
        --driver bridge
        --subnet 192.168.0.0/16
        --getway 192.168.0.1
        
        eg:docker network create 上面三参数
            
            
        优点: 
            redis:不同集群使用不用网络,保证集群是安全和健康的
            mysql:不同集群使用不用网络,保证集群是安全和健
            
            
    网络连接:
        1.容器跟网络连接  docker network connect
            联通后将 容器名 放到了 网络下
            一个容器两个ip      
    docker实例:
            
        安装Nginx: 拉取镜像:docker pull nginx 创建容器:docker run
    -di --name=mynginx -p 80:80 nginx 安装mysql: 拉取镜像:docker pull centos/mysql-57-centos7 创建容器:docker run -di --name=mysql -p 33306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql 注:-p 代表端口映射,格式为 宿主机映射端口:容器运行端口 -e 代表添加环境变量 MYSQL_ROOT_PASSWORD 是root用户的登陆密码 远程登录mysql 连接宿主机的IP ,指定端口为33306 安装redis:
           1>   拉取镜像:docker pull redis   创建容器:docker run
    -di --name=myredis -p 6379:6379 redis

           2>1.拉取镜像 docker pull redis
            2.创建conf与data文件夹
            3.在充分中创建 redis.conf,内部写入
                bind 0.0.0.0 #绑定地址
                daemonize NO
                protected-mode no #允许远程连接
                requirepass 123456 #密码
            4.docker run -p 6379:6379 --name=myredis
               -v /home/test/redis/conf/redis.conf:/etc/redis/redis.conf
               -v /home/test/redis/data:/data -d redis:alpine3.11 redis-server /etc/redis/redis.conf
               --appendonly yes # 默认持久化方式
    高级使用:
           
         迁移与备份:
    -1.容器保存为镜像: docker commit mynginx mynginx_i -2.镜像备份(tar文件): docker save -o mynginx.tar mynginx_i -3.恢复与迁移: -1.删除掉mynginx_img镜像 -2.docker load -i mynginx.tar Dockerfile: 定义:是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像(本质:dockerfile能生成镜像)
              注: 文件名必须叫dockerfile
    1、对于开发人员:可以为开发团队提供一个完全一致的开发环境; 2、对于测试人员:可以直接拿开发时所构建的镜像或者通过Dockerfile文件构建一个新的镜像开始工作了; 3、对于运维人员:在部署时,可以实现应用的无缝移植
           命令:
             FROM image_name:tag               :定义了使用哪个基础镜像启动构建流程
             MAINTAINER user_name              :声明镜像的创建者
             ENV key value                     :设置环境变量 (可以写多条)
             RUN command                       :是Dockerfile的核心部分(可以写多条)
             eg:
               
             WORKDIR path_dir           :设置工作目录          ADD source_dir
    /file dest_dir/file :将宿主机的文件复制到容器内
                                     注:如果是压缩文件,会在复制后自动解压
             COPY source_dir
    /file dest_dir/file :和ADD相似,但是如果有压缩文件并不能解压
      
    
    
                使用脚本创建镜像:
                    -1.创建目录: mkdir –p /usr/local/dockerdjango
                    -2.创建文件Dockerfile: vi Dockerfile
                    -3.相关配置
                        #依赖镜像名称和ID
                        FROM python:3.6
                        #指定镜像创建者信息
                        MAINTAINER TEST
                        #切换工作目录
                        WORKDIR /usr
                        RUN mkdir  /usr/local/mydocker
                        RUN pip install django==1.11.9
                        ENV PATH $JAVA_HOME/bin:$PATH
                    -4.执行命令构建镜像: docker build -t='django1.11.9' .
                        注: 空格yu.不能省略
                    -5.查看镜像是否建立完成: docker images
                    
            docker私有库:
                搭建与配置:
                    -1.拉取私有仓库镜像: docker pull registry
                    -2.启动私有仓库容器: docker run -di --name=registry -p 5000:5000 registry
                    -3.查看是否成功:
                        打开http://192.168.1.12:5000/v2/_catalog看到{"repositories":[]} 表示私有仓库搭建成功并且内容为空
                    -4.修改daemon.json
                        vi /etc/docker/daemon.json 下 添加 {"insecure-registries":["192.168.1.12:5000"]} 
                        保存,退出  让 docker信任私有仓库地址
                    -5.重启docker 服务  systemctl restart docker
                    
                镜像上传私有库:
                    -1.标记此镜像为私有仓库的镜像
                        docker tag django2.0 192.168.1.12:5000/django2.0
                    -2.再次启动私服容器: docker start registry
                    -3.上传标记的镜像: docker push 192.168.1.12:5000/django2.0
  • 相关阅读:
    NOIP2015 斗地主
    BZOJ 2120: 数颜色
    BZOJ 1014: [JSOI2008]火星人prefix
    BZOJ 4665: 小w的喜糖
    BZOJ 3665: maths
    BZOJ 3270: 博物馆
    BZOJ 1419: Red is good
    【转】二分图的最大匹配
    POJ 3026 Borg Maze(Prim+BFS建邻接矩阵)
    POJ 2485 Highway(Prim+邻接矩阵)
  • 原文地址:https://www.cnblogs.com/wyf20190411-/p/13720593.html
Copyright © 2011-2022 走看看