zoukankan      html  css  js  c++  java
  • day01-Docker

    1.Namespace 资源隔离

    保证应用于应用隔离

    • pid 进程编号
    • net 网络设备,网络协议栈,端口
    • ipc 信号量,消息队列,共享内存,内存隔离
    • mount 文件系统,挂载点
    • uts 主机名和主机域
    • user 操作进程的用户和用户组(linux内核在3.8以上才实现,所以centos要7以上)

    上述6个方面做到隔离,才能叫做充分隔离

    2.容器化技术探索

    chroot 切根,给应用程序切根,就好像应用程序再挂载点上运行,1979年的方案。文件系统的独立和隔离
    2000年,freebsd,
    cgroups操作系统内核,独立的控制cpu资源,内存资源
    lxc,linux container 开启了容器在生产上应用的脚步,应用程序6个维度上的隔离
    docker,2013出现,一桶容器脚本,简单,快捷,高效,便利,统一。隔离做的非常好

    一次设计,多次使用
    基于容器的,轻量级解决方案

    容器引擎

    3.核心

    内核,用的是宿主机内核。二进制空间和libs都用的自己的
    qumo,虚拟机的磁盘io,损耗大
    aufs,docker是挂载的,磁盘性能要优于虚拟化,节约成本
    帮助企业和老板,省纯利润

    4.yum源,epel源装好

    yum list docker --show-duplicates
    // 可以发现里面的版本还是1.13.1-102
    yum install -y yum-utils
    yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    yum install epel-release -y
    

    5.安装docker-ce

    yum install docker-ce -y
    

    6.启动docker引擎

    systemctl enable docker
    systemctl start docker
    

    7.docker命令

    mkdir /etc/docker
    docker info
    
    
    

    8.修改配置文件

    vim /etc/docker/daemon.json

    graph:工作目录
    registry-mirrors: 国内镜像站
    bip: docker的网络,建议容器地址和宿主机的ip地址最后2位是一样的
    exec-opts:执行参数
    live-restore:引擎死掉,用引擎起来的容器还活着
    {
        "graph":"/data/docker", 
        "storage-driver":"overlay2",
        "insecure-registries":[
            "registry.access.redhat.com",
            "quay.io"
        ],
        "registry-mirrors":[
            "https://q2qr04ke.mirror.aliyuncs.com"
        ],
        "bip":"172.7.5.0/24",
        "exec-opts":[
            "native.cgroupdriver=systemd"
        ],
        "live-restore":true
    }
    

    9.详细文档

    https://cloud.tencent.com/developer/article/1701451
    yum install docker-ce-18.03.1.ce
    

    13.docker镜像

    docker search
    docker pull

    14.docker镜像特性

    一层一层叠加的
    writable 层
    apache image(只读层)
    centos image(只读层)
    base image(只读层)
    docker镜像位于bootfs纸上
    (bootfs底层依赖的库,和内核交互的东西)

    15.docker容器的基本操作

    镜像-》实例化而来的
    (1)查看本地的容器进程

    docker ps -a
    

    (2)查看镜像

    docker images | grep hello
    

    (3)启动容器

    docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
    -i : 启动可交互的容器,并持续打开标准输入
    -t:表示使用终端关联到容器的标准输入上
    -d:表示容器放置后台运行
    -rm:退出后删除容器
    -name:表示定义容器唯一名称
    IMAGE:表示要运行的容器
    COMMAND:表示启动容器时要运行的命令
    

    docker run -it oldboy1103/alpine:latest /bin/sh

    docker run --rm oldboy1103/alpine:latest /bin/echo hello
    

    运行完后,docker ps -a是看不到,输出hello后就退出了,自己把它从ps -a中删了

    非交互式启动后台容器

    docker run -d --name myalpine oldboy1103/alpine:latest /bin/sleep 300
    

    运行到后台,并要指定init为1的pid

    (4)查看容器中的应用在宿主机是否能查到

    ps aux | grep sleep | grep -v grep 
    

    (5)docker 进入up状态的容器

    docker exec -it e0b7fcf28418 /bin/sh
    

    (6)停止容器

    docker ps -a 查看当前容器
    docker stop e0b7fcf28418
    docker restart e0b7fcf28418
    

    (7)删除容器
    docker rm e0b7fcf28418

    (8)批量删除宿主机上的所有容器

    for i in `docker ps -a | grep -i exit | sed '1d' | awk '{print $1}'`
    do
        docker rm -f $i
    done
    

    (9)提交修改到容器里

    docker commit -p e0b7fcf28418 oldboy1103/alpine:v3.10.3_with_1.txt  // 产生了新的镜像,固话到了只读层
    

    (10)导出镜像

    docker save  imageId > alpine:v3.10.3_with_1.txt.tar
    

    (11)干掉镜像

    docker rmi -f e0b7fcf28418
    

    (12)导入镜像

    docker load < alpine:v3.10.3_with_1.txt.tar
    docker tag e0b7fcf28418 oldboy1103/alpine:v3.10.3_with_1.txt
    

    (13)如何查看容器的日志

    docker run hello-world 2>&1 >> /dev/null
    
    docker logs e0b7fcf28418
    docker logs -f e0b7fcf28418
    

    16.docker容器的高级操作

    映射端口

    docker run -p 容器外端口:容器内端口
    (1)下载nginx镜像
    docker pull nginx:1.2.3
    (2)查看镜像
    docker images ls
    (3)打个标签
    docker tag 4037a5563b03 oldboy1103/nginx:v1.2.3
    (4)查看镜像
    docker images
    (5)映射端口
    docker run --rm -name mynginx -d -p81:80 oldboy1103/nginx:v1.2.3
    netstat -tulnp | grep 81

    curl 127.0.0.1:81

    挂载数据卷

    docker run -v 容器外目录:容器内目录
    宿主机上创建目录mkdir ~/html
    wget htpp://baidu.com -O ~/html/index.html

    docker run -d --rm --name nginx_with_baidu -p81:80 -v /root/html:/usr/share/nginx/html oldboy1103/nginx:v1.2.3
    
    docker inspect 4037a5563b03 // 容器运行的一些细节
    docker exec -it nginx_with_baidu /bin/bash
    # ls /usr/share/nginx/html
    

    看到16视频的14:23秒

    传递环境变量

    docker run -e 环境变量key:变量变量value

    容器内安装软件(工具)

    yum/apt-get/apt等

    原创:做时间的朋友
  • 相关阅读:
    android中fragment的获取与隐藏
    Android Toolbar教程,Android标题栏经典设计教程
    Android6.0以后,在BroadcastReceiver中启动AlertDialog导致程序停止运行的问题及解决办法
    java数据结构和算法--------第六章
    动态规划--------0和1背包问题
    动态规划------平均切分数组之和为两部分
    java数据结构和算法-----第四章
    java数据结构和算法-------第三章
    java数据结构和算法----第二章
    动态规划----Ones and Zeroes
  • 原文地址:https://www.cnblogs.com/PythonOrg/p/15239653.html
Copyright © 2011-2022 走看看