docker基础入门理解

本文简单的介绍了一下docker的一些优点,以及使用方法
1. 理解docker
  1.1 docker是什么?
  1.2 为什么要使用Docker?
2. docker安装
3. docker-容器,镜像,仓库,dockerfile,docker-compose
4. 快速入门
  4.0. 常用命令
 
1. 理解docker
 
1.1 docker是什么?
  看看官方概念:
  Docker 是一个开源的应用容器引擎,你可以将其理解为一个轻量级的虚拟机,开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上。
  这里我们来点通俗的:
  比如:一台机器上,运行了3个docker, 每个docker里面分别运行着nginx,php和mysql。你想把这台机器上的nginx,php和mysql部署到另外10台机器。直接执行一系列docker命令就可以了,是不是很简单?那么,就凭这一点,你已经很想学docker了吧!
 
1.2 为什么要使用Docker?
  作为一种新兴的虚拟化方式,Docker跟传统的虚拟化方式相比具有众多的优势。
 
1.2.1 更高效的利用系统资源
  由于容器不需要进行硬件虚拟以及运行完整操作系统等额外开销,Docker对系统资源的利用率更高。无论是应用执行速度、内存损耗或者文件存储速度,都要比传统虚拟机技术更高效。因此,相比虚拟机技术,一个相
  同配置的主机,往往可以运行更多数量的应用。
 
1.2.2 更快速的启动时间
  传统的虚拟机技术启动应用服务往往需要数分钟,而Docker容器应用,由于直接运行于宿主内核,无需启动完整的操作系统,因此可以做到秒级、甚至毫秒级的启动时间。大大的节约了开发、测试、部署的时间。
 
1.2.4 一致的运行环境
  开发过程中一个常见的问题是环境一致性问题。由于开发环境、测试环境、生产环境不一致,导致有些bug并未在开发过程中被发现。而Docker的镜像提供了除内核外完整的运行时环境,确保了应用运行环境一致性,从而不会再出现**「这段代码在我机器没毛病」这类问题。
 
1.2.5 持续交付和部署
  对开发和运维人员来说,最希望的就是一次开发部署,可以再任何地方进行使用
  使用Docker可以通过定制应用镜像涞水县持续继承,持续交付,部署。开发人员可以通过Dockerfile来进行镜像构建,并结合持续集成(Continuous Integration) 系统进行集成测试,儿运维人员可以直接在生产环境中快速部署该镜像,甚至结合持续部署     (Continuous Delivery/Deployment) 系统进行自动部署。
  而且使用Dockerfile使镜像构建透明化,不仅仅开发团队可以理解应用运行环境,也方便运维团队理解应用运行所需条件,帮助更好的生产环境中部署该镜像。
 
1.2.6 更轻松的迁移
  Docker确保了运行环境的一致性,可以应用的迁移更加的容易,可以再很多平台上面运行,虚拟机,物理机,私有云,公有云,笔记本等等,因此用户可以很轻松的将一个平台上面的应用迁移到其他平台上面去,而不用担心环境变化导致应用无法运行
 
1.2.7 更轻松的维护和扩展
  Docker使用的分层存储以及镜像技术,使得应用的重复部分变的更加的容易,应用的维护也变得非常的简单,基于基础镜像进一步扩展镜像也变得很简单,此外Docker团队还有很多开源项目提供了大量的镜像既可以生产环境直接使用,又可以座位基础进一步定制,大大降低了应用服务的镜像制作成本
对比传统的虚拟机
特性 容器 虚拟机
启动 秒级 分钟
硬盘使用 一般为MB 一般为GB
性能 接近原生 弱于
系统支持量 单机支持上千个容器 几十个
 
2. docker安装
 
-- 1. 卸载老版本
$ yum -y remove docker docker-common docker-selinux docker-engine
-- 2. 安装需要的软件包 
$ yum install -y yum-utils device-mapper-persistent-data lvm2
-- 3. 设置国内yum源
$ yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
-- 4. 查看docker版本
$ yum list docker-ce --showduplicates|sort -r 
-- 5. 安装 
$ yum install docker-ce-18.03.1.ce -y
-- 6. 配置docker镜像源
 $ vi /etc/docker/daemon.json
  {
  "registry-mirrors": ["http://hub-mirror.c.163.com"]
  }
-- 7. 启动
$ systemctl start docker
-- 8 加入开机自启
systemctl enable docker
 
3. docker-容器,镜像,仓库,dockerfile,docker-compose 
 
  Docker 容器,镜像,仓库,dockerfile,docker-compose 
 
镜像(Image)例如:一个镜像可以包含一个完整的 ubuntu 操作系统环境,里面仅安装了 Apache 或用户需要的其它应用程序。也有比如PHP镜像,nginx镜像。 镜像可以用来创建 Docker 容器。用户可以直接
从其他人那里下载一个已经做好的镜像来直接使用。
通俗的来说一个镜像好比是一个盗版的windows光碟文件,它可以装无数个window系统。
同样的,一个PHP docker镜像,也可以装无数个PHP。 
 
容器(Container): 镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。 
说了这么多,能不能通俗点:
一个镜像好比是一个盗版的windows光碟文件,它可以装无数个window系统。装好了的系统,你可以理解为一个容器。
同样的,一个PHP docker镜像,也可以装无数个PHP,装好了的PHP,就是一个docker容器。 
 
仓库(Repository) : 仓库是集中存放镜像文件的场所
有时候会把仓库和仓库注册服务器混为一谈,并不严格区分。实际上,仓库注册服务器往往存在多个仓库,每个仓库又存在多个镜像,每个镜像有有不同的标签(tag),
仓库分为公开仓库和私有仓库两种,最大的公开仓库是Docker hub,存放了数量庞大的镜像供用户下载。
 
Dockerfile组合映像的命令行文本,可以在命令行中使用各种命令,Docker通过读取Dockerfile内得指令生成映像
Doclerfile是个文本文件,其内包含了一条条的指令,每一条指令构建一层,因为每一条指令的内容,就是描述该层如何构建
 
Docker Compose 用于定义和运行多容器docker的应用程序工具(此compose非composer)
compose是docker的服务编排工具,诞生之初是更好的帮助运维人员去管理docker容器,减少繁琐的单个容器的创建,删除等操作,适合组合使用多个容器开发的场景
对于多个容器的操作,传统的方式是一个个的创建,运行,而compose只需要一次性把这些命令写到docker-compose.yml文件里面,在以后整个启动环境的时候,只需要运行docoer-composer up这个命令就ok
 
4. 快速入门 
  
  4.0. 常用命令 
 
============= 操作仓库 =============
-- 1. 从仓库上下载镜像资源到本地
docker pull xxx/yyy
-- 2. 推送本地镜像到仓库
docker push xxx/yyy
 
 
============= 操作镜像 =============
-- 1. 查看所有的镜像
docker images
-- 2. 删除镜像
docker rmi xxx/yyy
-- 3. 删除所有镜像
docker rmi $(docker images)
-- 4. 根据dockerfile构建镜像
docker build -t [镜像名称] .
-- 5. 强制删除镜像
docker rmi -f xxx/yyy
--- 6. 查看镜像的构建历史
docker history 镜像
 
 
============= 操作容器 =============
-- 1. 查看运行的容器
docker ps
-- 2. 查看所有容器(含未运行的)
docker ps -a
-- 3. 创建容器
docker run -itd --name 容器名称(自定义) 镜像名称
-- 4. 进入容器中
docker exec -it 容器名称 挂起命令(top,ping,sh,bash...)
-- 5. 容器转为镜像
docker commit -m="猫叔" 容器 镜像名称
-- 6. 启动容器
docker start 容器名
-- 7. 停止容器
docker stop 容器名
-- 8. 删除容器
docker rm 容器名
-- 9. 删除所有容器
docker rm $(docker ps -a -q)
 
 
============= 网络环境配置 =============
-- 1. 查看所有网络配置
docker network ls
-- 2. 创建网络
docker network create --subnet=172.100.100.0/24 mynetwork
-- 3. 删除网络
docker network rm mynetwork
-- 4. 给容器定义网络 --network=网络名 --ip=自定义ip
docker run -itd --network=mynetwork --ip=172.100.100.100 --name 容器名称(自定义) 镜像名称
============= 导出备份 =============
-- 1. 根据 容器 导出tar文件
docker export 容器名 > 文件名.tar
-- 2. 根据 容器 导出的tar文件转为镜像
docker import 文件名.tar 镜像名
-- 3. 根据 镜像 导出tar文件
docker save 镜像名 > 文件名.tar
-- 4. 根据 镜像 导出的tar文件转为镜像
docker load < 文件名.tar 
 
 
 
 
原文地址:https://www.cnblogs.com/bkhdd/p/13496870.html