Docker安装,基本概念,执行流程,生命周期简介
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安装,基本概念,执行流程,生命周期简介的更多相关文章
- Servlet 执行流程 生命周期 ServletConfig 线程安全
Day34 servlet 三.如何使用Servlet 1.继承GenericServlet类(通用) (1)GenericServlet类有一个关键的设计,定义了一个私有的ServletConfig ...
- Android之Activity生命周期简介
概述 有图有真相,所以先上图: 上图是从Android官网截下的Activity的生命周期流程图,结构非常清晰,它描述了Activity在其生命周期中所有可能发生的情况以及发生的先后顺序,下面就将结合 ...
- vue生命周期简介
vue生命周期简介 生命周期的钩子 LifeCycle hooks 上面已经能够清晰的看到vue2.0都包含了哪些生命周期的钩子函数~~ 那么 执行顺序以及什么时候执行,我们上代码来看~~~ 生命周期 ...
- Vue生命周期简介和钩子函数
钩子就好像是把人的出生到死亡分成一个个阶段,你肯定是在出生阶段起名字,而不会在成年或者死亡的阶段去起名字.或者说你想在出生阶段去约炮,也是不行的.组件也是一样,每个阶段它的内部构造是不一样的.所以一般 ...
- 浅谈Android的Activity运行流程(生命周期)
关于Android的Activity运行流程,我们可以写一些程序来直观的查看Activity的运行流程.在这里我们使用Log工具来获取Activity运行日志.假如我们新建一个Android项目,Pr ...
- Vue(3)- 安装脚手架、过滤器、生命周期的钩子函数、vue-router基本使用
一.安装脚手架 1.下载node.js,本文下载版本为node-v8.12.0-x64.msi,一键式安装. 2.安装完成后,打开终端,输入node,可进入node环境(两次ctrl+c退出),如下图 ...
- Vue 3 --安装脚手架、过滤器、生命周期的钩子函数、vue-router基本使用
一.安装脚手架 1.下载node.js,本文下载版本为node-v8.12.0-x64.msi,一键式安装. 2.安装完成后,打开终端,输入node,可进入node环境(两次ctrl+c退出),如下图 ...
- [PHP]代码执行和生命周期
PHP代码的执行:1.和大部分程序一样,接收数据,处理数据,输出结果2.编写的代码就是输入的数据,php内核进行处理,返回相应的输出3.php作为业务程序和编译语言的区别就是,php多了一步把用户代码 ...
- Spring Framework核心概念之Bean生命周期管理
目录 Spring Bean的生命周期 相关接口的分类 测试SpringBean生命周期的Demo程序 小结 Spring Bean的生命周期 Spring容器既Application或者WebApp ...
随机推荐
- package.json中一些配置项的含义
{ "name": "webpack-demo", "version": "1.0.0", "de ...
- Day1-C-CF-1144A
简述:给你一串字符,判断是否由连续字母构成且每个字符只出现一次 思路:用set直接储存,判断size和初末位置字母与size的关系即可 代码: #include<iostream> #in ...
- Java 正则?:?=?!的理解
上图是官方文档的介绍,总结一下讲了两个知识点 ①是否获取匹配并保存匹配的值.②正向预查和反向预查. 1:解释是否获取匹配并保存匹配的值 ()表示捕获分组,获取匹配,()把每个分组里的匹配的值保存起来 ...
- 洛谷 P6046 [CTSC2000]快乐的蜜月
先讲解一下如何处理这道题的毒瘤输入.\(m\) 和 \(d\) 之间的"/"和" TO "都可以用 getchar() 强行吃掉,日期的转换可以用公式 \(s_ ...
- Python学习笔记之基础篇(五)字典
#数据类型划分:可变数据类型 不可变数据类型 #不可变数据类型 : 元组 bool int str --> 可哈希 #可变数据类型 list ,dict set --->不可哈希 ''' ...
- 标准模板库中的链表(list)
//C++数据结构与算法(第4版) Adam Drozdek 著 徐丹 吴伟敏<<清华大学出版社>> 头文件:include<list> list() 创建一个 ...
- 常用的HBase命令
进入HBase shell:hbase shell 退出HBase shell:exit 查看HBase中所有的表:list 查看某个表中的记录总数:count 'table name' 查看某个表中 ...
- ROS学习笔记9-创建ros消息和服务
该节内容主要来自于官方文档的两个小节:1.使用rosed来编辑2.创建ros消息的服务 先来看rosed: rosedrosed命令是rosbash的一部分,使用rosed可以直接编辑包中的一个文件, ...
- mysql8.0 for windows环境配置
1.安装 zip压缩包解压后,需要设置环境变量. MYSQL_HOME = E:\mysql-8.0.16-winx64 在path中,增加变量%MYSQL_HOME%\bin 2.初始化 在安装根目 ...
- 报错信息 Context []startup failed due to previous errors
文章转自:http://blog.sina.com.cn/s/blog_49b4a1f10100q93e.html 框架搭建好后,启动服务器出现如下的信息: log4j:WARN No appende ...