zoukankan      html  css  js  c++  java
  • Docker学习笔记

    1.Docker简介

    Docker是一个开源应用容器引擎,可以将应用打包到容器中,并移植到任何流行的Linux机器上。

    Docker是一个开源应用容器引擎,是为开发者和系统管理员设计的,用来发布和运行分布式应用程序的一个开放性平台,开发者可以将应用及其所依赖的包打包到容器中,并移植到任何流行的Linux机器上。与虚拟机实现操作系统级别的隔离不同,Docker实现的是应用程序级别的隔离,利用namespace实现系统环境的隔离,利用cgroup实现资源的隔离,利用镜像实现目录环境的隔离。docker利用的是宿主机的内核,运行在docker上的程序可以直接使用物理机上的硬件资源,因此加载一个docker容器只需要几秒钟,一台物理机上只能建立几个虚拟机,但可以很容易的创建成百上千个docker容器。

    Docker 是 PaaS 提供商 dotCloud 开源的一个基于 LXC 的高级容器引擎,源代码托管在 Github 上, 基于go语言并遵从Apache2.0协议开源。

    Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。Docker 容器通过 Docker 镜像来创建。容器与镜像的关系类似于面向对象编程中的对象与类。

    Docker缺点:

    1. Docker是基于Linux 64bit的,无法在32bit的linux/Windows/unix环境下使用
    2. LXC是基于cgroup等linux kernel功能的,因此container的guest系统只能是linux base的
    3. 隔离性相比KVM之类的虚拟化方案还是有些欠缺,所有container公用一部分的运行库
    4. 网络管理相对简单,主要是基于namespace隔离
    5. cgroup的cpu和cpuset提供的cpu功能相比KVM的等虚拟化方案相比难以度量(所以dotcloud主要是按内存收费)
    6. docker对disk的管理比较有限
    7. container随着用户进程的停止而销毁,container中的log等用户数据不便收集

    Docker实例是无状态的。这意味着它们不应该承载任何交易数据,所有数据应该保存在数据库服务器中。

    作为sandbox大概是container的最基本想法了 - 轻量级的隔离机制, 快速重建和销毁, 占用资源少。用docker在开发者的单机环境下模拟分布式软件部署和调试,可谓又快又好。

    2.Docker常用命令

    2.1 查看Docker信息

    Docker版本:docker version

    Docker系统信息:docker info

    2.2 对镜像的操作

    检索image:docker search image_name

    拉取镜像:docker pull image_name

    列出镜像列表:docker images

    删除镜像:docker rmi image_name

    显示一个镜像的历史:docker history image_name

    根据Dockerfile构建镜像:docker build -t image_name Dockerfile_path

    镜像生成容器:docker run -i -t -p 58080:80 -v /root/software/:/mnt/software/ --name test 25c5298b1a36 /bin/bash /root/run.sh

      -i:表示以“交互模式”运行容器

      -t:表示容器启动后会进入其命令行

      -v:表示需要将本地哪个目录挂载到容器中,格式:-v <宿主机目录>:<容器目录>

      -d:容器将会运行在后台模式

      -p:设置端口映射

      --name:设置容器名称

      --rm:容器结束时自动清理其所产生的数据

      --restart=always:机器启动就自动运行容器

      --privileged:容器内部root拥有外部root权限

    保存镜像到一个tar包:docker save image_name -o file_path

    docker save image_name > xx.tar

    加载一个tar格式的镜像:docker load < /home/save.tar

    登录发布镜像:docker login

    docker push new_image_name

    2.3 对容器的操作

    容器默认存放位置:/var/lib/docker/containers

    查看所有正在运行的容器:docker ps

    查看所有容器:docker ps –a

    查看最近一次启动的容器:docker ps –l

    保存对容器的修改:docker commit ID new_image_name

    删除容器:docker rm Name/ID

    删除所有容器:docker rm `docker ps -a -q`

    启动容器:docker start Name/ID

    停止容器:docker stop Name/ID

    重启容器:docker restart Name/ID

    杀死容器:docker kill Name/ID

    从容器中获取日志:docker logs Name/ID

    列出容器中被改变的文件或目录:docker diff Name/ID

    显示容器中的进程信息:docker top Name/ID

    从容器中拷贝文件到本地:docker cp ID:/container_path to_path

    附着到运行的容器上,操作会同步显示到所有附着到此容器的终端上:docker attach ID

    进入到运行的容器中:docker exec –ti Name/ID /bin/bash

    查看docker 容器pid:docker inspect -f "{{.State.Pid}}" ID

    查看容器ip地址:docker inspect --format='{{.NetworkSettings.IPAddress}}' $CONTAINER_ID

  • 相关阅读:
    AcWing 1027. 方格取数 dp
    AcWing 1014. 登山 dp
    acwing 482. 合唱队形 dp
    LeetCode 1463. 摘樱桃II dp
    LeetCode 100. 相同的树 树的遍历
    LeetCode 336. 回文对 哈希
    LeetCode 815. 公交路线 最短路 哈希
    算法问题实战策略 DARPA大挑战 二分
    算法问题实战策略 LUNCHBOX 贪心
    AcWing 1100. 抓住那头牛 BFS
  • 原文地址:https://www.cnblogs.com/cisol/p/5873665.html
Copyright © 2011-2022 走看看