我和docker有个约会


前言

提示:这里可以添加本文要记录的大概内容:


提示:以下是本篇文章正文内容,下面案例可供参考

一、doc的介绍

. 开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源;
. linux容器的一种封装,提供简单易用的容器使用接口;
. 接口相当简单,用户可以方便的创建、销毁容器;
. 将应用程序与程序的依赖,打包在虚拟容器中 ;
. Docker是C/S模式

1.docker三大件

  1. 镜像(Image)
  2. 容器(Container)
  3. 仓库(Repository)

如下图:

在这里插入图片描述

	镜像(Image):就相当于是一个 root 文件系统。是用来创建 Docker 容器的模板,比如 centOS、nginx、php等。
	
	容器(Container):容器是独立运行的一个或一组应用,是镜像运行时的实体。镜像和容器的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。
	
	仓库(Repository):用来保存镜像,可以理解为代码控制中的代码仓库。

1.1.1docker的镜像

  1. 极度精简版的Linux程序运行环境;

  2. 需要定制化Build的一个“安装包”;

  3. 不建议有运行时需要修改的配置文件;

  4. 尽量重用和使用网上公开的基础镜像。

     精简版的到连vi,这样的命令都没有
     所以这时候我们就需要根据自己的需要定制化build出另一个镜像;
     这个镜像不建议有运行时需要修改的配置文件;
     镜像是可以用来被创建容器
    

1.1.2docker的容器

  1. 容器是镜像的实体,共享主机内核;

  2. 容器里可以运行不同OS的镜像,如centos、ubuntu;

  3. 容器使用沙箱机制,相互间没有任何接口;

  4. 容器性能开销极低。

     镜像的一个实体,可以被启动、开始、停止、删除;
     容器都是相互隔离,完全的沙箱机制;
     容器也可以看成是一个简易版的Linux环境(包括了root用户权限、进程空间、用户空间和网络空间等),另外也可能包含了运行在其中的应用程序;
    

1.1.2.1容器的生命周期

created -> 初建状态
running -> 运行状态
stopped -> 停止状态
paused -> 暂停状态
deleted -> 删除状态

如下图:
在这里插入图片描述

通过这个生命周期,大致会认为,这就是一台服务器、或是虚拟机;

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

物理机是一栋楼一户人家,独立的地基,独立的花园
虚拟机是一栋楼包含了多套房,一套房一户人家,共享地基、共享花园,但是有独立的卫生间、厨房和宽带;
Docker容器是一套房隔成多个小隔间(类似胶囊式公寓),每个小隔间住一位租户,共享地基、共享花园,还共享卫生间、厨房和宽带;

1.1.2.2docker容器 vs.虚拟机VM

在这里插入图片描述

VM是一个运行在宿主机之上的完整的操作系统,VM运行自身操作系统会占用较多的CPU、内存、硬盘资源。
Docker不同于VM,只包含应用程序以及依赖库,基于libcontainer运行在宿主机上,并处于一个隔离的环境中,这使得Docker更加轻量高效。
虚拟机开一下大概得2分多钟,而Docker只需要2秒钟。

3.docker的仓库

https://hub.docker.com/
在这里插入图片描述

Docker之所以这么吸引人,除了它的新颖的技术外,围绕官方Registry仓库的生态圈也是相当吸引人眼球的地方。在Docker Hub上可以很轻松下载到大量已经容器化好的应用镜像,即拉即用。
这些镜像,有些是官方维护的,还有很多的开发者自发上传分享的。

4.docker的机制

在这里插入图片描述

由docker客户端向docker主机发起请求,如:创建、停止、销毁容器等操作
Docker主机中的守护进程,接收指令后从镜像仓库拉取镜像,构建镜像、构建容器

5.docker的原理

在这里插入图片描述

Linux Containers 简称 LXC,基于容器的操作系统层级的虚拟化技术。借助于namespace的隔离机制和cgroup的限额功能。
LXC不是硬件的虚拟化,而是Linux内核的级别的虚拟机化,相对于传统的虚拟机,节省了很多硬件资源。
LXC提供了一套统一的API和工具来建立和管理Container。
docker是利用Linux内核虚拟机化技术(LXC),提供轻量级的虚拟化,以便隔离进程和资源。并利用LXC的内核namespace技术,进行进程的隔离。

6.docker的特点

  1. 非常的轻量级,内存占用小;

  2. 可以快速、毫秒级别的启动;

  3. 一致的运行环境;

  4. 一台服务器上运行成百上千的容器,并且相互隔离;

  5. 更轻松的迁移。

     Docker 轻巧快速。它为基于虚拟机管理程序的虚拟机提供了可行、经济、高效的替代方案,因此您可以利用更多的计算能力来实现业务目标。Docker 非常适合于高密度环境以及中小型部署,而您可以用更少的资源做更多的事情。
     由于 Docker 确保了执行环境的一致性,使得应用的迁移更加容易。Docker 可以在 很多平台上运行,无论是物理机、虚拟机、公有云、私有云,甚至是笔记本,其运 行结果是一致的。
     容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),保证A容器看不到B容器B,更重要的是容器性能开销极低。
    

7.docker应用场景

  1. web应用的自动化打包和发布。

  2. 自动化测试和持续集成、发布。

  3. 在服务型环境中部署和调整数据库或其他的后台应用。

  4. 从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境。

     Docker 还鼓励面向服务的体系结构和微服务架构。Docker 推荐单个容器只运行一个应 用程序或进程,这样就形成了一个分布式的应用程序模型,在这种模型下,应用程序或者服 务都可以表示为一系列内部互联的容器,从而使分布式部署应用程序,扩展或调试应用程序 都变得非常简单,同时也提高了程序的内省性。
    

8.docker不足

  1. 资源隔离方面不足;

  2. 安全问题;

  3. 版本兼容问题;

     只能限制资源消耗的最大值,不能隔绝其他程序占用自己的资源;
     只要拥有执行docker的权限,那就可以对docker容器进行所有的操作。
     Docker目前还在版本的快速更新中,细节功能调整较大,一些核心模块依赖于高版本内核,因此存在着版本的兼容问题;
    

二、Docker的基本操作

1.Docker的版本

  1. Docker-CE 社区版

  2. Docker-EE 企业版(收费)

     Docker-CE 社区版,由社区维护和提供技术支持,为免费版本,适合个人开发人员和小团队使用。
     Docker-EE 企业版,为收费版本,由售后团队和技术团队提供技术支持,专为企业开发和IT团队而设计。Docker-EE,增加一些额外功能,更重要的是提供了更安全的保障。
    

通常情况下,Docker-CE足以满足我们的需求

2.Docker的安装

  1. 安装依赖
    yum install -y yum-utils device-mapper-persistent-data lvm2
  2. 设置阿里云镜像
    yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  3. 安装 Docker-CE
    yum -y install docker-ce(最新版本)
    docker-ce-18.03.1.ce-1.el7.centos(安装指定版本)
  4. 查看docker 版本-v
    docker -v
    docker version
  5. 启动与设置开机启动
    systemctl start docker
    systemctl enable docker

2.Docker的基本命令操作

docker images # 显示本地所有的镜像列表
docker import # 从一个tar包创建一个镜像,往往和export结合使用
docker build # 使用Dockerfile创建镜像(推荐)
docker commit # 从容器创建镜像
docker rmi # 删除一个镜像
docker load # 从一个tar包创建一个镜像,和save配合使用
docker save # 将一个镜像保存为一个tar包,带layers和tag信息
docker history # 显示生成一个镜像的历史命令
docker tag # 为镜像起一个别名

docker login # 登录到一个registry
docker search # 从registry仓库搜索镜像
docker pull # 从仓库下载镜像到本地
docker push # 将一个镜像push到registry仓库中

docker create # 创建一个容器但是不启动它
docker run # 创建并启动一个容器
docker stop # 停止容器运行,发送信号SIGTERM
docker start # 启动一个停止状态的容器
docker restart # 重启一个容器
docker rm # 删除一个容器
docker kill # 发送信号给容器,默认SIGKILL
docker attach # 连接(进入)到一个正在运行的容器
docker wait # 阻塞到一个容器,直到容器停止运行

docker ps # 显示状态为运行(Up)的容器
docker ps -a # 显示所有容器,包括运行中(Up)的和退出的(Exited)
docker inspect # 深入容器内部获取容器所有信息
docker logs # 查看容器的日志(stdout/stderr)
docker events # 得到docker服务器的实时的事件
docker port # 显示容器的端口映射
docker top # 显示容器的进程信息
docker diff # 显示容器文件系统的前后变化

3.Docker案例

  1. 搜过镜像

    docker search redis
    
  2. 拉取镜像

    docker pull redis:5	#拉取指定版本镜像
    docker pull redis	#拉取最新镜像
    
  3. 正式创建容器并启用

    docker run -itd -p 6379:6379 --name redis -v /data/redis/data:/data redis:5 redis-server 	/etc/redis/redis.conf --appendonly yes
    

3.1参数介绍

	-p 6379:6379	#容器redis端口6379映射宿主主机6379
	--name redis	#容器名字为redis
	--restart always 	#自动重启
	-v /data/redis/data:/data	#容器/data映射到宿主机 /data/docker/redis 下 
	-d redis:5 	#后台模式启动redis  
	--appendonly yes	#开启redis的AOF持久化,默认为false,不持久化

在这里插入图片描述

4.图像化界面

  1. 可以使用 Portainer 作为容器的 GUI 管理方案
    https://portainer.io/install.html
    
  2. 拉取镜像与容器运行
    docker pull docker.io/portainer/portainer
    
    docker run -p 9000:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock  --name prtainer-demo -d docker.io/portainer/portainer
    

三、Dockerfile

1.Dockerfile介绍

  1. Docker构建镜像的基础,区别于其他容器的重要特征;
  2. Dockerfile是一个文本文件,包含了一条条的指令;
  3. 学会编写Dockerfile几乎是必备的,这有助于你理解整个容器的运行;
  4. 自动化和可移植性成为更容易的一件事;

2.Dockerfile基本指令

	FROM 		#从一个基础镜像构建新的镜像
	MAINTAINER	#维护者信息
	ENV		#设置环境变量
	RUN		#非交互式运行shell命令
	ADD		#将外部文件拷贝到镜像里,src可以为url
	WORKDIR	#/path/to/workdir, 设置工作目录
	USER		#设置用户ID
	VULUME		#<#dir>, 设置volume
	EXPOSE		#暴露哪些端口
	ENTRYPOINT	#执行命令 ENTRYPOINT ["/usr/sbin/nginx"]
	CMD		#执行命令 CMD ["start"]

3.Docker Compose

  1. 实现Dockerfile的快速编排
    docker search redis
  1. 安装docker-compose
curl -L https://github.com/docker/compose/releases/download/1.23.0-rc2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
  1. 查看docker-compose
   docker -compose version

猜你喜欢

转载自blog.csdn.net/qq_16467435/article/details/115731967
今日推荐