Docker快速上手

强推这个gitbook,入门介绍说的非常详细,需要的时候查阅即可。《Docker-GitBook》

1 什么是docker


可以初略的认为,docker是一个可以隔离开来的文件系统(最常用的docker镜像,当然不仅限于文件系统),比虚拟机更轻便,快捷,可以通过对比docker和虚拟机来理解它。

Docker和虚拟机都是一种虚拟化的方案,Docker是基于容器的一种封装,容器和虚拟机的区别如下:

  • 虚拟机是通过中间层,将一台或多台机器虚拟运行于一台物理机器上;
  • 而容器是直接运行于操作系统内核之上的用户空间。因此容器只能运行在相同或相似内核的操作系统之上
  • 传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;
  • 而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。
Docker快速上手_第1张图片
Linux容器技术VS虚拟机

容器优点:

  • 占用空间更小,容器仅包含应用和它依赖的库,不会像虚拟机那样,原本几十M的应用程序,却要用几个G的虚拟操作系统来支撑。
  • 不像虚拟那样为了模拟硬件的行为,很耗费内存和CPU。
  • 容器很复杂,不容易安装和管理,而docker是在容器上的封装,只需要几分钟安装,几秒就可以启动运行

Docker应用场景

  1. 使用Docker容器开发、测试、部署服务
  2. 创建隔离的运行环境
  3. 在一台物理机上搭建不同版本的测试环境
  4. 构建多用户的平台即服务(PaaS)基础设施
  5. 提供软件即服务(SaaS)应用程序
  6. 高性能、超大规模的宿主机部署

2 docker重要概念


  • Docker Client 客户端 && Docker Daemon 守护进程
  • Docker Image 镜像
  • Docker Container 容器
  • Docker Registry 仓库

(1)Docker Client 客户端 && Docker Daemon 守护进程

  • Docker 客户端/守护进程是C/S架构,Docker客户端(C)向守护进程(S)发出请求(一般是各种执行命令),守护进程处理完所有的工作,并返回处理结果。客户端和守护进程可以是本地也可以是远程关系。
Docker快速上手_第2张图片
Docker Client && Docker Daemon

(2)Docker Image 镜像

  • docker image是Docker的基石,Docker基于镜像启动和运行,可以认为镜像是Docker的源代码,保存了用于启动Docker的各种条件。
  • 深层理解Docker镜像,本质上是一个层叠的只读文件系统
  • bootfs(引导文件系统),Docker启动后会被移到内存中,而bootfs会被卸载
  • rootfs(可以是一种或多种的操作系统,比如Ubuntu或CentOS),在rootfs之上可以联合加载(union mount)多层文件系统,对外表现只有一层,就是一个镜像
  • 一个镜像可以叠加到另外一个镜像上,最底层的是基础镜像,比如图中的rootfs文件系统

(3)Docker Container 容器

  • 如果说镜像是Docker的构建和打包阶段,那么容器是Docker的启动和执行阶段。
  • 容器通过镜像启动
  • 写时复制技术:docker启动时会在镜像顶层的只读层上增加一个读写文件系统(可写层),Docker中运行的程序都在这一层,比如想修改一个文件,这个文件会从下面的只读层复制到可写层中,只读层中的版本依然存在,只是被覆盖了用户看不见。
  • 可写层加上底下的镜像,就构成了一个容器
Docker快速上手_第3张图片
Docker Image

(4)Docker Registry 仓库

  • 公有:DockerHub
  • 私有
  • 用来存储镜像,可以docker pull把镜像拉倒本地

(5)总结


Docker快速上手_第4张图片
Docker的基本组成

3 基本操作


sudo docker images   #查询可用的docker镜像,获取image id
sudo docker run --name [your_docker_name] -it -v $PWD:/mydocker [image id] /bin/bash
sudo docker ps      #查看已挂起的docker(实际是image创建的container),可以得到container id
sudo docker ps -a   #查看所有的container,包括已停止的container
sudo docker attach [container id]   #重新进入自己挂起的container环境
sudo docker start [container id]   #启动已停止的container环境
#在container里用快捷键Ctrl+q+p可以挂起
exit  #在container里exit可以停止该container,需要用start重新启动

4 亲自动手尝试一下


(1)安装docker

  • Mac安装教程,安装非常简单,链接里也有其他系统安装Docker的方法

(2)查看docker版本

  • docker --version

(3)在Docker Hub官方仓库中查找镜像,比如查找ubuntu容器

  • docker search ubuntu

(4)拉取镜像到本地,这里我们举例拉取paddlepaddle的docker(相当于paddlepaddle的一个最小运行环境),从【paddle官方指南】可以看到拉取命令,下载后可以看出这是一个层叠的镜像。

  • docker pull hub.baidubce.com/paddlepaddle/paddle:1.2

(5)查看本地已下载的镜像,拷贝paddle仓库镜像对应的IMAGE ID

  • docker images

(6)使用本地的镜像运行并进入容器,注意运行该命令前先进入到本地一个新建目录中,这个目录会成为docker里对应的paddle目录(用户根目录),$PWD:/paddle影射了这两个目录。

  • mkdir myDockerDir && cd myDockerDir
  • docker run --name lkj_paddle1.2 -it -v $PWD:/paddle hub.baidubce.com/paddlepaddle/paddle:1.2 /bin/bash
    • 【备注格式】docker run --name [Name of container] -it -v $PWD:[your_docker_dir] /bin/bash
    • 【备注】[Name of container] 是用户自己命名的,方便后面查找这个docker进程, 可以是仓库名,也可以是上一步拷贝的IMAGE ID ,[your_docker_dir]则是映射本地目录到docker里的目录。


(7)上面那步执行完后,当你发现自己进入了一个类似 root@085859649d05:/# 的环境,那就已经引入了paddle可运行的一个最小系统环境container,基础镜像是ubuntu。可以查看paddle版本。

  • pip list
  • pip list | grep paddle

(8)暂时离开container,不需要执行命令,用快捷键即可:Ctrl+q+p

(9)查看已运行的container进程,拷贝[CONTAINER ID]

  • docker ps

(10)进入指定的container,可能会感觉有点卡顿,多按两下enter按键

  • docker attach [CONTAINER ID]

(11)退出container

  • exit

(12)查看已运行的container和所有的container

  • docker ps
  • docker ps -a
    image.png

(13)重新启动container,和停止

  • docker start [CONTAINER ID]
  • docker stop [CONTAINER ID]


(14)删除container

  • docker rm [CONTAINER ID]


(15)删除镜像。总结前面就是需要先停止container,然后删除container,最后才可以删除image

  • docker image rm [IMAGE ID]


    Docker快速上手_第5张图片

你可能感兴趣的:(Docker快速上手)