首页 > 代码库 > Docker学习笔记

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

Docker学习笔记