zoukankan      html  css  js  c++  java
  • 02 : docker

    docker容器
    1:什么是容器?
    容器就是在隔离的环境运行的一个进程,如果进程停止,容器就会销毁。隔离的环境拥有自己的文件系统,ip地址,主机名等

    2:容器和虚拟化的区别
    linux容器技术,容器虚拟化和kvm虚拟化的区别
    kvm虚拟化: 需要硬件的支持,需要模拟硬件,可以运行不同的操作系统,启动时间分钟级(开机启动流程)
    linux开机启动流程 --bios开机硬件自检 --bios设置的优先启动项 --读取mbr引导 -- 加载内核 --启动第一个进程
    kvm解决了硬件和操作系统之间的依赖
    kvm独立的虚拟磁盘,xml配置文件

    容器虚拟化:不需要硬件的支持。不需要模拟硬件,共用宿主机的内核,启动时间秒级(没有开机启动流程)
    docker解决了软件和操作系统环境之间的依赖,能够让独立服务或应用程序在不同的环境中,得到相同的运行结果。
    docker镜像有自己的文件系统。
    docker容器是一种轻量级、可移植、自包含的软件打包技术,使应用程序可以在几乎任何地方以相同的方式运行。开发人员在自己笔记本上创建并测试好的容器,无需任何修改就能够在生产系统的虚拟机、物理服务器或公有云主机上运行。


    总结:
    (1)与宿主机使用同一个内核,性能损耗小;
    (2)不需要指令级模拟;
    (3)容器可以在CPU核心的本地运行指令,不需要任何专门的解释机制;
    (4)避免了准虚拟化和系统调用替换中的复杂性;
    (5)轻量级隔离,在隔离的同时还提供共享机制,以实现容器与宿主机的资源共享。


    3 :docker容器
    Docker是通过内核虚拟化技术(namespaces及cgroups cpu、内存、磁盘io等)来提供容器的资源隔离与安全保障等。由于Docker通过操作系统层的虚拟化实现隔离,所以Docker容器在运行时,不需要类似虚拟机(VM)额外的操作系统开销,提高资源利用率。

    容器本身是一个进程,占用资源过多的情况下,系统内存不足,可能会引起 oom == out of memory 机制。被kill-9杀掉,因此稳定性不如虚拟机好。也正是因此,才诞生了容易编排工具(最出名的k8s,保证容器高可用。)

    docker的主要目标是"Build,Ship and Run any App,Angwhere",构建,运输,处处运行(号称一次构建,到处运行)
    docker是一种软件的打包技术
    (构建,运输,处处运行)解释:
    构建:做一个docker镜像
    运输:docker pull
    运行:启动一个容器
    每一个容器,他都有自己的文件系统rootfs.

    4:docker的安装
    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
    安装docker:
    yum install docker-ce -y (docker社区版(ce),企业版要钱哦)

    5:docker的主要组成部分
    docker是传统的CS架构分为docker client和docker server,和mysql一样

    命令:docker version
    [root@controller ~]# systemctl start docker (启动,加入开机自启enable)
    [root@controller ~]# docker version
    Client: Docker Engine - Community
    Version: 19.03.2
    API version: 1.40
    Go version: go1.12.8
    Git commit: 6a30dfc
    Built: Thu Aug 29 05:28:55 2019
    OS/Arch: linux/amd64
    Experimental: false

    Server: Docker Engine - Community
    Engine:
    Version: 19.03.2
    API version: 1.40 (minimum version 1.12)
    Go version: go1.12.8
    Git commit: 6a30dfc
    Built: Thu Aug 29 05:27:34 2019
    OS/Arch: linux/amd64
    Experimental: false
    containerd:
    Version: 1.2.6
    GitCommit: 894b81a4b802e4eb2a91d1ce216b8817763c29fb
    runc:
    Version: 1.0.0-rc8
    GitCommit: 425e105d5a03fabd737a126ad93d62a9eeede87f
    docker-init:
    Version: 0.18.0
    GitCommit: fec3683

    docker info(如果要做zabbix监控)

    docker主要组件有:镜像、容器、仓库
    启动容器必须需要一个镜像,仓库中只存储镜像
    容器---镜像---仓库

    6:启动第一个容器(docker 运行nginx)
    ##配置docker镜像加速(还有一种方法是修改docker的启动文件)
    vi /etc/docker/daemon.json
    {
    "registry-mirrors": ["https://aeckruos.mirror.aliyuncs.com"]
    }
    重启:
    [root@controller ~]# systemctl restart docker

    运行nginx镜像:
    [root@controller ~]# docker run -d -p 80:80 nginx
    run(创建并运行一个容器)
    -d 放在后台
    -p 宿主机端口映射到容器端口
    nginx docker镜像的名字

    [root@controller ~]# netstat -lntup
    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
    tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 6127/sshd
    tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 6206/master
    tcp6 0 0 :::80 :::* LISTEN 7653/docker-proxy
    tcp6 0 0 :::22 :::* LISTEN 6127/sshd
    tcp6 0 0 ::1:25 :::* LISTEN 6206/master
    访问nginx:
    [root@controller ~]# curl -I 192.168.6.129 或者网页访问:宿主机IP:192.168.6.129
    HTTP/1.1 200 OK
    Server: nginx/1.17.4
    ...

    7:docker的镜像管理
    查看已有镜像:
    docker image ls
    docker images
    搜索镜像
    docker search centos
    NAME DESCRIPTION (描述) STARS(点赞次数) OFFICIAL(是否官方镜像) AUTOMATED(自动构建)
    centos The official build of CentOS. 5616 [OK]
    ansible/centos7-ansible Ansible on Centos7 124 [OK]
    选镜像的建议:
    1,优先考虑官方
    2,starts数量多

    获取镜像
    docker pull(push)(实际内部是使用的这个命令: docker image pull)
    镜像加速器:阿里云加速器,daocloud加速器,中科大加速器,Docker 中国官方镜像加速:https://registry.docker-cn.com

    docker pull alpine (指定版本alpine:3.8 没有指定版本,默认会下载最新版)
    docker pull index.tenxcloud.com/tenxcloud/httpd:latest(下载私有仓库镜像,域名/用户名或者项目名/容器的镜像名称+版本)


    查看镜像
    docker images
    删除镜像
    docker rmi 例子:docker image rm centos:latest
    导出镜像
    docker save 例子:docker image save centos > docker-centos7.4.tar.gz
    导入镜像
    docker load 例子:docker image load -i docker-centos7.4.tar.gz

    查看镜像属性
    docker inspect 例子:docker image inspect load -i docker-centos7.4.tar.gz
    上传镜像
    docker push 例子:docker image push xxx 后面再讲这个命令怎么用
    tag打标签
    docker tag 例子:docker image tag xxx 后面再讲这个命令怎么用,结合push

  • 相关阅读:
    改造MFC程序,使原来不支持winsocket的工程支持winsocket
    算术移位和逻辑移位实现分析
    MFC 编辑框中字体大小改变,行高不能改变,只能显示一半的问题,已解决。
    在MFC中,使用控制台Console输出调试信息
    在MFC中使用GDI+的一般方法,以VC6.0编译器为例
    WinForm 实现主程序(exe)与其关联类库(*.dll)分开存放
    Deserializing/Serializing SOAP Messages in C#
    List分页
    ConvertJavaMiliSecondToDateTime
    中文数字大小写转阿拉伯数字
  • 原文地址:https://www.cnblogs.com/jim-xu/p/11706098.html
Copyright © 2011-2022 走看看