• docker


    常见容器

    web容器/web中间件: nginx apache html php java tomcat python
    nginx+tomcat+jdk    (weblogic)
    nginx+php-fpm
    nginx+uwsgi+django
    mycat mysql-proxy

    容器:应用封装和交付

    Cgroups(Ccontrol Groups)-资源管理
    
    NameSpace-进程隔离
    
    SELinux安全

    docker    ---轻量级虚拟机,共享宿主机内核,秒级启动,基于进程隔离

      rd开发产品(在docker容器里配置开发环境)

      把容器打包成镜像,运维上线

    docker支持将应用打包进一个可以移植的容器中,核心理念:Build once ,Run anywhere  

    > 标准化应用发布,docker容器包含了运行环境和可执行程序,可跨平台主机使用
    > 节约时间,快速部署和启动,VM启动是分钟级别,docker容器是秒级
    > 节约成本,一个虚拟机至少需要几个G的磁盘空间,docker容器可以减少到M级
    > 方便持续集成,通过与代码进行关联是持续集成非常方便
    > 可以作为集群系统的清量主机或节点
    > 方便构建基于SOQ架构或微服务架构的系统,通过服务编排,更好的松耦合

    CI/CD 持续集成/持续发布

    rd(开发功能代码--git)--->git主库--->jenkins服务器(git)--->maven(编译打包测试)--->sshpush(发布代码到线上服务器--->远程执行线上服务器的发布脚本

    docker优势

    >交付标准化
    >一次构建,多次交付
    >应用隔离

    docker3大核心组件

    Docker镜像(images):类似于虚拟机的镜像,是一个面向Docker引擎的只读模板,包含了文件系统。
    
    Docker容器(repository):通过Docker镜像实例化的一个可运行的简易版的Linux系统环境。
    
    Docker仓库(containers):是Docker集中存放镜像文件的场所。

    公有库:docker.io

    私有库:

    docker国内仓库: 

      - aliyun

      -daocloud.io

      .quay.io

    hub.docker.com

     docker镜像加速:

    vim /etc/docker/daemon.json
    
    {
        'registry-mirror': ['https://registry.docker-cn.com']
    }

    下载镜像

    [root@docker ~]# docker pull daocloud.io/library/centos:7
    
    [root@docker ~]# docker pull daocloud.io/library/nginx:latest
    
    [root@docker ~]# docker images               # 查看已有的docker镜像

    centos:7(父镜像)----run容器---安装nginx---打包成镜像(子镜像)---run容器

    Dcoker镜像的构建

    Docker镜像构建的意义:
    
    构建镜像,可以保存对容器的设置、修改,并可移植化的使用;提供了自定义镜像的能力,以软件的形式打包并奋发服务及运行环境
    构建镜像的方法:
    
    docker commit:通过容器构建
    
    docker build:通过Dockerfile文件构建

    docker四种网络模式

    1 host模式
    Docker使用了Linux的Namespaces技术来进行资源隔离,如PID Namespace隔离进程,Mount
    Namespace隔离文件系统,Network Namespace隔离网络等。一个Network Namespace提供了一份独立的网络环境,包括网卡、路由、Iptable规则等都与其他的Network Namespace隔离。一个Docker容器一般会分配一个独立的Network
    Namespace。但如果启动容器的时候使用host模式,那么这个容器将不会获得一个独立的Network Namespace,而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。
    例如,我们在10.10.101.105/24的机器上用host模式启动一个含有web应用的Docker容器,监听tcp80端口。当我们在容器中执行任何类似ifconfig命令查看网络环境时,看到的都是宿主机上的信息。而外界访问容器中的应用,则直接使用10.10.101.105:80即可,不用任何NAT转换,就如直接跑在宿主机中一样。但是,容器的其他方面,如文件系统、进程列表等还是和宿主机隔离的。
     2 container模式
    在理解了host模式后,这个模式也就好理解了。这个模式指定新创建的容器和已经存在的一个容器共享一个Network
    Namespace,而不是和宿主机共享。新创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围等。同样,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。两个容器的进程可以通过lo网卡设备通信。
     3 none模式
    这个模式和前两个不同。在这种模式下,Docker容器拥有自己的Network Namespace,但是,并不为Docker容器进行任何网络配置。也就是说,这个Docker容器没有网卡、IP、路由等信息。需要我们自己为Docker容器添加网卡、配置IP等。
     4 bridge模式
    bridge模式是Docker默认的网络设置,此模式会为每一个容器分配Network Namespace、设置IP等,并将一个主机上的Docker容器连接到一个虚拟网桥上。下面着重介绍一下此模式。host模式
    使用Docker run时使用–net=host指定 Docker使用的网络实际上和宿主机一样,在容器内看到的网卡ip是宿主机上的ip。

    基本使用

    docker info                      # 产看docker基本信息
    docker images # 查看镜像
    docker ps -q # 只查看镜像id
    docker ps-l # 列出最近一次启动的容器 docker search centos   # 查找镜像 docker help search # 查找帮助 man docker-search   # 帮助  docker inspect # 查看底层信息 docker push img # 上传镜像 docker pull img   # 下载镜像 docker history img # 查看镜像历史 docker tag # 修改镜像名称和标签(实际上类似于软连接)

    镜像的备份与恢复

    [root@docker02 ~]# docker save busybox:latest >busybox.tar        # 备份        名称:标签==唯一
    [root@docker01 ~]# docker load < busybox.tar             # 恢复
    [root@docker01 ~]# docker rmi busybox:latest              # 删除镜像

    启动镜像生成容器  

    #[root@docker01 docker_images]# docker run -it img_name:img_tag cmd
    #  cmd 为容器内命令
    [root@docker01 docker_images]# docker run -it centos:latest /bin/bash
    [root@e00f4e1276ff /]# 
    
    [root@docker01 ~]# docker run -it busybox        # 没写命令则运行默认命令,没写标签则使用默认标签latest
    / #

    查看正在运行中的容器

    [root@docker01 ~]# docker ps     #  docker ps -a  #显示所有容器
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    070016611b64        nginx               "/bin/bash"         7 seconds ago       Up 4 seconds        80/tcp, 443/tcp     modest_curie

    docker start | stop | restart                       # 启动/关闭/重启动容器

    docker run 

        -i 交互

        -t 终端

        -d 后台进程

    docker attach|exec            # 进入容器

    docker top                         # 查看容器进程列表

    docker rm                        # 删除容器

    docker ps -aq       # 只显示id

    docker rm $(docker ps -aq)                  #  批量删除  (将docker ps -aq的结果做为docker rm 的参数

    docker cp localpath contaniner:path   # 将本地的文件拷贝到docker容器中

    docker cp containner:path localpath

    [root@docker01 ~]# docker run -itd nginx
    [root@docker01 ~]# docker ps 
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
    5d4c08e376a9        nginx               "nginx -g 'daemon off"   17 seconds ago      Up 14 seconds       80/tcp, 443/tcp     small_mirzakhani
    [root@docker01 ~]# docker inspect 5d4c08e376a9
    [root@docker01 ~]# curl 172.17.0.2
    [root@docker01 ~]# docker top 5d4c08e376a9                                                                                                                                                          ★ --虚拟机--★ 
    UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
    root                4575                4562                0                   16:46               pts/2               00:00:00            nginx: master process nginx -g daemon off;
    104                 4591                4575                0                   16:46               pts/2               00:00:00            nginx: worker process

    docker exec  #   进入容器

    [root@docker01 ~]# docker run -itd centos
    9129436603f4a513c0a798820305457981d002096ff0921dee7feb57364a393f
    [root@docker01 ~]# docker ps 
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
    9129436603f4        centos              "/bin/bash"              8 seconds ago       Up 6 seconds                            gigantic_leakey
    5d4c08e376a9        nginx               "nginx -g 'daemon off"   23 minutes ago      Up 23 minutes       80/tcp, 443/tcp     small_mirzakhani
    [root@docker01 ~]# docker exec -it 9129436603f4 /bin/bash
    [root@9129436603f4 /]# ps -efww
    UID        PID  PPID  C STIME TTY          TIME CMD
    root         1     0  0 09:09 ?        00:00:00 /bin/bash
    root        14     0  0 09:10 ?        00:00:00 /bin/bash
    root        26    14  0 09:11 ?        00:00:00 ps -efww

    docker attach            # 进入容器 ,退出会关闭容器

    ctrl+PQ                     # 退出

  • 相关阅读:
    ajax 异步问题
    mysql update 报 You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column To disable safe mode
    JSON string 和 object 转换
    Mybatis insert 返回主键
    switch case 的值
    $(this).attr("checked") 用jquery取checkbox的值 返回undefined
    7天入门JavaScript,第五天
    7天入门JavaScript,第四天
    7天入门JavaScript,第三天
    保持按钮的高亮状态
  • 原文地址:https://www.cnblogs.com/ray-mmss/p/10397249.html
Copyright © 2020-2023  润新知