30分钟快速上手Docker,看这篇就对了! 一、历史演化 二、什么是Docker? 三、Docker的安装 四、更换镜像地址 五、Docker的基本概念 六、docker原理 七、实战部署Tomcat 八、常用命令总结 九、容器内部结构 十、容器原理 十一、docker总结

1、演化史

30分钟快速上手Docker,看这篇就对了!
一、历史演化
二、什么是Docker?
三、Docker的安装
四、更换镜像地址
五、Docker的基本概念
六、docker原理
七、实战部署Tomcat
八、常用命令总结
九、容器内部结构
十、容器原理
十一、docker总结

2、物理机时代

2.1、图解

一个物理机上安装操作系统,然后直接运行我们的软件。也就是说你电脑上直接跑了一个软件,并没有开虚拟机什么的,资源极其浪费。

30分钟快速上手Docker,看这篇就对了!
一、历史演化
二、什么是Docker?
三、Docker的安装
四、更换镜像地址
五、Docker的基本概念
六、docker原理
七、实战部署Tomcat
八、常用命令总结
九、容器内部结构
十、容器原理
十一、docker总结

2.2、缺点

  • 部署慢

  • 成本高

虚拟机都不开,直接上物理机部署应用,那成本能不高嘛

  • 资源浪费

硬件资源没有合理利用

  • 不易迁移和增加机器

每次迁移都要重新安装一模一样的运行环境等

  • 受限于硬件

3、虚拟机时代

3.1、图解

一个物理机上虚拟化出来多个虚拟机,每个虚拟机上进行安装操作系统,然后在虚拟机上直接运行我们的软件。比如阿里云、腾讯云等云服务器都是虚拟机。

30分钟快速上手Docker,看这篇就对了!
一、历史演化
二、什么是Docker?
三、Docker的安装
四、更换镜像地址
五、Docker的基本概念
六、docker原理
七、实战部署Tomcat
八、常用命令总结
九、容器内部结构
十、容器原理
十一、docker总结

3.2、特点

  • 多部署

一个物理机上创建多个虚拟机,每个虚拟机的ip都不同,一个软件可以在不同虚拟机上进行部署。

  • 资源隔离

每个虚拟机都由独立分配的内存磁盘等硬件资源,通过Hypervisor分配。

  • 易扩展

随时随地都能在一个物理机上开出新的虚拟机。成本也低。

  • 成本相对较低

3.3、缺点

  • VM需要安装操作系统

假设我们的应用程序只有几KB,或者几十MB,但是却要在虚拟机上安装一个几百兆的操作系统来跑。

4、容器化时代

4.1、有什么用

看完了物理机时代和虚拟机时代后发现各有缺点,而容器化技术可以完美解决虚拟机时代的缺点。

或许你一定遇到过程序在我本地是正常的,为毛到了QA环境就GG了?或者本地和QA都测试通过了,为毛上线就GG了?这大多是因为环境不同所导致的,最简单的例子:本地和QA是jdk1.8,线上是1.6等等。容器化技术比如docker,开发者可以将安装环境和程序一起打包给运维,运维直接安装你这个打包的“脚本”即可,所有的环境都是你本地正常运行的。

如果没看懂就粗浅的理解为:你用shell命令写了个脚本,下载jdk,配置环境变量、下载tomcat、部署你的程序等等这一套流程,然后交给运维,运维直接sh xxx.sh就完事了,环境什么的都是你给的,不会出现环境不一致的情况。你肯定有疑问:我虚拟机上有jdk了,你给我的脚本里再安装jdk肯定不行啊,容器化技术可以让资源隔离,互不影响。

4.2、对比虚拟机时代

虚拟化技术是物理硬件的隔离,容器化技术是app层面的隔离,两者不冲突。往往容器化时代都是基于虚拟机基础之上做的资源隔离。它可以基于虚拟机的操作系统部署多服务,不再需要额外安装操作系。

4.3、特点

  • 标准化的迁移方式

那肯定啊,开发者将环境和程序打包给运维,运维直接执行就完事了。

  • 统一的参数配置

废话,包都是开发者给的,开发者难道把一个应用程序打两个不同的包给运维?

  • 自动化部署

  • 应用集群监控

  • 开发与运维之间的沟通桥梁

加粗了,自行体会。

二、什么是Docker?

Docker就是容器化技术的一种具体实现。基于Go语言开发。

加粗的一句话已经解释的明明白白了,不明白就等于没看懂上面的。

三、Docker的安装

基于Centos7的安装。

1、官方安装地址

https://docs.docker.com/engine/install/centos/

官方由于是国外的,所以不推荐,推荐下面的安装方式。

2、国内源安装

2.1、安装工具

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

device-mapper-persistent-data lvm2是干嘛的?

docker要想数据存储就必须要安装这两个,这两个是为了docker做数据存储用的。

2.2、添加源为国内

sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

2.3、更新安装Docker-CE

sudo yum makecache fast
sudo yum -y install docker-ce

2.4、验证是否安装成功

sudo service docker start
docker version

2.5、先爽一把helloworld

好不容易安装完了,先爽一把helloworld。

docker pull hello-world
docker run hello-world

30分钟快速上手Docker,看这篇就对了!
一、历史演化
二、什么是Docker?
三、Docker的安装
四、更换镜像地址
五、Docker的基本概念
六、docker原理
七、实战部署Tomcat
八、常用命令总结
九、容器内部结构
十、容器原理
十一、docker总结

四、更换镜像地址

需要更换镜像仓库地址为阿里云的。

1、啥意思

记得maven嘛?maven下载下来一般都会改配置文件,将其远程仓库地址改为阿里云的,docker其实也一样,如果把他比作maven的话,可以理解成从远程仓库(镜像仓库)拉取jar包(镜像文件),但是远程镜像仓库是国外的,所以需要换成国内的。

2、更换步骤

(1)打开网站

https://www.aliyun.com/

(2)搜索“容器镜像服务”

30分钟快速上手Docker,看这篇就对了!
一、历史演化
二、什么是Docker?
三、Docker的安装
四、更换镜像地址
五、Docker的基本概念
六、docker原理
七、实战部署Tomcat
八、常用命令总结
九、容器内部结构
十、容器原理
十一、docker总结

(3)点击“立即开通”

30分钟快速上手Docker,看这篇就对了!
一、历史演化
二、什么是Docker?
三、Docker的安装
四、更换镜像地址
五、Docker的基本概念
六、docker原理
七、实战部署Tomcat
八、常用命令总结
九、容器内部结构
十、容器原理
十一、docker总结

(4)点击“镜像加速器”

30分钟快速上手Docker,看这篇就对了!
一、历史演化
二、什么是Docker?
三、Docker的安装
四、更换镜像地址
五、Docker的基本概念
六、docker原理
七、实战部署Tomcat
八、常用命令总结
九、容器内部结构
十、容器原理
十一、docker总结

(5)执行命令

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

(6)大功告成

上面1-5步骤执行完成后就大功告成了,就可以用docker pull xxx来测试下了,速度贼拉快。

五、Docker的基本概念

1、容器与镜像

1.1、镜像

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

1.2、容器

容器是镜像的实例,由Docker负责创建,容器之间彼此隔离。

1.3、一句话概况

一个镜像可以创建多个容器,容器之间彼此隔离,互不影响。

2、仓库

2.1、本地仓库

存放了自己docker pull下来的镜像。

2.2、远程仓库

存放了各种各样的镜像,docker pull命令就是先去本地仓库检查是否有这个镜像,没有的话就去远程仓库拉取镜像放到本地仓库。镜像都是别人打包好的应用程序,只读。

docker远程仓库地址:https://hub.docker.com/

直接搜索就行,不用注册登录。

2.3、一句话概况

跟maven仓库的含义几乎一样。

3、Docker Daemon

用于管理镜像和容器,客户端发起docker run的请求会交给docker daemon处理,docker daemon会给这个镜像开辟一个新的容器。再比如客户端发起docker pull命令也是交给docker daemon,docker daemon去检查本地仓库有没有,本地仓库没有的话docker daemon去远程仓库拉取镜像放到本地仓库。

六、docker原理

1、描述

原理很简单,核心在于docker daemon,客户端所有的请求都会交给daemon处理,比如下图中的三个命令的完整执行流程是这样的:

1.1、docker build

client发送docker build给docker daemon,docker daemon收到请求后会构建镜像放到本地仓库。

1.2、docker pull

client发送docker pull命令给docker daemon,docker daemon收到命令后会优先检查本地仓库是否存在此镜像,若不存在则去远程仓库拉取镜像并放到本地仓库,若存在则不走远程仓库。

1.3、docker run

client发送docker run命令给docker daemon,docker daemon收到命令后会启动一个新的容器,所以一个镜像可以有多个容器,只要我run一次就会产生一个新的容器出来。

2、图解

30分钟快速上手Docker,看这篇就对了!
一、历史演化
二、什么是Docker?
三、Docker的安装
四、更换镜像地址
五、Docker的基本概念
六、docker原理
七、实战部署Tomcat
八、常用命令总结
九、容器内部结构
十、容器原理
十一、docker总结

七、实战部署Tomcat

1、找镜像

(1)去远程仓库找镜像 https://hub.docker.com/

(2)

30分钟快速上手Docker,看这篇就对了!
一、历史演化
二、什么是Docker?
三、Docker的安装
四、更换镜像地址
五、Docker的基本概念
六、docker原理
七、实战部署Tomcat
八、常用命令总结
九、容器内部结构
十、容器原理
十一、docker总结

(3)一般带官方logo的,且名字就是官方名字的(比如tomcat),且start最高的,那就是正品。其他的可能都是个人的,个人的不靠谱。

30分钟快速上手Docker,看这篇就对了!
一、历史演化
二、什么是Docker?
三、Docker的安装
四、更换镜像地址
五、Docker的基本概念
六、docker原理
七、实战部署Tomcat
八、常用命令总结
九、容器内部结构
十、容器原理
十一、docker总结

(4)

30分钟快速上手Docker,看这篇就对了!
一、历史演化
二、什么是Docker?
三、Docker的安装
四、更换镜像地址
五、Docker的基本概念
六、docker原理
七、实战部署Tomcat
八、常用命令总结
九、容器内部结构
十、容器原理
十一、docker总结

2、安装tomcat

2.1、拉取镜像

docker pull tomcat

完整命令是:docker pull 镜像名<:tags> 从远程仓库拉取镜像。如果没写:tags则代表是latest版本。如下图

30分钟快速上手Docker,看这篇就对了!
一、历史演化
二、什么是Docker?
三、Docker的安装
四、更换镜像地址
五、Docker的基本概念
六、docker原理
七、实战部署Tomcat
八、常用命令总结
九、容器内部结构
十、容器原理
十一、docker总结

比如也可以拉取带tags的镜像

docker pull tomcat:8.5.55-jdk8-openjdk

这个tag是从如下地方获取的

30分钟快速上手Docker,看这篇就对了!
一、历史演化
二、什么是Docker?
三、Docker的安装
四、更换镜像地址
五、Docker的基本概念
六、docker原理
七、实战部署Tomcat
八、常用命令总结
九、容器内部结构
十、容器原理
十一、docker总结

2.2、查看镜像

docker images

2.3、启动容器

镜像有了该启动容器玩玩了。

docker run tomcat

完整命令是:docker run 镜像名<:tags> 这里没指定tag就代表是latest, docker images可以查看镜像tags等信息。

2.4、问题

我们已经装逼三连:docker pulldocker imagesdocker run,将tomcat正常启动了,默认端口8080,问题来了,我怎么访问呢?它是在docker里的,不是我宿主机的8080端口,这就需要做一个端口映射。宿主机和docker启动的tomcat的端口映射。

2.5、端口映射

docker run -p 8000:8080 tomcat

也就是启动参数里多加个-p参数,-p参数用于端口映射,前面是宿主机端口,后面是容器端口。

2.6、测试

浏览器输入:http://localhost:8800

404?那是因为新版本tomcat将webapps下面的内容都删了,所以找不到了原来的index.jsp文件了。这又有问题了,我怎么进入我容器里的tomcat目录?比如看个log,找到webapps给他添加文件等操作。

2.7、进入容器里的tomcat

# 先用docker ps命令查看启动的容器
docker ps

30分钟快速上手Docker,看这篇就对了!
一、历史演化
二、什么是Docker?
三、Docker的安装
四、更换镜像地址
五、Docker的基本概念
六、docker原理
七、实战部署Tomcat
八、常用命令总结
九、容器内部结构
十、容器原理
十一、docker总结

# 进入容器的tomcat
docker exec -it ac1c3d62b75d /bin/bash

格式:docker exec [-it] 容器id 命令

exec:在对应容器中执行命令

-it:采用交互方式执行命令

执行ls -l查看目录

30分钟快速上手Docker,看这篇就对了!
一、历史演化
二、什么是Docker?
三、Docker的安装
四、更换镜像地址
五、Docker的基本概念
六、docker原理
七、实战部署Tomcat
八、常用命令总结
九、容器内部结构
十、容器原理
十一、docker总结

可以看下webapps,里面空空如也。所以404,但是外层有一个webapps.dist文件夹,这个文件夹是原有tomcat的主页面,我们可以删除webapps,然后mv命令将webapps.dist改为webapps,等自动部署完在访问网页就正常了。

mv后tomcat部署稍微慢点,等1-2min,在访问就行。

2.8、怎么后台启动

现在问题:ctrl+c就结束进程了。

# -d 参数即可
docker run -p 8000:8080 -d tomcat

2.9、总结

以上步骤其实就干了这么几件事:

  • docker pull 镜像

  • docker run 镜像

-p 端口映射

-d 后台启动

  • docker exec -it 镜像id /bin/bash

八、常用命令总结

命令 解释
docker pull 镜像名<:tags> 从远程仓库拉取镜像到本地仓库
docker images 查看本地仓库所有镜像
docker run 镜像名<:tags> 基于镜像创建容器并启动,可以添加-d port1:port2参数,port1:宿主机端口,port2:容器端口, -d参数代表后台运行
docker ps 查看当前所有启动的容器
docker ps -a 查看本地所有容器,包含未启动的,删除容器的时候可用来查询容器id
docker start/stop/restart 容器id 启动/停止/重启容器
docker rm <-f> 容器id 删除<-f:强制删除>容器,运行中的容器不能删除,-f可以强制
docker rmi <-f> 镜像名称 <:tags> 删除<强制删除>镜像,镜像有容器在启动,不能被删除,-f可以强制
docker exec [-it] 容器id 命令 进入容器主目录,exec:在对应容器中执行命令,-it:采用交互方式执行命令

九、容器内部结构

1、内部结构

你jdk都没安装,怎么就能跑tomcat?tomcat容器内部包含了如下:

  • 一个超级迷你的linux系统

  • jdk

  • tomcat

2、验证

先进入容器

docker exec -it ac1c3d62b75d /bin/bash
  • linux系统

执行cat /proc/version,可以发现带了个红帽系统

30分钟快速上手Docker,看这篇就对了!
一、历史演化
二、什么是Docker?
三、Docker的安装
四、更换镜像地址
五、Docker的基本概念
六、docker原理
七、实战部署Tomcat
八、常用命令总结
九、容器内部结构
十、容器原理
十一、docker总结

  • jdk

java -version

  • tomcat

这个还用验证?

十、容器原理

1、图解

30分钟快速上手Docker,看这篇就对了!
一、历史演化
二、什么是Docker?
三、Docker的安装
四、更换镜像地址
五、Docker的基本概念
六、docker原理
七、实战部署Tomcat
八、常用命令总结
九、容器内部结构
十、容器原理
十一、docker总结

2、总结

created -> running -> paused -> deleted

3、验证

docker create tomcat
# 查看容器状态,会发现是created
docker ps -a

30分钟快速上手Docker,看这篇就对了!
一、历史演化
二、什么是Docker?
三、Docker的安装
四、更换镜像地址
五、Docker的基本概念
六、docker原理
七、实战部署Tomcat
八、常用命令总结
九、容器内部结构
十、容器原理
十一、docker总结

docker start 8c4a21f47b8f
# 查看容器状态,会发现是up, up就对应running,代表运行中
docker ps

30分钟快速上手Docker,看这篇就对了!
一、历史演化
二、什么是Docker?
三、Docker的安装
四、更换镜像地址
五、Docker的基本概念
六、docker原理
七、实战部署Tomcat
八、常用命令总结
九、容器内部结构
十、容器原理
十一、docker总结

# docker stop命令会让容器进入exit状态,这个不等于paused,paused没有演示的必要。
docker stop 8c4a21f47b8f
# rm删除容器。也就对应deleted状态
docker rm 8c4a21f47bf

十一、docker总结

发现优点了没?

  • 一个宿主机上或者虚拟机上启动N个docker,每个docker是一个tomcat,之前集群是多个虚拟机,或者宿主机,现在是一个虚拟机上开N个docker容器,然后映射不同的端口,牛逼。当然你会说负载均衡,挂了一个第二个还能支持,这种需要多台虚拟机的。但是也大大节省了资源消耗。虽然你一台机器也能改端口来完成,但是docker节省资源,而且资源隔离,N个容器之间彼此独立。

  • 资源隔离,多个容器之间彼此不干扰。

  • 环境统一,因为只要镜像的tag一样,那么启动的容器的环境都一致。牛逼!

下文我们将介绍:Dockerfile,欢迎关注