最新消息:XAMPP默认安装之后是很不安全的,我们只需要点击左方菜单的 "安全"选项,按照向导操作即可完成安全设置。

Docker学习之基础学习

XAMPP新闻 admin 327浏览 0评论

在这个富 web 时代,应用变得越来越强大,与此同时也越来复杂。集群部署、隔离环境、灰度发布以及动态扩容缺一不可,而容器化成为中间的必要桥梁。

Docker 是什么?

“Docker 最初是 dotCloud 公司创始人 Solomon Hykes 在法国期间发起的一个公司内部项目,它是基于 dotCloud 公司多年云服务技术的一次革新,并于 2013 年 3 月以 Apache 2.0 授权协议开源,主要项目代码在 GitHub 上进行维护。Docker 项目后来还加入了 Linux 基金会,并成立推动 开放容器联盟(OCI)。

Docker 使用 Google 公司推出的 Go 语言 进行开发实现,基于 Linux 内核的 cgroup,namespace,以及 OverlayFS 类的 Union FS 等技术,对进程进行封装隔离,属于 操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。最初实现是基于 LXC,从 0.7 版本以后开始去除 LXC,转而使用自行开发的 libcontainer,从 1.11 版本开始,则进一步演进为使用 runC 和 containerd。

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。——摘自百度

通俗讲解

为了更好的理解 Docker 是什么, 用一个故事来说明吧:

我需要盖一个大别野,于是我搬石头、砍木头、画图纸、盖别野。一顿操作,终于把大别野盖好了。

dqz83

但是住一段时间,我觉得这个地方不是很好,每天一群‘小仙女’在门口跳广场舞,太吵了,想搬走。这时候到一个新的地方,到了海边。又开始搬石头、砍木头、画图纸、盖别野。

dqz083

每次我想换个地方住,还要再重复的做一些事情。在我正苦恼的时候,有一个魔法师教会我一个魔法,这种魔法可以把我盖好的别野进行复制。做成镜像, 放入背包。

dqz0083

到了一个地方,我就使用这个镜像, 复制一套, 即可入住,简直太爽了。

是不是很神奇?对应到我们的项目中来,房子就是项目本身,镜像就是项目的复制,背包就是镜像仓库。如果要动态扩容,从仓库中取出项目镜像,随便复制就可以了。Build once,Run anywhere!

不用再关注版本、兼容、部署等问题,彻底解决了「上线即崩,无休止构建」的尴尬。

Docker 的架构

Docker 包括三个基本概念:

  • 镜像:是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像 不包含 任何动态数据,其内容在构建之后也不会被改变。
  • 容器:镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的 类 和 实例 一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
  • 仓库:集中的存储、分发镜像的服务

Docker 常用命令

辅助命令

# 1.安装完成辅助命令
docker version    --------------------------	查看docker的信息
docker info       --------------------------	查看更详细的信息
docker --help     -------------------------  帮助命令

Images 镜像命令

# 1.查看本机中所有镜像
docker images	--------------  列出本地所有镜像
    -a			列出所有镜像(包含中间映像层)
    -q			只显示镜像id

# 2.搜索镜像
docker search [options] 镜像名	-------------------	去dockerhub上查询当前镜像
    -s 指定值		列出收藏数不少于指定值的镜像
    --no-trunc	显示完整的镜像信息

# 3.从仓库下载镜像
docker pull 镜像名[:TAG|@DIGEST]	----------------- 下载镜像

# 4.删除镜像
docker rmi 镜像名	--------------------------  删除镜像
    -f		      强制删除

Container 容器命令

# 1.运行容器
docker run 镜像名	--------------------------	镜像名新建并启动容器
--name          别名为容器起一个名字
-d              启动守护式容器(在后台启动容器)
-p              映射端口号:原始端口号		 指定端口号启动

例:docker run -it --name myTomcat -p 8888:8080 tomcat
docker run -d --name myTomcat -P tomcat

# 2.查看运行的容器
docker ps					--------------------------	列出所有正在运行的容器
-a			正在运行的和历史运行过的容器
-q			静默模式,只显示容器编号

# 3.停止|关闭|重启容器
docker start   容器名或者容器id      -------------- 开启容器
docker restart 容器名或者容器id      --------------- 重启容器
docker stop    容器名或者容器id      --------------- 正常停止容器运行
docker kill    容器名或者容器id      --------------- 立即停止容器运行

# 4.删除容器
docker rm -f 容器id和容器名     
docker rm -f $(docker ps -aq)      --------------	删除所有容器

# 5.查看容器内进程
docker top 容器id或者容器名         ------------------ 查看容器内的进程

# 6.查看查看容器内部细节
docker inspect 容器id 	      ------------------ 查看容器内部细节

# 7.查看容器的运行日志
docker logs [OPTIONS] 容器id或容器名	------------------ 查看容器日志
-t			 加入时间戳
-f			 跟随最新的日志打印
--tail 	 数字	显示最后多少条

# 8.进入容器内部
docker exec [options] 容器id 容器内命令 ------------------ 进入容器执行命令
-i		以交互模式运行容器,通常与-t一起使用
-t		分配一个伪终端    shell窗口   bash 

# 9.容器和宿主机之间复制文件
docker cp 文件|目录 容器id:容器路径           -----------------   将宿主机复制到容器内部
docker cp 容器id:容器内资源路径 宿主机目录路径  -----------------   将容器内资源拷贝到主机上

# 10.数据卷(volum)实现与宿主机共享目录
docker run -v 宿主机的路径|任意别名:/容器内的路径 镜像名
注意: 
1.如果是宿主机路径必须是绝对路径,宿主机目录会覆盖容器内目录内容
2.如果是别名则会在docker运行容器时自动在宿主机中创建一个目录,并将容器目录文件复制到宿主机中

# 11.打包镜像
docker save 镜像名 -o  名称.tar

# 12.载入镜像
docker load -i   名称.tar

# 13.容器打包成新的镜像
docker commit -m "描述信息" -a "作者信息"   (容器id或者名称)打包的镜像名称:标签

详细的原理,在后续学习会做个整体的笔记记录,欢迎各位大佬评论留言讨论。

转载请注明:XAMPP中文组官网 » Docker学习之基础学习

您必须 登录 才能发表评论!