Dokcer简介与安装以及Springcloud部署

每天多学一点点~
博主最近在做微服务,听说dokcer部署特别方便,于是研究了一下~
话不多说,这就开始吧…

文章目录

  • Dokcer简介与安装以及Springcloud部署
  • 1.Docker简介
  • 2.Docker优点
  • 3.Docker架构
  • 4.Docker安装
  • 5.Docker镜像加速器
  • 6.Docker常用命令
  • 7.Docker容器
  • 8.初识Dockerfile
  • 9.重头戏:使用Dockerfile构建微服务镜像
  • 10.结语


1.Docker简介

2013年发布至今, Docker 一直广受瞩目,被认为可能会改变软件行业。
Docker是一个开源的容器引擎,它有助于更快地交付应用。 Docker可将应用程序和基础设施
层隔离,并且能将基础设施当作程序一样进行管理。使用 Docker可更快地打包、测试以及部
署应用程序,并可以缩短从编写到部署运行代码的周期。

spring cloud配置nacos自动刷新_springcloud

2.Docker优点

Docker的优点如下:

  1. 简化程序
    Docker 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流
    行的 Linux 机器上,便可以实现虚拟化。Docker改变了虚拟化的方式,使开发者可以直接将
    自己的成果放入Docker中进行管理。方便快捷已经是 Docker的最大优势,过去需要用数天乃
    至数周的 任务,在Docker容器的处理下,只需要数秒就能完成。
  2. 避免选择恐惧症
    如果你有选择恐惧症,还是资深患者。Docker 帮你 打包你的纠结!比如 Docker 镜像;
    Docker 镜像中包含了运行环境和配置,所以 Docker 可以简化部署多种应用实例工作。比如
    Web 应用、后台应用、数据库应用、大数据应用比如 Hadoop 集群、消息队列等等都可以打
    包成一个镜像部署。
  3. 节省开支
    一方面,云计算时代到来,使开发者不必为了追求效果而配置高额的硬件,Docker 改变了高
    性能必然高价格的思维定势。Docker 与云的结合,让云空间得到更充分的利用。不仅解决了
    硬件管理的问题,也改变了虚拟化的方式。

3.Docker架构

spring cloud配置nacos自动刷新_docker_02

  • Docker daemon( Docker守护进程)
    Docker daemon是一个运行在宿主机( DOCKER-HOST)的后台进程。可通过 Docker
    客户端与之通信。
  • Client( Docker客户端)
    Docker daemon是一个运行在宿主机( DOCKER-HOST)的后台进程。可通过 Docker
    客户端与之通信。
  • Images( Docker镜像)
    Docker镜像是一个只读模板,它包含创建 Docker容器的说明。它和系统安装光盘有点
    像,使用系统安装光盘可以安装系统,同理,使用Docker镜像可以运行 Docker镜像中的
    程序。
  • Container(容器)
    容器是镜像的可运行实例。镜像和容器的关系有点类似于面向对象中,类和对象的关系。
    可通过 Docker API或者 CLI命令来启停、移动、删除容器。
  • Registry
    Docker Registry是一个集中存储与分发镜像的服务。构建完 Docker镜像后,就可在当前
    宿主机上运行。但如果想要在其他机器上运行这个镜像,就需要手动复制。此时可借助
    Docker Registry来避免镜像的手动复制。
    一个 Docker Registry可包含多个 Docker仓库,每个仓库可包含多个镜像标签,每个标
    签对应一个 Docker镜像。这跟 Maven的仓库有点类似,如果把 Docker Registry比作
    Maven仓库的话,那么 Docker仓库就可理解为某jar包的路径,而镜像标签则可理解为jar
    包的版本号。

Docker Registry可分为公有Docker Registry和私有Docker Registry。 最常⽤的Docker
Registry莫过于官⽅的Docker Hub, 这也是默认的Docker Registry。 Docker Hub上存
放着⼤量优秀的镜像, 我们可使⽤Docker命令下载并使⽤。

4.Docker安装

Docker 是一个开源的商业产品,有两个版本:社区版(Community Edition,缩写为 CE)和
企业版(Enterprise Edition,缩写为 EE)。企业版包含了一些收费服务,个人开发者一般用
不到。下面的介绍都针对社区版。
Docker CE 的安装请参考官方文档,博主这里以CentOS7为例:

  1. Docker 要求 CentOS 系统的内核版本高于 3.10
    通过 uname -r 命令查看你当前的内核版本
  2. spring cloud配置nacos自动刷新_springcloud_03

  3. 使用 root 权限登录 Centos。确保 yum 包更新到最新
    yum -y update
  4. spring cloud配置nacos自动刷新_springcloud_04

  5. 卸载旧版本(如果安装过旧版本的话)
    yum remove docker docker-common docker-selinux docker-engine
  6. 安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是
    devicemapper驱动依赖的
    yum install -y yum-utils device-mapper-persistent-data lvm2
  7. 设置yum源,并更新 yum 的包索引
    yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    yum makecache fast
  8. 可以查看所有仓库中所有docker版本,并选择特定版本安装
    yum list docker-ce --showduplicates | sort -r
  9. spring cloud配置nacos自动刷新_Docker_05

  10. 安装docker
    yum install docker-ce 命令
    由于repo中默认只开启stable仓库,故这里安装的是最新稳定版18.03.1
    yum install # 例如:yum -y install docker-ce-18.03.1.ce
  11. spring cloud配置nacos自动刷新_Docker_06

  12. 启动并加入开机启动
    systemctl start docker
    systemctl enable docker
  13. 验证安装是否成功(有client和service两部分表示docker安装启动都成功了)
    docker version
  14. spring cloud配置nacos自动刷新_linux_07

  15. 卸载docker
    yum -y remove docker-engine

上述都是傻瓜式操作,只要跟着博主来,一般是不会有问题的

5.Docker镜像加速器

有时候输入 docker search java 会出现
Error response from daemon: Get https://index.docker.io/v1/search?q=java: read tcp
52.200.132.201:443: i/o timeout
我们可以用阿里云的镜像加速器,不得不说阿里就是爸爸啊。
登录阿里云
https://cr.console.aliyun.com/#/accelerator)spring cloud配置nacos自动刷新_Docker_08
cd /etc/docker
查看有没有 daemon.json。这是docker默认的配置文件。
如果没有新建,如果有,则修改。
vim daemon.json
{
“registry-mirrors”: [“https://m9r2r2uj.mirror.aliyuncs.com”]
}

保存退出。重启docker服务
sudo systemctl daemon-reload
service docker restart

6.Docker常用命令

镜像相关命令

  1. 搜索镜像
    https://hub.docker.com/ dokcer hub 的网站
    可使用 docker search命令搜索存放在 Docker Hub中的镜像。
    列如 dokcer search java 前提是先启动docker sudo service docker start
  • NAME :镜像仓库名
  • DESCRIPTION:镜像仓库描述
  • STARS:镜像仓库收藏数,表示该镜像仓库的受欢迎程度,类似于 GitHub的 stars0
  • OFFICAL:表示是否为官方仓库,该列标记为[0K]的镜像均由各软件的官方项目组创建和维
    护。
  • AUTOMATED:表示是否是自动构建的镜像仓库。
  1. 下载镜像
    使用命令docker pull命令即可从 Docker Registry上下载镜像,执行该命令后,Docker会从
    Docker Hub中的 java仓库下载最新版本的 Java镜像。如果要下载指定版本则在java后面加冒
    号指定版本,例如:docker pull java:8
  2. spring cloud配置nacos自动刷新_docker_09

  3. 列出镜像
    使用 docker images命令即可列出已下载的镜像
  4. spring cloud配置nacos自动刷新_springcloud_10

  5. 博主刚才下载了java 8
  6. 删除本地镜像
    使用 docker rmi命令即可删除指定镜像

容器相关命令

  1. 新建并启动容器
    使用以下docker run命令即可新建并启动一个容器,该命令是最常用的命令,它有很多选项,
    下面将列举一些常用的选项。
  • -d选项:表示后台运行
  • -P选项:随机端口映射
  • -p选项:指定端口映射,有以下四种格式。
    – ip:hostPort:containerPort 注意这里是 - -ip 因为字体原因,别搞错了
    – ip::containerPort
    – hostPort:containerPort
    – containerPort
  • net选项:指定网络模式,该选项有以下可选参数:
  • -net=bridge:默认选项,表示连接到默认的网桥。 注意这里是 - -net 因为字体原因,别搞错了
    –net=host:容器使用宿主机的网络。
    –net=container:NAME-or-ID:告诉 Docker让新建的容器使用已有容器的网络配置。
    –net=none:不配置该容器的网络,用户可自定义网络配置。
    举例 : 博主下载一个nginx
    docker pull nginx:1.14 博主这里选择1.14版本,如果不指定版本,则会下载最新的版本
    版本在 https://hub.docker.com 上看

    docker images 看有木有下载完

    docker run -d -p 91:80 nginx
    这样就能启动一个 Nginx容器。
    -d 后台运行
    -p 宿主机端口:容器端口 #开放容器端口到宿主机端口 将宿主机的91端口映射到容器的80端口

    访问 http://Docker宿主机 IP:91/,博主这里是192.168.73.130:91
    将会看到nginx的主界面如下:

    到这里为止,我们应该是可以简单的使用dokcer呢

7.Docker容器

  1. 列出容器
    用 docker ps命令即可列出运行中的容器

    如需列出所有容器(包括已停止的容器),可使用-a参数。该列表包含了7列,含义如下
    - CONTAINER_ID:表示容器 ID。
  • IMAGE:表示镜像名称。
  • COMMAND:表示启动容器时运行的命令。
  • CREATED:表示容器的创建时间。
  • STATUS:表示容器运行的状态。UP表示运行中, Exited表示已停止。
  • PORTS:表示容器对外的端口号。
  • NAMES:表示容器名称。该名称默认由 Docker自动生成,也可使用 docker run命令的–
    name选项自行指定。
  1. 停止容器
    使用 docker stop命令,即可停止容器
    列如 上面启动nginx的容器是id是 6f94c386697e
    docker stop 6f94c386697e
    当然也可使用 docker stop容器名称来停止指定容器
  2. 强制停止容器
    可使用 docker kill命令发送 SIGKILL信号来强制停止容器
    docker kill 6f94c386697e
  3. 启动已停止的容器
    使用docker run命令,即可新建并启动一个容器。对于已停止的容器,可使用 docker start命
    令来启动
    docker start 6f94c386697e
  4. 查看容器所有信息
    docker inspect 6f94c386697e
  5. 查看容器日志
    docker container logs 6f94c386697e
  6. 查看容器里的进程
    docker top 6f94c386697e
  7. 进入容器
    使用docker exec命令用于进入一个正在运行的docker容器。如果docker run命令运行容器的
    时候,没有使用-it参数,就要用这个命令进入容器。一旦进入了容器,就可以在容器的 Shell
    执行命令了
    docker exec -it 6f94c386697e /bin/bash
  8. spring cloud配置nacos自动刷新_Docker_11

  9. 删除容器
    使用 docker rm命令即可删除指定容器
    docker rm 6f94c386697e
    该命令只能删除已停止的容器,如需删除正在运行的容器,可使用-f参数
  10. 宿主机与容器文件相互拷贝
    拷贝文件入容器
    docker cp 宿主机路径 容器长ID:容器路径
    安装了nginx后,肯定要将前端页面放入nginx里面。nginx安装在容器中,而用filezilla等工具无法连接到容器,这个时候就可以用这条命令了。
    2020.11.19 更新:
    当然nginx这种肯定死直接用 -v 挂载
    从容器内拷贝文件到宿主机
    还是在 宿主机操作
    docker cp 容器长ID:容器路径 宿主机路径
    比如:docker cp 90079f1de317:/config/test.txt /pook
  11. spring cloud配置nacos自动刷新_linux_12


  12. spring cloud配置nacos自动刷新_docker_13

8.初识Dockerfile

前面只是dokcer的一些基础介绍,现在咱们要真正实践一下,生产环境是怎么玩的!

使用Dockerfile构建Docker镜像
Dockerfile是一个文本文件,其中包含了若干条指令,指令描述了构建镜像的细节
先来编写一个最简单的Dockerfile,以前文下载的Nginx镜像为例,来编写一个Dockerfile修
改该Nginx镜像的首页

  1. 新建文件夹/app,在app目录下新建一个名为Dockerfile的文件,在里面增加如下内容
    FROM nginx
    RUN echo ‘This is 爆裂无球 的 Nginx!!!’ > /usr/share/nginx/html/index.html
  2. spring cloud配置nacos自动刷新_Docker_14

    spring cloud配置nacos自动刷新_Docker_15

  3. 其中的 FORM、 RUN都是 Dockerfile的指令。 FROM指令用于指定 基础镜像, RUN指令用于执行命令。 /usr/share/nginx/html/index.html 是容器中安装nginx的目录
  4. 在Dockerfile所在路径执行以下命令构建镜像:
    docker build -t nginx:baoliewuqiu .
    其中,-t指定镜像名字,命令最后的点(.)表示Dockerfile文件所在路径 .
  5. spring cloud配置nacos自动刷新_Docker_16

  6. 这里啰嗦一句,构建完成之后,原来的 Dockerfile 其实就没用了,可以删了~
  7. 执行以下命令,即可使用该镜像启动一个 Docker容器
    docker run -d -p 92:80 nginx:baoliewuqiu
    刚才91端口被占用了,现在用92来映射!run命令 构建了一个新的容器 并 启动 官方推荐的是,每个容器中安装一个应用!!!
  8. spring cloud配置nacos自动刷新_linux_17

  9. 访问 http://Docker宿主机IP:92/,可看到下图所示界面
  10. spring cloud配置nacos自动刷新_Docker_18

  11. 尴尬,编码格式忘转化了,先这样~~~~

Dockerfile 常用命令

命令

用途

FROM

基础镜像文件

RUN

构建镜像阶段执行命令

ADD

添加文件,从src目录复制文件到容器的dest,其Dockerfile所在目录的相对路径,也可以是一个 压缩包

COPY

拷贝文件,和ADD命令类似,但不支持URL和压CMD 容器启动后执行命令

CMD

CMD指令用于为执行容器提供默认值。每个Dockerfile只有一个CMD命令,如果指定了多个CMD命令,那么只有最后一条会被执行,如果启动容器的时候指定了运行的命令,则会覆盖掉CMD指定的命令。

EXPOSE

声明容器在运行时对外提供的服务端口

ENV

指定环境变量

ENTRYPINT

设置容器启动时运行的命令。Dockerfile 中可以有多个 ENTRYPOINT 指令,但只有最后一个生效。CMD 或 docker run 之后的参数会被当做参数传递给 ENTRYPOINT

VOLUME

该指令使容器中的一个目录具有持久化存储的功能,该目录可被容器本身使用,也可共享给其他容器。当容器中的应用有持久化数据的需求时可以在Dockerfile中使用该指令。格式为: VOLUME ["/data"]

WORKDIR

切换目录指令,类似于cd命令,写在该指令后的RUN,CMD以及ENTRYPOINT指令都将该目录作为当前目录,并执行相应的命令。

注意:RUN命令在 image 文件的构建阶段执行,执行结果都会打包进入 image 文件;CMD
命令则是在容器启动后执行。另外,一个 Dockerfile 可以包含多个RUN命令,但是只能有一
个CMD命令。
注意,指定了CMD命令以后,docker container run命令就不能附加命令了(比如前面
的/bin/bash),否则它会覆盖CMD命令。

9.重头戏:使用Dockerfile构建微服务镜像

首先弄个springcloud的eureka项目,将该微服务的可运行jar包构建成docker镜像

  1. 将jar包上传linux服务器/app/eureka目录,在jar包所在目录创建名为Dockerfile的文件
  2. spring cloud配置nacos自动刷新_linux_19

  3. 在Dockerfile中添加以下内容
    2.1 基于哪个镜像
    From java:8
    2.2 复制文件到容器
    ADD baoliewuqiu-eureka-server-8761.jar /app.jar
    将jar包放入容器根目录霞,并取名app.jar
    2.3 声明需要暴露的端口
    EXPOSE 8761
  4. spring cloud配置nacos自动刷新_docker_20

  5. 2.4 配置容器启动后执行的命令
    ENTRYPOINT [“java”,"-jar","/app.jar"]
    jar 包都是用java -jar xxx 启动的
  6. 使用docker build命令构建镜像
    docker build -t baoliewuqiu-eureka-server-8761:0.0.1 . (.)被忘了
    格式: docker build -t 镜像名称:标签 Dockerfile的相对位置 0.0.1 是版本号
    在这里,使用-t选项指定了镜像的标签。执行该命令后,终端将会输出如下的内容
  7. spring cloud配置nacos自动刷新_Docker_21

  8. 构建完成以后 可以用docker images 查看镜像仓库
  9. spring cloud配置nacos自动刷新_部署_22

  10. 启动镜像,加-d可在后台启动
    docker run -p 8761:8761 baoliewuqiu-eureka-server-8761:0.0.1
    使用 -v 可以挂载一个主机上的目录到容器的目录
    docker run -p 8761:8761 -v /tmp:/tmp baoliewuqiu-eureka-server-8761:0.0.1
  11. 访问http://Docker宿主机IP:8761/,可正常显示Eureka Server首页
  12. spring cloud配置nacos自动刷新_docker_23

  13. 有了docker以后,再也不用记那么多软件的启动方式。只要用docker这一套命令就行,真的是大大解放了运维!!!!

10.结语

世上无难事,只怕有心人,每天积累一点点,fighting!!!
233333·····现在已经凌晨三点了好困~