zoukankan      html  css  js  c++  java
  • docker 学习(1)

    Docker与容器和虚拟机

    Docker跟虚拟机有什么区别啊?这个问题可以拆成两部分。因为Docker并不是什么完全独创的技术,而是属于很早便有了的容器技术,所以第一个问题就是容器与虚拟机的区别?同属于容器技术,Docker的兄弟姐妹还有Solaris Zones、BSD jails、LXC等。但Docker现在这么火,自然有它的独到之处,所以第二个问题就是Docker与其他容器的区别?

    关于第一个问题比较简单,容器是一种轻量级的虚拟技术。它不像虚拟机那样具有一套完整的CPU、内存和磁盘,对操作系统有绝对的权限。容器和宿主主机共享内核,所有容器共享操作系统,在一台物理机上可以运行成百上千的容器。第二个问题稍麻烦一些,与LXC相比,Docker对配置进行了抽象,使应用在任何平台上的运行环境都一致。同时提供了版本控制、镜像托管等类似Git的现代化设施和生态圈。

    总体来看,Docker的应用场景有:

    • 加速本地开发:快速搭建好开发环境和运行环境。
    • 自动打包和部署应用。
    • 创建轻量级的私有Paas环境。
    • 自动化测试和持续集成。
    • 创建安全沙盒。

    Docker的基本使用
    1 安装
    使用apt-get安装(非最新版本,我的是Version:1.13.1)
    sudo apt-get install docker.io

    启动docker服务: sudo service docker start

    关闭docker服务: sudo service docker stop

    查看docker是否运行:
    sudo service docker status
    查看docker版本:
    sudo docker version

    可以进入root模式 su root。

    2 搜索并下载一个可用镜像(这里是tutorial)
    docker search tutorial
    上面的命令将返回tutorial镜像的全名是learn/tutorial,然后下载镜像:
    docker pull learn/tutorial

    3.启动镜像并输出hello world
    有了镜像,就可以通过镜像启动容器,并且在容器中做相关操作:
    docker run learn/tutorial echo "Hello World!"

    4.查看容器

    $ docker ps -a

    CONTAINER ID        IMAGE               COMMAND          CREATED                   STATUS                               PORTS                NAMES
    a30ac45dddaa   learn/tutorial   "echo hello"   35 seconds ago    Exited (0) 33 seconds ago                          pedantic_lewin
    。。。

    列出所有容器 docker ps -a

    最后一次运行的容器 docker ps -l

    5.安装ping
    在这个容器中是不能直接使用ping命令的,所以需要安装:
    docker run learn/tutorial apt-get install -y ping

    在执行apt-get 命令的时候,要带上-y参数。如果不指定-y参数的话,apt-get命令会进入交互模式,需要用户输入命令来进行确认,但在docker环境中是无法响应这种交互的。

    然后查看最新的container,获得安装完ping命令之后容器的id
    $ docker ps -l

    CONTAINER ID      IMAGE                  COMMAND                   CREATED                          STATUS                        PORTS               NAMES
    3ff336e137a2   learn/tutorial    "apt-get install -y    3 minutes ago       Exited (0) 3 minutes ago                                jovial_tesla

    当你对某一个容器做了修改之后(通过在容器中运行某一个命令),可以把对容器的修改保存下来,这样下次可以从保存后的最新状态运行该容器。docker中保存状态的过程称之为committing,它保存的新旧状态之间的区别,从而产生一个新的版本。

        1. 运行docker commit,可以查看该命令的参数列表。

        2. 你需要指定要提交保存容器的ID。

        3. 无需拷贝完整的id,通常来讲最开始的三至四个字母即可区分。

    有了CONTAINER ID,就可以保存这个安装了ping的image了(这里保存为learn/ping):
    docker commit 3ff336e137a2 learn/ping
    3fed5e9fbe3d646fa39423f7edaa9d279adb6b26bf12491be56d17701e1fb4c5
    返回的是新的镜像id。

    列出镜像 docker images

    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    learn/ping          latest              c57c9021d858        17 hours ago        139 MB
    learn/tutorial      latest              a7876479f1aa        4 years ago         128 MB

    到现在为止,已经建立了一个完整的、自成体系的docker环境,并且安装了ping命令在里面。它可以在任何支持docker环境的系统中运行啦!

    使用新镜像启动容器并使用ping命令:docker run learn/ping ping www.baidu.com

    PING www.a.shifen.com (111.13.100.92) 56(84) bytes of data.
    64 bytes from 111.13.100.92: icmp_req=1 ttl=50 time=29.1 ms
    64 bytes from 111.13.100.92: icmp_req=2 ttl=50 time=23.5 ms
    64 bytes from 111.13.100.92: icmp_req=3 ttl=50 time=49.1 ms
    。。。

    6.检查container

    使用docker ps命令可以查看所有正在运行中的容器列表,使用docker inspect命令我们可以查看更详细的关于某一个容器的信息。
    首先找到container的id:
    docker ps -a
    查看该container:
    docker inspect container id

    7.发布自己的镜像
    docker push learn/ping
    镜像只能发布到自己的空间,因此是需要账户名和密码的。

  • 相关阅读:
    LeetCode "Minimum Moves to Equal Array Elements"
    LeetCode "Third Maximum Number"
    LeetCode "Arranging Coins"
    LeetCode "Is Subsequence"
    HackerRank "Flatland Space Stations"
    LeetCode "Super Pow"
    LeetCode "Wiggle Subsequence" !
    HackerRank "Jumping on the Clouds"
    HackerRank "Fair Rations"
    HackerRank "Equal Stacks"
  • 原文地址:https://www.cnblogs.com/home123/p/7988130.html
Copyright © 2011-2022 走看看