美文网首页
Docker初探

Docker初探

作者: 冷枫abc | 来源:发表于2020-01-09 10:23 被阅读0次

    1.docker的优势

    • 更高效的利用系统资源
    • 更快的启动时间
    • 一致的运行环境
    • 持续交付和部署
    • 更轻松的迁移
    • 更轻松的维护和扩展
    docker 默认安装目是   /var/lib/docker
    

    2.Docker和虚拟机的区别

    虚拟机是在硬件级别进行虚拟化,模拟硬件搭建操作系统;而Docker是在操作系统的层面虚拟化,复用操作系统,运行Docker容器。

    Docker的速度很快,秒级,而虚拟机的速度通常要按分钟计算。

    Docker所用的资源更少,性能更高。同样一个物理机器,Docker运行的镜像数量远多于虚拟机的数量。

    虚拟机实现了操作系统之间的隔离,Docker算是进程之间的隔离,虚拟机隔离级别更高、安全性方面也更强。

    3.Docker的基本概念

    镜像(提供容器运行所需要的程序、库、资源、配置文件等其他一些配置参数, 分层存储概念)
    容器(类似一个个独立的进程)
    仓库

    虚悬镜像(dangling image): 镜像没有仓库名或没有标签

    查询显示虚悬镜像
    docker images -f dangling=true
    删除虚悬镜像
    docker rmi $(docker images -q -f dangling=true)

    docker image prune [option] 删除未使用的镜像

    名字, 速记 默认描述
    --all , -a 默认,删除所有未使用的映像,而不仅仅是悬空映像
    --filter 提供过滤值(例如'until =“)
    --force , -f 不要提示确认

    docker rm & docker rmi & docker prune 的差异

    docker rm : 删除一个或多个 容器
    docker rmi : 删除一个或多个 镜像
    docker prune: 用来删除不再使用的 docker 对象

    利用 commit 理解镜像构成

    注意: docker commit 命令除了学习之外,还有一些特殊的应用场合,比如被 入侵后保存现场等。但是,不要使用 docker commit 定制镜像,定制镜像应该 使用 Dockerfile 来完成。如果你想要定制镜像请查看下一小节。 镜像是容器的基础,每次执行 docker run 的时候都会指定哪个镜像作为容器运 行的基础。在之前的例子中,我们所使用的都是来自于 Docker Hub 的镜像。直接 使用这些镜像是可以满足一定的需求,而当这些镜像无法直接满足需求时,我们就 需要定制这些镜像。接下来的几节就将讲解如何定制镜像。 回顾一下之前我们学到的知识,镜像是多层存储,每一层是在前一层的基础上进行 的修改;而容器同样也是多层存储,是在以镜像为基础层,在其基础上加一层作为 容器运行时的存储层。 现在让我们以定制一个 Web 服务器为例子,来讲解镜像是如何构建的。
    docker run --name webserver -d -p 80:80 nginx
    第一次本机没有会从远端下载

    image.png
    这条命令会用 nginx 镜像启动一个容器,命名为 webserver ,并且映射了 80 端口,这样我们可以用浏览器去访问这个 nginx 服务器。 如果是在 Linux 本机运行的 Docker,或者如果使用的是 Docker Desktop for Mac/Windows,那么可以直接访问:http://localhost;如果使用的是 Docker Toolbox,或者是在虚拟机、云服务器上安装的 Docker,则需要将 localhost 换 为虚拟机地址或者实际云服务器地址。 直接用浏览器访问的话,我们会看到默认的 Nginx 欢迎页面。例如本机IP为 192.168.70.128:80
    image.png

    现在我们定制好了变化,我们希望能将其保存下来形成镜像。
    可以使用以下命令保存镜像
    docker commit --author "Tao Wang <twang2218@gmail.com>" --message "修改了默认网页" webserver nginx:v2
    新的镜像定制好后,我们可以来运行这个镜像。docker run --name web2 -d -p 81:80 nginx:v2
    如下图所示

    image.png

    docker commit命令一般不使用此命令,原因有如下几点:

    • 过程中涉及到的其他很多无关操作会被牵扯进来,导致镜像十分臃肿
    • 所有操作都为黑箱操作,其他人无法得知
    • 后期的每一次修改都影响巨大,使镜像更为臃肿

    Dockerfile 基础镜像选择

    先看看基础镜像的dockerfile,它们是么创建出来的。
    
    scratch
    空镜像
    
    alpine
    FROM scratch
    ADD rootfs.tar.xz /
    CMD ["/bin/sh"]
    
    debian
    FROM scratch
    ADD rootfs.tar.xz /
    CMD ["bash"]
    
    
    centos/fedora/ubuntu
    FROM scratch
    ADD centos-7.4.1708-docker.tar.xz /
    LABEL name="CentOS Base Image" \
        vendor="CentOS" \
        license="GPLv2" \
        build-date="20170911"
    CMD ["/bin/bash"]
    
    建议
    docker是容器不同于虚拟机,运行之后只有应用程序在里面运行,基础镜像只是为应用程序提供依赖包。应用程序是主,基础镜像是次。
    如果没有必要,选择最小的依赖环境alpine,然后在这个基础上制作自己的镜像。
    
    

    相关文章

      网友评论

          本文标题:Docker初探

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