Docker入门与应用

Docker入门与应用,第1张

Docker入门与应用 Docker是什么?

Docker是linux容器的一种封装,提供简单易用的容器使用接口。

Docker的接口相当简单,用户可以方便的创建、销毁容器。Docker将应用程序与程序的依赖,打包在一个文件里。运行这个文件就会生成一个虚拟容器,程序运行在虚拟容器里,如同真实物理机上运行一样,有了docker,就不用过多担心环境的问题。

Docker的应用场景
    Web应用的自动化打包和发布。自动化测试和持续集成、发布。在服务型环境中部署和调整数据库或其他应用。

物理机、虚拟机、容器

物理机:相当于一栋楼,一户人家,独立地基,独立花园;

虚拟机:相当于一栋楼多套房,一套房一户人家,共享地基,共享花园,独立卫生间等;(隔离的是 *** 作系统)

容器:一套房隔成多个小房间,每个小房间多个租户,共享地基,共享花园,共享卫生间,宽带等;(隔离的是应用程序)

物理机、虚拟机、容器

物理机:独立部署应用,独立的环境与内核;虚拟机:共享一个服务器的物理资源的 *** 作系统,它可以在实际上是一台计算机的硬件上运行看起来很多单独的计算机,也就是在一个物理机上模拟多个单独的计算机,来实现多个应用的部署,共享同一台物理资源。容器:不是像虚拟机那样虚拟化底层计算机,只是虚拟化 *** 作系统。容器位于物理服务器及其主机 *** 作系统之上 - 通常是Linux或Windows。每个容器共享主机 *** 作系统内核,通常也包括二进制文件和库。共享组件是只读的。

容器与虚拟机拥有着类似的使命:对应用程序及其关联性进行隔离,从而构建起一套能够随处运行的自容纳单元。

虚拟化技术和容器技术的对比

1、虚拟机技术

        我们对虚拟机并不陌生,其实它也可以看作是一个Docker,是一种带环境安装的解决方案,可以在一个 *** 作系统中运行另一个 *** 作系统,对于计算机底层来说,虚拟机就是一个软件而已,不需要的时候就可以删掉,对其他部分毫无影响,我们也可以通过虚拟机实现不同产品的打包发布,但是它也有很多缺点,比如:资源占用多、冗余步骤多、启动慢。

2、容器虚拟化技术

        由于前面虚拟机存在诸多问题,Linux 发展出了另一种虚拟化技术:Linux 容器,Linux 容器不是模拟一个完整的 *** 作系统而是对进程进行隔离,有了容器,我们就可以将软件运行所需的所有资源打包到一个隔离的容器中,容器与虚拟机不同,不需要捆绑一整套 *** 作系统,只需要软件工作所需的库资源和设置。系统因此而变得高效轻量并保证部署在任何环境中的软件都能始终如一地运行。

传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整 *** 作系统,在该系统上再运行所需应用进程。而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。每个容器之间互相隔离,每个容器有自己的文件系统 ,容器之间进程不会相互影响,能区分计算资源。

Docker的概念

镜像(image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。容器(container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。仓库(repository):仓库可看成一个代码控制中心,用来保存镜像。

Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。

Docker 容器通过 Docker 镜像来创建。

容器与镜像的关系类似于面向对象编程中的对象与类。

Docker的优势

更高效的利用系统资源

        容器不需要进行硬件虚拟以及运行完整的 *** 作系统等额外开销,Docker对系统资源的利用率会更高,无论是应用执行速度,还是内存损耗、文件存储速度、都要比传统的的虚拟技术更加高级,因此,相比于虚拟化技术,一个相同配置的主机,往往可以运行更多数量的应用。

更快速的启动时间

        docker容器直接运行与宿主内核,无需启动完整的 *** 作系统,因此可以做到秒级、甚至毫秒级的启动时间,大大节约了开发、测试、部署的时间。

一致的运行环境

        开发过程中,一致性的开发环境相当重要,由于开发环境,生产环境、测试环境的不一致问题,会导致一些bug无法在开发过程中被发现。

持续交付与部署

        对于应用的交付与部署,可以通过Dockerfile来进行镜像构建,并结合持续集成系统进行集成化测试,部署可以直接在生成环境中快速部署该镜像,甚至结合docker持续部署的特性,系统进行自动部署。

轻松迁移

        由于Docker确保了执行环境的一致性,使得应用的迁移更加容易,无论是在物理机,虚拟机,公有云,私有云甚至是在本地笔记本上,其运行结果都是一致的。

Docker的安装与使用 Windows下安装

Docker 并非是一个通用的容器工具,它依赖于已存在并运行的 Linux 内核环境。

Docker 实质上是在已经运行的 Linux 下制造了一个隔离的文件环境,因此它执行的效率几乎等同于所部署的 Linux 主机。

因此,Docker 必须部署在 Linux 内核的系统上。如果其他系统想部署 Docker 就必须安装一个虚拟 Linux 环境

Linux(centos7.8)下安装

docker最低支持centos7且在64位平台上,内核版本在3.10以上

使用官方脚本安装:

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

也可以使用国内daocloud一键安装命令

curl -sSL https://get.daocloud.io/docker | sh

docker 的镜像与容器都存储在 /var/lib/docker

    # 启动、设置开启开机启动

    sudo systemctl start docker
    sudo systemctl enable docker

    # docker启动命令,docker重启命令,docker关闭命令

    启动        systemctl start docker
    守护进程重启   sudo systemctl daemon-reload
    重启docker服务   systemctl restart  docker
    重启docker服务  sudo service docker restart
    关闭docker service docker stop
    关闭docker systemctl stop docker
配置加速

DaoCloud 加速 是广受欢迎的 Docker 工具,解决了国内用户访问 Docker Hub 缓慢的问题。DaoCloud 加速结合国内的 CDN 服务与协议层优化,成倍的提升了下载速度。

# 一条命令加速(记得重启docker)
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://95822026.m.daocloud.io
Docker常用命令

docker --help(中文注解)

Usage:
docker [OPTIONS] COMMAND [arg...]
       docker daemon [ --help | ... ]
       docker [ --help | -v | --version ]
A
self-sufficient runtime for containers.

Options:
  --config=~/.docker Location of client config files #客户端配置文件的位置
  -D, --debug=false               Enable debug mode #启用Debug调试模式
  -H, --host=[] Daemon socket(s) to connect to #守护进程的套接字(Socket)连接
  -h, --help=false                Print usage #打印使用
  -l, --log-level=info Set the logging level #设置日志级别
  --tls=false                     Use TLS; implied by--tlsverify #
  --tlscacert=~/.docker/ca.pem Trust certs signed only by this CA #信任证书签名CA
  --tlscert=~/.docker/cert.pem Path to TLS certificate file #TLS证书文件路径
  --tlskey=~/.docker/key.pem Path to TLS key file #TLS密钥文件路径
  --tlsverify=false               Use TLS and verify the remote #使用TLS验证远程
  -v, --version=false             Print version information and quit #打印版本信息并退出

Commands:
    attach Attach to a running container #当前shell下attach连接指定运行镜像
    build Build an image from a Dockerfile #通过Dockerfile定制镜像
    commit Create a new image from a container's changes #提交当前容器为新的镜像
    cp Copy files/folders from a container to a HOSTDIR or to STDOUT #从容器中拷贝指定文件或者目录到宿主机中
    create Create a new container #创建一个新的容器,同run 但不启动容器
    diff Inspect changes on a container's filesystem #查看docker容器变化
    events Get real time events from the server#从docker服务获取容器实时事件
    exec Run a command in a running container#在已存在的容器上运行命令
    export    Export a container's filesystem as a tar archive #导出容器的内容流作为一个tar归档文件(对应import)
    history Show the history of an image #展示一个镜像形成历史
    images List images #列出系统当前镜像
    import import the contents from a tarball to create a filesystem image #从tar包中的内容创建一个新的文件系统映像(对应export)
    info Display system-wide information #显示系统相关信息
    inspect Return low-level information on a container or image #查看容器详细信息
    kill Kill a running container #kill指定docker容器
    load Load an image from a tar archive or STDIN #从一个tar包中加载一个镜像(对应save)
    login Register or log in to a Docker registry#注册或者登陆一个docker源服务器
    logout Log out from a Docker registry #从当前Docker registry退出
    logs Fetch the logs of a container #输出当前容器日志信息
    pause Pause all processes within a container#暂停容器
    port List port mappings or a specific mapping for the ConTAINER #查看映射端口对应的容器内部源端口
    ps List containers #列出容器列表
    pull Pull an image or a repository from a registry #从docker镜像源服务器拉取指定镜像或者库镜像
    push Push an image or a repository to a registry #推送指定镜像或者库镜像至docker源服务器
    rename Rename a container #重命名容器
    restart Restart a running container #重启运行的容器
    rm Remove one or more containers #移除一个或者多个容器
    rmi Remove one or more images #移除一个或多个镜像(无容器使用该镜像才可以删除,否则需要删除相关容器才可以继续或者-f强制删除)
    run Run a command in a new container #创建一个新的容器并运行一个命令
    save Save an image(s) to a tar archive#保存一个镜像为一个tar包(对应load)
    search Search the Docker Hub for images #在docker
hub中搜索镜像
    start Start one or more stopped containers#启动容器
    stats Display a live stream of container(s) resource usage statistics #统计容器使用资源
    stop Stop a running container #停止容器
    tag Tag an image into a repository #给源中镜像打标签
    top Display the running processes of a container #查看容器中运行的进程信息
    unpause Unpause all processes within a container #取消暂停容器
    version Show the Docker version information#查看容器版本号
    wait Block until a container stops, then print its exit code #截取容器停止时的退出状态值

Run 'docker COMMAND --help' for more information on a command. #运行docker命令在帮助可以获取更多信息
docker search hello-docker # 搜索hello-docker的镜像
docker search centos # 搜索centos镜像
docker pull hello-docker # 获取centos镜像
docker run hello-world #运行一个docker镜像,产生一个容器实例(也可以通过镜像id前三位运行)
docker image ls # 查看本地所有镜像
docker images # 查看docker镜像
docker image rmi hello-docker # 删除centos镜像
docker ps #列出正在运行的容器(如果创建容器中没有进程正在运行,容器就会立即停止)
docker ps -a # 列出所有运行过的容器记录
docker save centos > /opt/centos.tar.gz # 导出docker镜像至本地
docker load < /opt/centos.tar.gz #导入本地镜像到docker镜像库
docker stop `docker ps -aq` # 停止所有正在运行的容器
docker rm `docker ps -aq` # 一次性删除所有容器记录
docker rmi `docker images -aq` # 一次性删除所有本地的镜像记录
Docker的使用
docker run ubuntu:15.10 /bin/echo "Hello world"

各个参数解析:

docker: Docker 的二进制执行文件。

run: 与前面的 docker 组合来运行一个容器。

ubuntu:15.10 指定要运行的镜像,Docker 首先从本地主机上查找镜像是否存在,如果不存在,Docker 就会从镜像仓库 Docker Hub 下载公共镜像。

/bin/echo "Hello world": 在启动的容器里执行的命令

Docker 以 ubuntu15.10 镜像创建一个新容器,然后在容器里执行 bin/echo "Hello world"

可以通过 docker ps -a:查看所有的容器

镜像和容器的关系:

docker 是一种类似虚拟机的机制,保证系统(容器)之间的隔离,又能让系统(容器)之间共享硬件资源.为了能够实现这样的功能,就不得不提其关键要素:镜像和容器

镜像相当于安装包,系统,环境都可以做成镜像.例如一个opencv的环境就可以做成一个镜像,这样别人拉取了这个镜像,就相当于获得了一个opencv的环境.

容器相当于虚拟机,或者说相当于镜像的载体.即要想安装和运行一个镜像,就必须有一个硬件载体,就是容器.一个镜像可以开启多个容器.

”将镜像运行为容器“

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5703864.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存