Docker 快速入门以及容器,镜像,仓库,dockerfile详解

一、 概念
  • 官方的:
    Docker 是一个开源的应用容器引擎,你可以将其理解为一个轻量级的虚拟机,开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上。
  • 通俗的:
    比如:一台机器上,运行了3个docker, 每个docker里面分别运行着nginx,php和mysql。你想把这台机器上的nginx,php和mysql部署到另外10台机器。直接执行一系列docker命令就可以了,是不是很简单?
二、为什么要使用Docker?

作为一种新兴的虚拟化方式,Docker跟传统的虚拟化方式相比具有众多的优势。

  1. 更高效的利用系统资源
    由于容器不需要进行硬件虚拟以及运行完整操作系统等额外开销,Docker对系统资源的利用率更高。无论是应用执行速度、内存损耗或者文件存储速度,都要比传统虚拟机技术更高效。因此,相比虚拟机技术,一个相同配置的主机,往往可以运行更多数量的应用。
  2. 更快速的启动时间
    传统的虚拟机技术启动应用服务往往需要数分钟,而Docker容器应用,由于直接运行于宿主内核,无需启动完整的操作系统,因此可以做到秒级、甚至毫秒级的启动时间。大大的节约了开发、测试、部署的时间。
  3. 一致的运行环境
    开发过程中一个常见的问题是环境一致性问题。由于开发环境、测试环境、生产环境不一致,导致有些bug并未在开发过程中被发现。而Docker的镜像提供了除内核外完整的运行时环境,确保了应用运行环境一致性, 从而不会再出现**「这段代码在我机器上没问题啊」**这类问题。
  4. 持续交付和部署
    对开发和运维(DevOps)人员来说,最希望的就是一次创建或配置,可以在任意地方正常运 行。 使用Docker可以通过定制应用镜像来实现持续集成、持续交付、部署。开发人员可以通过Dockerfile来进行镜像构建,并结合持续集成(Continuous Integration) 系统进行集成测试,而运维人员则可以直接在生产环境中 快速部署该镜像,甚至结合持续部署(ContinuousDelivery/Deployment)系统进行自动部署。而且使用Dockerfile使镜像构建透明化,不仅仅开发团队可以理解应用运行环境,也方便运维团队理解应用运行所需条件,帮助更好的生产环境中部署该镜像。
  5. 更轻松的迁移
    由于Docker确保了执行环境的一致性,使得应用的迁移更加容易。Docker可以在很多平台上运行,无论是物理机、虚拟机、公有云、私有云,甚至是笔记本,其运行结果是一致的。
    因此用户可以很轻易的将在一个平 台上运行的应用,迁移到另一个平台上,而不用担心运行环境的变化导致应用无法正常运行的情况。
  6. 更轻松的维护和扩展
    Docker使用的分层存储以及镜像的技术,使得应用重复部分的复用更为容易,也使得应用的维护更新更加简单,基于基础镜像进一步扩展镜像也变得非常简单。此外,Docker团队同各个开源项目团队一起维护了一大批高质量的官方镜像,既可以直接在生产环境使用,又可以作为基础进一步定制,大大的降低了应用服务的镜像制作成本。 对比传统虚拟机总结特性容器虚拟机 启动秒级分钟级 硬盘使用一般为MB 一般为GB 性能接近原生弱于 系统支持量单机支持上千个容器一般几十个
三、 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"]
}
-- 6. 启动
$ systemctl start docker
-- 7. 加入开机自启
systemctl enable docker
四、 docker-容器,镜像,仓库,dockerfile
  • 镜像(Image)
  1. 例如:一个镜像可以包含一个完整的 ubuntu 操作系统环境,里面仅安装了 Apache 或用户需要的其它应用程序。也有比如PHP镜像,nginx镜像。 镜像可以用来创建 Docker
    容器。用户可以直接从其他人那里下载一个已经做好的镜像来直接使用。
  2. 通俗点: 一个镜像好比是一个盗版的windows光碟文件,它可以装无数个window系统。 同样的,一个PHP docker镜像,也可以装无数个PHP。
  • 容器(Container)
  1. 镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
  2. 通俗点: 一个镜像好比是一个盗版的windows光碟文件,它可以装无数个window系统。装好了的系统,你可以理解为一个容器。同样的,一个PHP
    docker镜像,也可以装无数个PHP,装好了的PHP,就是一个docker容器。
  • 仓库(Repository)
  1. 仓库是集中存放镜像文件的场所。
  2. 有时候会把仓库和仓库注册服务器(Registry)混为一谈,并不严格区分。实际上,仓库注册服务器上往往存放着多个仓库, 每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。
  3. 仓库分为公开仓库(Public)和私有仓库(Private)两种形式。 最大的公开仓库是 Docker Hub,存放了数量庞大的镜像供用户下载。
  • dockerfile
  1. Dockerfile是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。
  2. 这种方式是比较流行的方式。就是将需要对镜像的操作全部写到一个文件中,然后使用docker build命令从这个文件中创建镜像 这种方法可以使镜像的创建变得透明化和独立化,并且创建过程可以被 重复执行
  3. dockerfile文件以行位单位,性首为dockerfile命令,命令都是大写形式,期后紧跟着的是命令的参数。
  • Compose
  1. Compose是 Docker 的服务编排工具,诞生主要是来帮助开发或运维人员很好地管理docker容器 减少繁琐的单个容器创建、删除等操作,比较适合组合使用多个容器进行开发的场景。
  2. 对于需要多个容器的操作,传统的方式是一个个的创建及运行,而composer则只需要通过一次性把这些命令写在docker-composer.yml文件中
    以后每次启动这一整个环境的时候,只需要你只要敲一个 docker-composer up命令就ok了
五、 快速入门
  • 常用命令
============= 操作仓库 =============

-- 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
  • 从仓库-》镜像-》容器
[root@localhost ~]# docker pull centos:centos7
centos7: Pulling from library/centos
524b0c1e57f8: Pull complete
Digest: sha256:e9ce0b76f29f942502facd849f3e468232492b259b9d9f076f71b392293f1582
Status: Downloaded newer image for centos:centos7

-- 从仓库下载centos7的镜像文件到本地
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos centos7 b5b4d78bc90c 2 months ago 203MB
-- 构建容器操作
[root@localhost ~]# docker run -itd --name centos centos:centos7
45de099e5ec0a896ae510be298175c4ac28519fa07e57347e0784f1dbea20fcd
[root@localhost ~]# docker exec -it centos bash
[root@45de099e5ec0 /]# ls
anaconda-post.log dev home lib64 mnt proc run srv tmp var
bin etc lib media opt root sbin sys usr
  • 从dockerfile-》镜像-》容器
--创建一份dockerfile文件
FROM centos:centos7
--基于dockerfile构建镜像
[root@localhost centos]# docker build -t centos_images .
Sending build context to Docker daemon 2.048kB
Step 1/1 : FROM centos:centos7---> b5b4d78bc90c
Successfully built b5b4d78bc90c
Successfully tagged centos_images:latest
[root@localhost centos]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos centos7 b5b4d78bc90c 2 months ago 203MB
centos_images latest b5b4d78bc90c 2 months ago 203MB

---为什么那么快?因为docker在本地找到了centos7的镜像所以就不会用仓库的了
同样也可以运用dockerfile构建的镜像来创建容器

[root@localhost centos]# docker run -itd --name centos_images centos_images
696743b0aaa4b5463f54f75f709ce35aece58481b8c2de5c5f4f723de43c0a23
[root@localhost centos]# docker exec -it centos_images bash
[root@696743b0aaa4 /]# ls
anaconda-post.log dev home lib64 mnt proc run srv tmp var
bin etc lib media opt root sbin sys usr
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值