zoukankan      html  css  js  c++  java
  • Docker学习

    Docker

    docker是什么?

    docker最初是dotCloud公司创始人Solomom Hykes在法国期间发起的一个公司内部项目,它是基于dotCloud公司多年云服务技术的一次革新,并在2013年3月以Apache2.0授权协议开源,主要项目代码在GitHub上进行维护...

    docker是linux容器的一种封装,提供简单易用的容器使用接口,它是最流行的linux容器解决方案.docker的接口非常简单,用户可以方便的创建和销毁容器,docker将应用程序的依赖,打包在一个文件里面,运行这个文件就会生成虚拟容器,程序运行在虚拟容器里,如同真实物理机上运行一样,反正就是有了docker,就不用担心讨厌的环境配置问题了!

    为什么要用docker?

    它作为一种新兴的虚拟化方式,Docker跟传统的虚拟化方式相比具有众多的优势.

    docker容器的优势

    • 更高效的利用系统资源
    • 更快速的启动时间
    • 一直的运行环境
    • 持续交付和部署
    • 更轻松的迁移
    • 更轻松的维护和扩展

    docker的生命周期

    镜像 (images)

    Docker镜像就是一个只读的模板,镜像可以用来创建容器.docker提供了一个很简单的机制来创建镜像或更新现有镜像,用户甚至可以从其他人那里下载已经做好的镜像直接使用

    容器 (container)

    镜像(image)和容器(container)的关系,就像面向对象中类和实例的关系一样,镜像是静态定义的class ;容器是镜像运行时的实体object
    
    #容器随时都可以被创建,暂停,销毁,停止,每个容器都是相互隔离的,保证安全的平台,docker利用容器运行应用.
    
    #我们也可以把容器看作简易的linux环境.

    仓库 (repository)

    仓库是存放镜像文件的场所,分为公开仓库(public)和私有仓库(Private)
    
    #最大的公开仓库就是Docker Hub,存放了数量庞大的镜像供用户下载.
    
    #用户创建自己镜像之后就可以使用push命令将它上传到公开或私有库,这样另外一台机器使用的时候,只需要从仓库上pull下来即可  
    
    #Docker仓库和Git的概念类似,仓库注册服务器和GitHub这样的代码托管服务类似.

    部署docker

    ###注意: 若之前装过docker,可用以下命令移除docker
     # yum remove docker
    
    ###步骤
        1.  安装必要的系统工具
        # yum install -y yum-utils device-mapper-persistent-data lvm2  
        
        2.  添加软件源信息
        # yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo  
        
        3. 更新 yum 缓存 
        # yum makecache fast
    
        4. 安装docker-ce
        # yum -y install docker-ce
    
        5. 启动docker
        # systemctl start docker
    
        6. 测试运行 hello-world
        # docker run hello-world
        ## 如果测试失败,首先测试如下: 
        # #docker version | docker info  #两个命令都没问题的话再进行分析问题.
    
       
        7.安装docker之后,测试hello-world镜像,终端卡在Unable to find image 'hello-world:latest' locally位置 ?
        
        #分析 : docker在本地没有找到hello-world镜像,也没有从docker仓库中拉取镜像,出项这个问题的原因:是应为docker服务器再国外,我们在国内无法正常拉取镜像,所以就需要我们为docker设置国内阿里云的镜像加速器;
       #解决 
            1.修改配置文件      /etc/docker/daemon.json  如下:
            {"registry-mirrors": ["https://alzgoonw.mirror.aliyuncs.com"]}
            2. sudo systemctl restart docker #重启docker即可!
    安装docker

    docker常用命令

    docker pull hello-world    #下载docker镜像,产生容器示例
    
    docker run  ubuntu      #运行docker镜像,ubuntu系统
    
    docker run -it ubuntu /bin/bush  #交互式运行ubuntu容器,进入容器空间内  参数解释  -i  交互式的命令操作,-t开启一个终端提供访问,  /bin/bush  指定shell解释器      

    打包构建一个携带vim的contos镜像文件

    1.docker run -it centos /bin/bush #先运行一个centos的基础镜像文件
    
    2.yum install vim -y   #安装vim
    
    3.docker commit 1d5698b91178 (当前镜像id)  lxf163/centos-vim #退出容器空间,提交这个容器,为新的镜像

    导出/导入镜像文件

    docker save 94e814e2efa8     >    /opt/ubuntu.tar.gz   #导出
    
    docker load  94e814e2efa8     <   /opt/ubuntu.tar.gz #导入镜像,自动解压缩

    #---注意运行过docker镜像后,会产生容器记录;docker容器必须有后台程序在运行,否则容器就退出---
    docker image ls   /docker images    #两者都是查看镜像
    
    docker container ls /docker ps  #两者都是查看正在运行的容器进程
    
    docker ps -a  查看所有的容器记录
    
    docker search centos    #查询docker镜像记录

    删 (深思而行)

    docker rm 容器id   # 删除容器记录
    
    docker rm  `docker ps -aq`  # 批量删除容器记录,不推荐操作此命令
    
    docker rm -f  `docker ps -aq`  #强制删除所有容器记录,包括正在运行的容器,慎用!!!
    
    docker rmi  镜像id   #删除镜像记录
    
    docker rmi  `docker images -aq` #批量删除镜像文件

    docker tag 镜像id  新的镜像名  #修改docker镜像名,tag标记名

    docker镜像常用命令

    docker images   #查看所有本级镜像
    
    docker pull redis   # 获取新的redis镜像
    
    docker  search nginx  #搜索nginx 的镜像

    容器相关

    docker  start/stop  容器id   #启/停docker容器
    
    docker run -it --rm 94e /bin/bash  # --rm运行容器,退出后,删除容器记录
    
    docker run  --name  mynginx  881  /bin/bash  #运行容器后给其命名
    
    docker run -d centos /bin/sh -c "while true;do echo hello centos; sleep 1;done" #后台不断运行一个shell语句  -d后台运行, -C指定一个shell语句  
    
    docker logs 容器id    #查看容器空间内的日志 !!!
    docker logs -f   容器id   #不间断打印容器内日志信息
    
    docker exec -it 容器id   /bin/bash  # 进入正在运行的容器空间

     启动容器的方式

    启动容器的方式有两种:
    
    #1.基于镜像新建一个容器并启动,也就是新建一个容器     docker run nginx
    #2.在处于(stopped)停止状态下的容器重新启动,利用原来启动过的容器id启动.  docker start as5
    
    #因为Docker的容器太过于轻量级,大部分用户都是随时删除,随时创建.

    外部访问容器

    在容器中可以运行网络应用,但是要让外部也可以访问这些应用,可以通过-P 和-p参数进行端口映射!!!

    docker的端口映射

    -P  #大写P参数会随机映射端口到容器开放的网络端口
    
    docker run -d  -P training/webapp python app.py

     检查映射的端口

    docker ps -l   #0.0.0.0:32771->5000/tcp
    
    其中32771是宿主机ip的端口,5000是容器端口

    最好通过-p参数指定映射端口,因为-P参数随机映射端口,给访问带来极大不便

    docker run -d -p 9999:5000 training/webapp python app.py
    52ceb29239466617e2ebff333fbb9e59514910d1309961c6a94a191fbf68a646

    查看指定容器的端口映射

    #[root@localhost opt]# docker port 52c
        5000/tcp -> 0.0.0.0:32771

    然后通过宿主机ip:9999访问服务器

    dockerfile

    ...待续

  • 相关阅读:
    HTML(六)——表单验证、正则表达式、事件
    ADO。Net(二)——防止SQL注入攻击
    ADO.Net(一)——增、删、改、查
    【转】高性能服务器架构(High-Performance Server Architecture)
    【Python】使用Python将Shellcode转换成汇编
    【技术知识】恶意PDF文件分析-PDFdump的问题
    【逆向工具】IDA Python安装与使用
    【windows核心编程】HideProcess
    Virut.ce-感染型病毒分析报告
    【黑客免杀攻防】读书笔记11
  • 原文地址:https://www.cnblogs.com/CrazySheldon1/p/10527026.html
Copyright © 2011-2022 走看看