美文网首页
day05(docker容器)

day05(docker容器)

作者: 五月_w | 来源:发表于2019-07-23 08:27 被阅读0次

    1、什么是容器?

    
    容器就是在隔离的环境运行的一个进程,如果进程停止,容器就会销毁。
    隔离的环境拥有自己的系统文件、IP地址、主机名等
    系统文件:kvm虚拟机、linux
    程序:代码,命令
    进程:正在运行的程序
    
    

    2、容器和虚拟化的区别

    
    容器:共用宿主机内核,轻量级,损耗少,启动快,性能高
    
    kvm虚拟化:需要硬件的支持,需要模拟硬件,可以运行不同的操作系统,需要走开机流程
    
    
    

    3、容器技术的发展过程

    
    1):chroot技术,新建一个子系统(拥有自己完整的系统文件)
    参考资料:https://www.ibm.com/developerworks/cn/linux/l-cn-chroot/
    chang root
    
    作业1:使用chroot监狱限制SSH用户访问指定目录和使用指定命令
    https://linux.cn/article-8313-1.html
    ls
    
    2):linux容器(lxc)  linux container(namespaces 命名空间 隔离环境 及cgroups 资源限制)
    
    cgroups  限制一个进程能够使用的资源。cpu,内存,硬盘io
    
    kvm虚拟机:资源限制(1c 1G 20G)
    
    
    ##需要使用epel源
    #安装epel源
    yum install epel-release -y
    
    #编译epel源配置文件
    vi  /etc/yum.repos.d/epel.repo
    [epel]
    name=Extra Packages for Enterprise Linux 7 - $basearch
    baseurl=https://mirrors.tuna.tsinghua.edu.cn/epel/7/$basearch
    #mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-7&arch=$basearch
    failovermethod=priority
    enabled=1
    gpgcheck=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
    
    [epel-debuginfo]
    name=Extra Packages for Enterprise Linux 7 - $basearch - Debug
    baseurl=https://mirrors.tuna.tsinghua.edu.cn/epel/7/$basearch/debug
    #mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-debug-7&arch=$basearch
    failovermethod=priority
    enabled=0
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
    gpgcheck=1
    
    [epel-source]
    name=Extra Packages for Enterprise Linux 7 - $basearch - Source
    baseurl=https://mirrors.tuna.tsinghua.edu.cn/epel/7/SRPMS
    #mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-source-7&arch=$basearch
    failovermethod=priority
    enabled=0
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
    gpgcheck=1
    
    ##安装lxc
    yum install lxc-* -y
    yum install libcgroup* -y
    yum install bridge-utils.x86_64 -y
    
    
    ##桥接网卡
    [root@controller ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 
    echo 'TYPE=Ethernet
    BOOTPROTO=none
    NAME=eth0
    DEVICE=eth0
    ONBOOT=yes
    BRIDGE=virbr0' >/etc/sysconfig/network-scripts/ifcfg-eth0
    
    
    [root@controller ~]# cat /etc/sysconfig/network-scripts/ifcfg-virbr0 
    echo 'TYPE=Bridge
    BOOTPROTO=static
    NAME=virbr0
    DEVICE=virbr0
    ONBOOT=yes
    IPADDR=10.0.0.11
    NETMASK=255.255.255.0
    GATEWAY=10.0.0.254
    DNS1=180.76.76.76' >/etc/sysconfig/network-scripts/ifcfg-virbr0
    
    ##启动cgroup
    systemctl start cgconfig.service
    
    ##启动lxc
    systemctl start lxc.service
    
    ##创建lxc容器
    方法1:
    lxc-create -t download -n centos6 -- --server mirrors.tuna.tsinghua.edu.cn/lxc-images -d centos -r 6 -a amd64
    方法2:
    lxc-create -t centos -n test
    
    #####为lxc容器设置root密码:
    [root@controller ~]# chroot /var/lib/lxc/test/rootfs passwd
    Changing password for user root.
    New password: 
    BAD PASSWORD: it is too simplistic/systematic
    BAD PASSWORD: is too simple
    Retype new password: 
    passwd: all authentication tokens updated successfully.
    
    
    
    ##为容器指定ip和网关
    vi /var/lib/lxc/centos7/config
    lxc.network.name = eth0
    lxc.network.ipv4 = 10.0.0.111/24
    lxc.network.ipv4.gateway = 10.0.0.254
    
    ##启动容器
    lxc-start -n centos7
    
    3):docker容器
    centos7.4   2G   10.0.0.11  docker01    host解析
    centos7.4   2G   10.0.0.12  docker02    host解析
    
    Docker是通过进程虚拟化技术(namespaces及cgroups cpu、内存、磁盘io等)来提供容器的资源隔离与安全保障等。由于Docker通过操作系统层的虚拟化实现隔离,所以Docker容器在运行时,不需要类似虚拟机(VM)额外的操作系统开销,提高资源利用率。
    namespace  资源隔离
    cgroups    进程的资源限制
    kvm       虚拟磁盘文件,资源隔离
    kvm       资源限制,--cpus --memory
    
    docker 初期把lxc二次开发,libcontainer
    
    top
    htop
    
    
    
    docker的主要目标是"Build,Ship and Run any App,Angwhere",构建,运输,处处运行
    部署服务,环境问题
    
    一次构建,处处运行
    
    docker是一种软件的打包技术
    
    
    构建:做一个docker镜像
    运输:docker pull
    运行:启动一个容器
    每一个容器,他都有自己的系统文件rootfs.
    
    kvm解决了硬件和操作系统之间的依赖
    kvm独立的虚拟磁盘,xml配置文件
    
    docker解决了软件和操作系统环境之间的依赖,能够让独立服务或应用程序在不同的环境中,得到相同的运行结果。
    docker镜像有自己的文件系统。
    
    docker容器是一种轻量级、可移植、自包含的软件打包技术,使应用程序可以在几乎任何地方以相同的方式运行。开发人员在自己笔记本上创建并测试好的容器,无需任何修改就能够在生产系统的虚拟机、物理服务器或公有云主机上运行
    
    
    

    4、docker的安装

    
    10.0.0.11:修改主机名和host解析
    rm -fr /etc/yum.repos.d/local.repo
    curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
    wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo
    sed -i 's#download.docker.com#mirrors.tuna.tsinghua.edu.cn/docker-ce#g' /etc/yum.repos.d/docker-ce.repo
    yum install docker-ce -y
    
    
    

    5、docker的主要组成部分

    
    docker是传统的CS架构分为docker client和docker server,向mysql一样    
    
    命令:docker version 
    docker info(如果要做监控)
    
    docker主要组件有:镜像、容器、仓库, 网络,存储
    
    启动容器必须需要一个镜像,仓库中只存储镜像
    容器---镜像---仓库
    
    
    

    6、启动第一个容器

    
    ##配置docker镜像加速 vi /etc/docker/daemon.json { "registry-mirrors": ["https://registry.docker-cn.com"] }
    
    
    docker run -d -p 80:80 nginx
    run 创建并运行有个容器
    -d 放在后台
    -p 端口映射
    nginx docker镜像的名字
    
    

    7、docker的镜像管理

    
    docker search  搜索镜像(优先选择官方的,其次是评分高的)
    
    官方镜像仓库地址:hub.docker.com
    
    docker pull(push)  获取镜像
    docker pull centos6.9(官方pull没有指定版本,默认下载最新版本)
    docker pull  daocloud.io/huangzhichong/alpine-cn:latest   (私有仓库)
    
    
    
    docker images 或 docker image ls   查看镜像列表
    docker rmi 或  docker image rm 
         例子:docker image rm centos:latest 
    docker image save centos >docker_centos7.6.tar.gz    导出镜像
    docker image load -i docker_centos7.6.tar.gz    导入镜像
    
    

    8、docker的容器管理

    
    docker run -d -p 80:80 nginx:latest
    run 创建并运行一个容器
    -d   放在后台
    -p  映射端口
    
    
    docker run -it --name centos6.9 /bin/bash 
      -it  分配交互式的终端
    --name  指定容器的名字
    /bin/bash  覆盖容器的初始命令 
    
    
    
    docker run image_name   启动容器
    
    docker stop CONTAINER_ID   停止容器
    
    docker kill CONTAINER_name   杀死容器
    
    docker rm   -f CONTAINER_ID   删除容器
    
    docker rm -f  `docker ps -a -q`  批量删除容器
    
    docker ps (-a -l -q)    查看容器列表
    
    docker exec   进入容器(调试、排错)
    docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
    docker exec -it  容器id或容器名字 /bin/bash(/bin/sh)   
    
    
    

    9、docker容器的网络访问(端口映射)

    
    -p hostPort:containerPort 
    指定映射(docker 会自动添加一条iptables规则来实现端口映射)
    
    -p  ip:hostPort:containerPort 
    多个容器都想使用80端口
    
    -p ip::containerPort   
    随机端口
    
    -p hostPort:containerPort:udp
    -p 10.0.0.100::53:udp 使用宿主机的10.0.0.100的这个ip地址的随机端口的udp协议映射容器的udp53端口
    
    -p 80:80 -p 443:443  可以指定多个p
    
    docker run -P  随机端口
    
    通过iptables 来实现端口映射
    
    

    相关文章

      网友评论

          本文标题:day05(docker容器)

          本文链接:https://www.haomeiwen.com/subject/xxtilctx.html