• Docker快速入门


    Docker能解决什么问题?

    长期以来,应用程序的部署面临一个很头疼的问题:应用程序的运行依赖于环境和配置,比如一个基于Node.js的程序,在A机器上可以运行,到了B机器上却报错,原因是B机器上的Node.js版本和A机器上的不一样,直接的解决方案当然是在B机器上再安一个与A同版本的Node.js,但如果另一个程序恰好依赖另一个版本的Node.js版本呢?另外,这只是一个依赖,如果有几十上百个依赖呢?再另外,这只是在一台机器上部署,如果需要部署到成千上万台机器/实例上呢?

    Docker是什么?它如何解决这个问题?

    Docker是一种虚拟化技术,它可以将应用及其所需的运行环境整体打包进一个“容器”里,从而可以在任何一个安装了Docker客户端的机器上直接运行,并且确保运行环境完全一致。Docker有点像虚拟机,但比虚拟机更轻量,它没有模拟硬件和操作系统,只是进程级的资源隔离,不同的Docker容器会共享内核资源。

    Docker核心概念

    镜像(Image)

    用于创造容器的模板。可以把镜像理解为一个文件系统,存放可以运行在Linux内核之上的程序和相应的数据。

    镜像有两个特点:

    1. 分层(Layer)。一个镜像可以由多个中间层组成,也可以通过在已有镜像上添加一层来生成新的镜像(这也是最常用的创建新镜像的方式)。

    2. 只读(read-only)。镜像一旦生成,便不能修改。因此多个容器可以共用同一个镜像。

    镜像有镜像id镜像名,前者是一串12位的hash字符串,后者由仓库名和标签组成,比如 nginx:1.19.4 这个镜像,其仓库名是nginx,标签是1.19.4。

    容器(Container)

    容器是镜像的运行实例,是一个运行在沙盒环境里、独立于宿主机的隔离进程,并且拥有自己的网络和命名空间。

    容器其实是在镜像上面添加一层“可读可写层”来实现的。

    仓库(Repository)

    仓库是存放镜像的地方,就像Github存放源码、npm registry存放npm包一样,可以方便地托管并在不同的机器之间共享镜像。

    Docker Hub是Docker官方提供的公共仓库,组织内部也可以自己搭建私有仓库。仓库里的镜像有标签(Tag)的概念,可以理解为版本控制。这些都非常类似于Github、npm registry,很好理解。

    Docker基本操作

    镜像操作

    # 查看所有镜像操作
    docker image --help
    
    # 从仓库拉取镜像
    docker image pull [OPTIONS] NAME[:TAG|@DIGEST]
    # 或
    docker pull [OPTIONS] NAME[:TAG|@DIGEST]
    # 例
    docker pull nginx
    
    # 查看本地镜像
    docker image ls
    #或
    docker images

    # 查看虚悬镜像(pull新版本镜像后,旧版本镜像的仓库、tag均被置为none,是为“虚悬镜像”)
    docker image ls -f dangling=true

    # 删除未使用的镜像
    docker image prune

    # 删除指定镜像
    docker image rm [OPTIONS] IMAGE1,IMAGE2,...
    # 或
    docker rmi [OPTIONS] IMAGE1,IMAGE2,...

    # 从本机指定路径导入镜像
    docker load < /path/to/image.tar.gz

    # 导出镜像到指定路径
    docker image save /path/to/image.tar.gz

    容器操作

    # 查看所有容器操作
    docker container --help
    
    # 创建并启动容器
    docker run [OPTIONS] IMAGE
    # 例
    # -p指定端口号(宿主:容器内部),--name指定容器名
    docker run -p 80:80 nginx -name webserver nginx
    
    # 启动已有容器
    docker start CONTAINER_ID
    
    # 查看本地(运行中的)容器
    docker container ls
    # 或
    docker ps
    # 例
    # -a 查看本地所有容器,包括未运行的, -q只显示容器id
    docker ps -aq
    
    # 停止容器运行
    docker stop CONTAINER_ID1,CONTAINER_ID2,...
    # 例:停止所有容器
    docker stop $(docker ps -qa)
    
    # 删除容器
    docker container rm CONTAINER_ID
    # 或
    docker rm CONTAINER_ID

    参考链接

    1. Docker官方文档

    2. 《Docker的三大核心组件:镜像、容器与仓库》

    3. 《Docker容器实战-深入理解》

  • 相关阅读:
    使用python抓取知乎日报的API数据
    git 使用笔记(三)-分支的使用
    git 使用笔记(二)
    git 使用笔记(一)
    Grunt的配置和使用(一)
    笔记-Node.js中的核心API之HTTP
    笔记-Nodejs中的核心API之Events
    (译)Node.js的 EventEmitter 教程
    高性能网站优化-确保异步加载脚本时保持执行顺序
    linux环境下source vimrc提示错误unexpected token `"autocmd"'
  • 原文地址:https://www.cnblogs.com/leegent/p/14008247.html
Copyright © 2020-2023  润新知