当前位置: 代码迷 >> 综合 >> 微服务 之 02 Docker 篇
  详细解决方案

微服务 之 02 Docker 篇

热度:76   发布时间:2023-09-07 07:32:07.0

在写完上一章微服务介绍之后,我考虑了很久第二章写什么,是开始写Linux的Docker等和部署环境相关的技术,还是写像Spring Cloud等和后端相关的技术。最终决定了还是写Docker,因为分布式开发的核心技术是Docker,先把整个项目的环境搭起来,后端代码才有个更好的全局观。再不济也可以将大家平时写的单体应用部署上去感受一下。

好的,废话说多了,下面直接开始介绍主题。首先得说下这章需要使用到的工具:

  1. VMware
  2. Linux系统镜像,我用的是 Ubuntu 18.04
  3. 服务器管理软件,即远程连接虚拟机的软件,我用的是 FinalShell(没办法,毕竟免费)

当然,Docker本身有Windows和Mac版本,有兴趣的也可以去了解下。但是毕竟真正开发用的服务器用的就是Linux系统,所以尽量还是模拟下真实环境毕竟好。另外还有VMware 安装虚拟机我就不细说了,毕竟这种教程网上比较多,而且版本不同的话安装细节也有不同。

 

Docker简单介绍

官网地址:https://www.docker.com/

Docker 是一个开源的应用容器引擎 ,最初是 dotCloud 公司创始人 Solomon Hykes 在法国期间发起的一个公司内部项目,它是基于 dotCloud 公司多年云服务技术的一次革新,并于 2013 年 3 月以 Apache 2.0 授权协议开源,主要项目代码在 GitHub 上进行维护。

比较抽象的东西我就不多说了,网上资料也挺多的。我对Docker的了解最深的是官方自己的口号:

Build?once,Run?anywhere

翻译就是:一次构建,到处运行。什么意思?后面会慢慢说明,这里只要知道涉及到Docker的三大核心概念:镜像(Image )容器 ( Container )仓库 ( Repository )。这三大核心概念最后再来总结,先来创建我们的第一个 Docker 的项目。

 

安装

卸载旧版本

apt-get remove docker docker-engine docker.io containerd runc

使用 APT 安装

# 更新数据源
apt-get update
# 安装所需依赖
apt-get -y install apt-transport-https ca-certificates curl software-properties-common
# 安装
apt-get install docker.io

验证安装是否成功

docker version

微服务 之 02 Docker 篇

 

配置 Docker 镜像加速器

官方提供的中国区镜像

https://registry.docker-cn.com

阿里云加速器

由于国内的某些原因(不明说了),最好还是有个加速器,我用的就是阿里云的免费加速器。百度直接搜索 Docker 阿里云加速器,可以获得大量教程,我这里就不多说了,假设各位已经获得地址。

配置加速器

通过修改 daemon 配置文件 /etc/docker/daemon.json 来使用加速器

tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://自己的加速器地址.aliyuncs.com"]
}
EOF# 重启 Docker
systemctl daemon-reload
systemctl restart docker

验证配置是否成功

docker info# 输出最下方会有
Insecure Registries:
127.0.0.0/8
## 这里是你配置的镜像加速器
Registry Mirrors:
https://自己的加速器地址.aliyuncs.com
Live Restore Enabled: false
Product License: Community Engine
WARNING: No swap limit support

 

运行第一个容器

我们以 Tomcat为例,体验 Docker 是如何运行容器的

# 下载镜像
docker pull tomcat
# 运行容器
docker run --name Tomcat-container -p 8080:8080 -d tomcat

微服务 之 02 Docker 篇
浏览器输入虚拟机地址加端口8080即可访问 Tomcat
微服务 之 02 Docker 篇

 

三大核心概念

不知道经过上面的操作,你们对Docker有没有一个具体的印象,还是说一头雾水。我这里就可以结合上面的例子,给你们详细说明下这3个概念分别对应着什么。

  • 容器:包含着你们自己写的应用。举个例子,你的工程就是一间房子或者一辆汽车,容器就等于一个工厂
  • 镜像:官方制作的镜像。好比设计图。
  • 仓库:存放镜像的地方。等于你设计图放的地方。

那么现在我们需要制作一辆旧款式的汽车,我们先要从仓库里面找出汽车的设计图,然后交给工厂去按照设计图把你需要的汽车做出来。这么说不知道对这三大概念有更多的了解没有。

容器的本质其实就是一台虚拟机,每一个Docker都是一台虚拟机。等于在你的虚拟机里面,又开多一台虚拟机,但是这台新的虚拟机里面只包含了最最基础的运行环境,以及该项目所需要的环境,以保证提供最高的性能。

为了更好的理解,从docker的命令其实就可以看出来,刚刚启动Tomcat的时候有个运行容器的命令,其中有部分命令是 :-p 8080:8080,左边的8080是虚拟机的8080端口,右边的8080是容器的8080端口,意思就是用容器的8080端口映射到虚拟机的8080端口,这样当我们访问虚拟机的8080端口,实际上访问的是容器的8080端口。这样我们修改命令为 :-p 8081:8080,这样我们要访问Tomcat时需要访问的虚拟机端口就变成了8081。

另外还有一个命令:docker exec -it <容器名或id> /bin/bash,这个命令可以让我们进入容器的内部修改容器的配置信息,输入命令后我们进去容器后会发现里面的文件结构与Linux一模一样,这就是为什么说Docker容器其实就是一台虚拟机的原因。
 
那么问题就来了,现在我们学会了怎么创建一个Tomcat并访问他了,但是我们怎么把自己的项目放到Tomcat里面,然后让我们可以从外部访问到网页呢?这个问题就留到下一章 DockerFile篇 再继续说。

 
 
最后给大家贴出部分Docker有关常用的命令

操作镜像

以下均已 nginx 为例

# 获取镜像
docker pull nginx# 列出镜像列表
docker images# 镜像体积
docker system df# 查询虚悬镜像(dangling image)
docker image ls -f dangling=true# 删除虚悬镜像
docker image prune# 镜像摘要
docker images --digests# 删除镜像 : <镜像>可以是镜像id、镜像名、镜像摘要
docker rmi  <镜像1>  <镜像2>

操作容器

# 运行容器 : --name 容器名 -p 端口 -d 守护态运行
docker run --name nginx-container -p 80:80 -d nginx# 终止容器
docker stop <容器名或id># 开启容器
docker start <容器名或id># 重启容器
docker restart <容器名或id># 删除容器
docker rm <容器名或id># 查看容器列表 : -a 所有容器
docker ps -a# 进入容器
docker exec -it <容器名或id> /bin/bash# 清理所有处于终止状态的容器
docker container prune