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.49-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 8080:8080 -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-8  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的进阶使用。

posted @ 2019-12-09 23:51  星光Starsray  阅读(713)  评论(0编辑  收藏  举报