Docker

Docker

Docker是什么?

Docker是一个虚拟环境容器,可以将你的开发环境、代码、配置文件等一并打包到这个容器中,并发布和应用到任意平台中。比如,你在本地用Python开发网站后台,开发测试完成后,就可以将Python3及其依赖包、Flask及其各种插件、Mysql、Nginx等打包到一个容器中,然后部署到任意你想部署到的环境。

Docker官方文档比较全,建议有能力的读一下官方文档

相信很多人都用过虚拟机。虚拟机,就是在你的操作系统里面,装一个软件,然后通过这个软件,再模拟一台甚至多台“子电脑”出来。

img虚拟机,类似于“子电脑”

在“子电脑”里,你可以和正常电脑一样运行程序,例如开QQ。如果你愿意,你可以变出好几个“子电脑”,里面都开上QQ。“子电脑”和“子电脑”之间,是相互隔离的,互不影响。

虚拟机属于虚拟化技术。而Docker这样的容器技术,也是虚拟化技术,属于轻量级的虚拟化

虚拟机虽然可以隔离出很多“子电脑”,但占用空间更大,启动更慢,虚拟机软件可能还要花钱(例如VMWare)。

而容器技术恰好没有这些缺点。它不需要虚拟出整个操作系统,只需要虚拟一个小规模的环境(类似“沙箱”)。

img沙箱

它启动时间很快,几秒钟就能完成。而且,它对资源的利用率很高(一台主机可以同时运行几千个Docker容器)。此外,它占的空间很小,虚拟机一般要几GB到几十GB的空间,而容器只需要MB级甚至KB级。

img

容器和虚拟机的对比

正因为如此,容器技术受到了热烈的欢迎和追捧,发展迅速。

我们具体来看看Docker。

大家需要注意,Docker本身并不是容器,它是创建容器的工具,是应用容器引擎。

想要搞懂Docker,其实看它的两句口号就行。

第一句,是“Build, Ship and Run”

img

也就是,“搭建、发送、运行”,三板斧。

举个例子:

我来到一片空地,想建个房子,于是我搬石头、砍木头、画图纸,一顿操作,终于把这个房子盖好了。

img

结果,我住了一段时间,想搬到另一片空地去。这时候,按以往的办法,我只能再次搬石头、砍木头、画图纸、盖房子。

但是,跑来一个老巫婆,教会我一种魔法。

这种魔法,可以把我盖好的房子复制一份,做成“镜像”,放在我的背包里。

img

等我到了另一片空地,就用这个“镜像”,复制一套房子,摆在那边,拎包入住。

img

怎么样?是不是很神奇?

所以,Docker的第二句口号就是:“Build once,Run anywhere(搭建一次,到处能用)”。

Docker技术的三大核心概念,分别是:

  • 镜像(Image)
  • 容器(Container)
  • 仓库(Repository)

Docker的三个概念

  1. 镜像(Image):类似于虚拟机中的镜像,是一个包含有文件系统的面向Docker引擎的只读模板。任何应用程序运行都需要环境,而镜像就是用来提供这种运行环境的。例如一个Ubuntu镜像就是一个包含Ubuntu操作系统环境的模板,同理在该镜像上装上Apache软件,就可以称为Apache镜像。
  2. 容器(Container):类似于一个轻量级的沙盒,可以将其看作一个极简的Linux系统环境(包括root权限、进程空间、用户空间和网络空间等),以及运行在其中的应用程序。Docker引擎利用容器来运行、隔离各个应用。容器是镜像创建的应用实例,可以创建、启动、停止、删除容器,各个容器之间是是相互隔离的,互不影响。注意:镜像本身是只读的,容器从镜像启动时,Docker在镜像的上层创建一个可写层,镜像本身不变。
  3. 仓库(Repository):类似于代码仓库,这里是镜像仓库,是Docker用来集中存放镜像文件的地方。注意与注册服务器(Registry)的区别:注册服务器是存放仓库的地方,一般会有多个仓库;而仓库是存放镜像的地方,一般每个仓库存放一类镜像,每个镜像利用tag进行区分,比如Ubuntu仓库存放有多个版本(12.04、14.04等)的Ubuntu镜像。

Docker的安装和卸载

Docker可以安装在Windows、Linux、Mac等各个平台上。具体可以查看文档Install Docker。安装完成之后,可以查看Docker的版本信息:

[root@xxx ~]# docker version
Client:
 Version:      1.12.3
 API version:  1.24
 Go version:   go1.6.3
 Git commit:   6b644ec
 Built:
 OS/Arch:      linux/amd64

Server:
 Version:      1.12.3
 API version:  1.24
 Go version:   go1.6.3
 Git commit:   6b644ec
 Built:
 OS/Arch:      linux/amd64

查看Docker的帮助信息:# docker --help。各种命令的用法也不再赘述,后边用到哪些命令时会作出一定的解释。

CentOS安装Docker

  1. 进入root用户下,进行命令操作:
    1. su
    2. 输入root的密码
  2. 卸载Docker旧的安装包
 yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
  1. 安装需要的安装包
yum install -y yum-utils
  1. 设置镜像仓库

    1. 国外的镜像仓库

      yum-config-manager \
          --add-repo \
          https://download.docker.com/linux/centos/docker-ce.repo
      
    2. 阿里云的镜像仓库,适合国内用户使用

      yum-config-manager \
       --add-repo \
       http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
      
  2. 更新yum索引安装包

yum makecache fast
  1. 安装Docker相关的(可能会出错,多试几次)
yum install docker-ce docker-ce-cli containerd.io
  1. 启动Docker服务
systemctl start docker
  1. 查看Docker是否安装完成
docker --version
  1. 通过Hello World 来验证
docker run hello-world
  1. 查看所有的Docker镜像
docker images
  1. 查看docker启动情况
sudo service docker status

Docker卸载

  1. 卸载依赖项
yum remove docker-ce docker-ce-cli containerd.io
  1. 删除资源
rm -rf /var/lib/docker

Docker相关指令

Docker基本命令

命令名 指令
查看所有镜像 docker images
删除镜像(会提示先停止使用中的容器) docker rmi 镜像name/镜像id
查看所有容器 docker ps -a
查看容器运行日志 docker logs 容器名称/容器id
停止容器运行 docker stop 容器name/容器id
终止容器后运行 docker start 容器name/容器id
容器重启 docker restart 容器name/容器id
删除容器 docker rm -f 容器name/容器id

删除Docker镜像

docker rmi -f 镜像id (可以根据 docker images 查询)

docker rmi -f $(docker images) --删除所有镜像

查询Docker的详细信息

docker stats dockerid

停止一个正在运行的容器

  1. docker stop

此方式常常被翻译为优雅的停止容器,docker stop 容器ID或容器名 .
参数 -t:关闭容器的限时,如果超时未能关闭则用kill强制关闭,默认值10s,这个时间用于容器的自己保存状态 .

docker stop -t=60 容器ID或容器名

  1. docker kill

docker kill 容器ID或容器名 :直接关闭容器

stop和kill的主要区别:stop给与一定的关闭时间交由容器自己保存状态,kill直接关闭容器

停止全部运行中的容器

docker stop $(docker ps -q)

删除全部容器

docker rm $(docker ps -aq)

一条命令实现停用并删除容器

docker stop $(docker ps -q) & docker rm $(docker ps -aq)

根据容器的状态,删除Exited状态的容器

sudo docker rm $(sudo docker ps -qf status=exited)

删除悬空的镜像

docker container prune -f

定时清空镜像和脚本

[root@VM_0_42_centos opt]# cat clean.sh 
sh /opt/docker/lock.sh -t clean -a lock
docker image prune -a -f
docker container prune -f
sh /opt/docker/lock.sh -t clean -a unlock 
dt=$(date)
echo time is $dt

通过Hello-World映像验证是否安装成功

docker run hello-world

原文出处

Docker教程:https://www.runoob.com/docker/docker-tutorial.html

Docker 官网:https://www.docker.com

Github Docker 源码:https://github.com/docker/docker-ce

只要一小时,零基础入门Docker:https://zhuanlan.zhihu.com/p/23599229

10分钟看懂Docker和K8S:https://zhuanlan.zhihu.com/p/53260098

posted @ 2021-11-20 18:22  AJun816  阅读(88)  评论(0)    收藏  举报