Docker基本概念

在使用Docker前,首先要先知道Docker中这几个常用的概念:

镜像:镜像是文件,只读的,提供了运行完整软硬件应用程序的集装箱。

容器:是镜像的实例,由Docker负责创建,容器之间彼此隔离,容器可以被创建,删除,停止。

仓库:用来保存镜像,可以理解为代码控制中的代码仓库,Docker官方仓库名字是Docker Hub

更多内容,通过访问Docker官方网站获取:https://www.docker.com/

Docker安装

使用Docker首先我们要安装Docker,Docker Engine(Enterprise/Community)有企业版和社区版,平常学习我们选择社区版(Community)就可以了,更多区别可以访问官方网站查看二者的区别
Docker所支持的平台和操作系统也是很广泛的,支持Linux/Windows/Mac系统,这里主要讲解Linux其中一个发行版CentOS的安装使用,官网提供了是怎么获取安装Docker的,查看安装指南

在CentOS上安装Docker Engine - Community要求CentOS的版本必须是7以上版本,如果之前安装过先进行移除操作,如果没有安装过此步骤则无须执行

yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine

安装utils

yum install -y yum-utils device-mapper-persistent-data lvm2

配置合适的repo,考虑国外网站的速度建议选择阿里云给我们提供的repo

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo         官方仓库
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo    阿里云仓库

配置好安装源之后,让yum检测并使用最快的源

yum makecache fast

开始安装Docker,ce表示是社区版

yum -y install docker-ce

启动服务

service docker start 或者 systemctl start docker

查看Docker的安装版本

docker version

到此安装工作就已经完成!

Docker架构

基本架构

Docker使用客户端-服务器(client-server)架构模式,可以使用docker version来查看安装的client和server端的版本。通过下面这个图可以简单清晰看出Server/Client通信,容器和镜像、数据之间的关系系,用户无法直接和Docker Server进行交互。

  • Docker是提供应用打包,部署与运行应用的容器化平台
  • Docker整体可以大致分为三部分
    • 内层:Server,可以是本地的也可以时远程的,接收并分发Client端发起的请求。
    • 中间层:REST API,使用HTTP协议简历Client与Server之间的通信。
    • 外层:Client 通过中间层向Docker Server发起请求,执行命令。

Docker Daemon 是Docker架构中一个常驻在后台的系统进程,主要功能是在后台启动一个Server接收处理Client发送的请求。Server负载接受Client发送的请求通过路由分发调度,找到相应的Handler来执行请求。

执行流程

客户端Client向服务端Docker Daemon发送各种命令,包括镜像的拉取,构建执行等,服务端由Docker daemon来负责管理Containers和Images,Registry是远程注册中心,用来提供各种各样的官方或者第三方镜像文件。

Docker使用

使用Docker运行镜像

了解完Docker的基本概念后,接下来就开始一个简单的例子来使用Docker,体会Docker带给我我们的方便之处。使用Docker部署一个Tomcat应用。打开Docker的官方镜像网站,搜索Tomcat可以看到官方给我们提供了很多镜像版本,执行

docker pull tomcat

或者指定版本:

docker pull tomcat:8.5.-jdk8-openjdk

可以看到在下载tomcat镜像的时候里面包含了tomcat运行所需要的JDK,这也说明了镜像是包含了应用运行的一整套环境,包含操作系统等等。

下载完成后就可以开始运行tomcat容器

docker run tomcat

docker使用常见命令如下:

docker pull imageName<:tags> 抽取远程仓库镜像
docker images 查看已下载镜像
docker run 创建容器,启动应用
docker ps 查看正在运行的镜像
docker rm 删除容器 添加-f参数强制删除
docker rmi 删除镜像

如果在下载过程中出现下载过慢的情况,可以配置阿里云镜像加速来提升下载速度

登录阿里云控制台,搜索 容器镜像服务

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://xxxxxxxx.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

创建配置文件,重启Docker服务就可以使用阿里云帮我们提供的Docker镜像加速服务了。

宿主机与容器间的通信

直接使用docker run tomcat 容器,这时我们通过外部浏览器还是无法正常访问tomcat首页,这是因为容器内部端口是与外面隔离的,这时我们可以在启动时配置端口映射,这时就可以建立容器与宿主机之间的通信,达到外部访问的目的,其实实现起来也很简单,只需执行

docker run -p : -d tomcat
-p 映射端口:容器端口
-d 表示在后台运行容器

这时就可以将容器的8080端口,与宿主机的8080端口进行绑定,与外面端口映射的时候我们可以自行指定。

这个时候如果要停止后台运行的容器,可以执行

docker kill containerID

如果不知道容器ID,可以使用docker ps -s来查看当前正在运行的容器信息,获取containerID。

容器内部结构

通过Docker镜像就可以快速实例化一个tomcat容器,我们省去了下载安装JDK,配置环境变量,下载tomcat的过程,是不是很方便快捷,同样我们如果需要mysql镜像也可以直接下载MySQL镜像来实例化一个MySQL数据库,这样是我们的应用在部署的时候可以模块化来部署,这样松耦合的实现可以方便我们对应用的管理,那么容器的内部结构究竟是如何实现的,其实我们也是可以直接进入容器内部,查看容器的内部结构。

docker exec [-it] 容器id 命令

例如:查看你tomcat,这里的命令是我们可选的,后面将会介绍。

[root@conly ~]# docker exec -it 3c7488f8d35a /bin/bash
root@3c7488f8d35a:/usr/local/tomcat

此处以tomcat容器为例,容器内部结构如图所示:包含了tomcat运行的必备环境。

这样就已经进入容器内部,进入/usrl/ocal目录,发现这里已经包含tomcat运行所需要的JDK和tomcat,而且容器内部自身是建立在一个Linux系统基础之上的,我们可能疑惑为什么有一个操作系统,文件还这么小,这里linux仅支持这个应用,其他组件一律没有安装,所以占用资源较少,这也很好的解释为什么Linux适合做服务器系统,可以根据不同业务场景定制化系统所需要的组件。

root@3c7488f8d35a:/usr/local# ls /usr/local/
aegis bin etc games include lib man openjdk- sbin share src tomcat

退出容器内部

exit

容器的生命周期

关于Docker容器的生命周期可以参考下图:

  • docker run 命令包含 docker create 和 docker start两个状态
  • docker create 单执行,则会进入停止状态
    • 执行docker start 进入开始状态
    • docker destroy 删除容器
  • docker kill 或者 docker stop 都置die状态,紧接着进入stop状态
    • docker kill 后进行docker start 创建新进程
    • docker stop 后进行docker start 进入恢复
  • docker restart 可以重启
  • docker pause 进行暂停状态

内存溢出OOM,会置die,查看状态 docker ps -a 我们会发现更多子状态。
关于Docker的基本学习先说这么多,后面介绍Docker中DockerFile,网桥,volume,以及Docker compose的进阶使用。

 
 
 
 
 
 

Docker安装,基本概念,执行流程,生命周期简介的更多相关文章

  1. Servlet 执行流程 生命周期 ServletConfig 线程安全

    Day34 servlet 三.如何使用Servlet 1.继承GenericServlet类(通用) (1)GenericServlet类有一个关键的设计,定义了一个私有的ServletConfig ...

  2. Android之Activity生命周期简介

    概述 有图有真相,所以先上图: 上图是从Android官网截下的Activity的生命周期流程图,结构非常清晰,它描述了Activity在其生命周期中所有可能发生的情况以及发生的先后顺序,下面就将结合 ...

  3. vue生命周期简介

    vue生命周期简介 生命周期的钩子 LifeCycle hooks 上面已经能够清晰的看到vue2.0都包含了哪些生命周期的钩子函数~~ 那么 执行顺序以及什么时候执行,我们上代码来看~~~ 生命周期 ...

  4. Vue生命周期简介和钩子函数

    钩子就好像是把人的出生到死亡分成一个个阶段,你肯定是在出生阶段起名字,而不会在成年或者死亡的阶段去起名字.或者说你想在出生阶段去约炮,也是不行的.组件也是一样,每个阶段它的内部构造是不一样的.所以一般 ...

  5. 浅谈Android的Activity运行流程(生命周期)

    关于Android的Activity运行流程,我们可以写一些程序来直观的查看Activity的运行流程.在这里我们使用Log工具来获取Activity运行日志.假如我们新建一个Android项目,Pr ...

  6. Vue(3)- 安装脚手架、过滤器、生命周期的钩子函数、vue-router基本使用

    一.安装脚手架 1.下载node.js,本文下载版本为node-v8.12.0-x64.msi,一键式安装. 2.安装完成后,打开终端,输入node,可进入node环境(两次ctrl+c退出),如下图 ...

  7. Vue 3 --安装脚手架、过滤器、生命周期的钩子函数、vue-router基本使用

    一.安装脚手架 1.下载node.js,本文下载版本为node-v8.12.0-x64.msi,一键式安装. 2.安装完成后,打开终端,输入node,可进入node环境(两次ctrl+c退出),如下图 ...

  8. [PHP]代码执行和生命周期

    PHP代码的执行:1.和大部分程序一样,接收数据,处理数据,输出结果2.编写的代码就是输入的数据,php内核进行处理,返回相应的输出3.php作为业务程序和编译语言的区别就是,php多了一步把用户代码 ...

  9. Spring Framework核心概念之Bean生命周期管理

    目录 Spring Bean的生命周期 相关接口的分类 测试SpringBean生命周期的Demo程序 小结 Spring Bean的生命周期 Spring容器既Application或者WebApp ...

随机推荐

  1. zookeeper和eureka的区别在哪?

    zookeeper和eureka的区别在哪?传统的关系型数据库是ACID(原子性,一致性,独立性,持久性), nosql数据库是CAP(强一致性,可用性,分区容错性),分布式系统只能3进2,三个选两个 ...

  2. RHEL6配置CentOS yum源

    RHEL6配置CentOS yum源

  3. linux 从一台服务器向另台服务器复制文件

    使用scp命令: sudo scp -P 2222 username@192.168.0.200:/home/db/db_data.sql.gz /home/db/db_data.sql.gz scp ...

  4. Duilib自定义控件

    新版博客已经搭建好了,有问题请访问 htt://www.crazydebug.com 在公司二期项目中为了将谷歌内核嵌入到duilib中,采用了自定义duilib控件的方法,由于也是第一次用duili ...

  5. 神机iPhone6停产,苹果产业链应该感谢它还是痛恨它?

    据国内媒体报道,一些苹果上游供应商已经接到通知,iPhone6系列将会在5月底彻底停产,一时间,竟在网络上引发汹涌的怀念之情.iPhone6的特别之处在于它是苹果第一款大屏幕的智能手机,标志着库克彻底 ...

  6. Java垃圾回收机制详解和调优

    gc即垃圾收集机制是指jvm用于释放那些不再使用的对象所占用的内存.java语言并不要求jvm有gc,也没有规定gc如何工作.不过常用的jvm都有gc,而且大多数gc都使用类似的算法管理内存和执行收集 ...

  7. UOJ Contest #50: Goodbye Jihai

    比赛传送门:Goodbye Jihai. \(\Huge{\mathbf{再见,己亥.\\你好,庚子!\\祝大家新春快乐!}}\) A. 新年的促销 这题如果直接做的话可能方向会想歪,方向对了其实就是 ...

  8. SciPy 介绍

    章节 SciPy 介绍 SciPy 安装 SciPy 基础功能 SciPy 特殊函数 SciPy k均值聚类 SciPy 常量 SciPy fftpack(傅里叶变换) SciPy 积分 SciPy ...

  9. NO34 awk

  10. 01.DesignParttern设计模式,简单工厂,工厂方法,抽象工厂三大工厂的区别与联系

                工厂用来生产对象,对象具有方法和属性. 简单工厂的缺点(简单工厂并不是23中设计模式): 工厂类的职责相对过重,增加新的产品,需要修改工厂类的判断逻辑,违背开闭原则: JDK源 ...