Docker:一个java后端开发学习docker的路径

dockers作为运维利器,自然是要快速掌握的啦。
在博文开始之前,先把我入门的两样利器放上来。
1.这个视频教程浅显易懂,而且不用啥linux命令的基础都可以看懂
2.手把手带你打包一个后端到docker上,算是上面视频的文字版了
3. 熟悉docker的基本操作,这个是阮一峰的一篇博文,配合1来看还是可以的。但是显得太过于基础了
4. 这就不是快速入门了,而是从入门到实战的

5. 这是别人的一篇心得,可以参考一下
6. 这是别人的快速入门博文
7. 有兴趣的可以先去学习一下linux

docker是什么?

  1. 我的理解:是一个有强大的隔离功能的轻量级虚拟机(并不是虚拟机,但是类似)。作用是将本地的程序打包成一个docker镜像,发布到云上去,然后其他电脑可以在 云 下载该镜像,并且完美运行在本地中。打包的时候把环境打包好了,免除了配置。这就是他的优点。当然免除换机子时候的环境配置这是我现在感受到的优点,其他的作用还要我学习。
  2. 这是百科上的介绍:Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

特点

  1. 集装箱:打个比喻,这个集装箱的话是说应用程序可以被放到一个镜像中,相当于黑盒,但是没有对外的接口,我们称之为沙盒。程序放入后,与外界隔绝。我们就可以和方便地发送到另一个服务器。但是,这个箱子不只是箱子,还把程序运行地环境一起带了过来。所以,这种方式带来了好处换电脑,却免除了配置。
  2. 标准化:
  • 镜像地存储方式都是统一的,先docker化(打包成镜像),而后存在云仓库。
  • 运输方式,统一放到网上。
  • api接口,因为所有程序都要打包成为docker,所以,对程序地操作也有了统一地api接口,有了统一的docker命令。在dockerfile的时候体现的很明显。
  1. 隔离,就是上面说的沙盒,每个docker镜像之间都是没有联系的。互不干扰的。

为什么要用docker?

优点:

  1. 交付物标准化
    Docker是软件工程领域的“标准化”交付组件,最恰到好处的类比是“集装箱”。
    集装箱将零散、不易搬运的大量物品封装成一个整体,集装箱更重要的意义在于它提供了一种通用的封装货物的标准,卡车、火车、货轮、桥吊等运输或搬运工具采用此标准,隧道、桥梁等也采用此标准。以集装箱为中心的标准化设计大大提高了物流体系的运行效率。
    传统的软件交付物包括:应用程序、依赖软件安装包、配置说明文档、安装文档、上线文档等非标准化组件。Docker的标准化交付物称为“镜像”,它包含了应用程序及其所依赖的运行环境,大大简化了应用交付的模式。
  2. 一次构建,多次交付
    类似于集装箱的“一次装箱,多次运输”,Docker镜像可以做到“一次构建,多次交付”。当涉及到应用程序多副本部署或者应用程序迁移时,更能体现Docker的价值。
  3. 应用隔离
    集装箱可以有效做到货物之间的隔离,使化学物品和食品可以堆砌在一起运输。Docker可以隔离不同应用程序之间的相互影响,但是比虚拟机开销更小。
  4. 应用场景:网店服务器平时开的很少,但是双十一的时候又开的很多。这个时候有了docker就可以很方便了。要的时候,打包出来,各个机子都用上去,不要的时候,关闭docker,也不会影响其他机器。

涉及的概念

  1. 镜像:就是一个打包好了的程序。各种都有,基础的系统程序:linux,ubantu,centos,还有一些被人写好的web程序,或者数据库mysql之类的也可以被打包成一个镜像。(其实我对于它的理解是手机的app安装包)
  2. 容器:是镜像运行的环境,我们叫他容器。(类比手机安装包安装好了的app,点开即可使用)
  3. 仓库:云上的仓库,我们的镜像获取的来源,还有镜像保存的地方。类似于git的作用了。(类比一些手机app下载商店)

常用的docker命令

  1. docker pull [option] name[:tag] image[option] name:网上获取镜像
  2. docker run [option] image [command] [option] :运行镜像
  3. docker ps:查看正在运行的镜像。
  4. docker exec:进入镜像的内部
  5. docker stop +镜像id:停止运行镜像
  6. netstat -na|grep 端口:查询端口

docker的网桥原理

  1. 因为docker是容器化的,所以都封装好了。网络端口也是被封住了,所以要人为的通过一个叫做网桥(briage)的中间件来映射本地的端口和容器内的端口。比如:容器中的8080,实际上不可能是本地的8080.我们要自己分配一个端口给它,比如给了一个8888端口给他。那么,以后访问主机8888端口的时候,访问的就是这个容器,而对于容器内部而言,他会认为有请求通过8080来访问它。之所以要这样,是因为程序代码写好以后,端口也是,在不同的机器自然可能被使用的情况不一样,免除环境配置是docker的优点,自然不会让我们修改程序的端口来适配这台机子。所以,我们用了虚拟的方式,对于被打包的程序,它依然认为自己监听的是8080,而实际上,他监听的端口早就被改为了8888.但是内部程序不知道。这就是封装虚拟化的好处了。所以,这就是为什么要网桥中转mapping(映射)一下。

要怎么用

  1. 安装,我的是windows的系统下,用toolbox来运行docker的,但是,我打算换成linux了,这是后话,先说一下我在toolbox下的使用心得吧。安装教程,我就不多说了,不是本篇博文的重点。
  2. 获取镜像之类的简单用法就参考我在第一段给的博文链接吧。现在我主要讲一下打包一个后端web。
  3. 首先:下载tomcat镜像,因为web服务要的环境是在tomcat下的。相当于一个下载容器
docker pull hub.c.163.com/library/tomcat
  1. 然后找到你想要去的目录:比如说桌面
    Docker:一个java后端开发学习docker的路径_第1张图片
  2. 新建一个文件夹并且打开,输入touch语句,创建dockerfile文件
    Docker:一个java后端开发学习docker的路径_第2张图片
  3. 在这个文件夹中新建一个文件,dockerfile文件,并且输入你的指令(这时候,api的标准化就体现出来了,都是用了相同的语法编写镜像文件。)注意了,此时要将你的web应用打包成为war包放在同目录下。下面的第一句是说:以tomcat为环境,第二句是对于tomcat的修改了,我们只是简单的把war包放到了webapps的目录下。
    在这里插入图片描述
  4. 之后是docker化产生镜像了。这句话的意思是docker build一个镜像,-t是说给这个镜像取名字,我把它叫做demo。最后是一个 " . "这是说当前目录下的dockerfile文件作为产生镜像的文件。
    Docker:一个java后端开发学习docker的路径_第3张图片
  5. 最后就是输入url访问了。注意:此时虽然你run的时候做了端口映射,但是,实际上你的映射是docker容器->linux虚拟机(如果你用的是docker in windows版本,那这里你的docker是运行在linux虚拟机里的,你的虚拟机的ip是192.168.99.100,而不是localhost)。所以,要注意访问的不是localhost,而是虚拟机的ip,我的是192.168.99.100(输入命令docker-machine ip default 可以查看你的虚拟机的ip)
    Docker:一个java后端开发学习docker的路径_第4张图片
    到了这一步,我们就可以运行镜像了。
    在这里插入图片描述
    那么,到此,docker的使用基本上是初步讲了。接下来要学习的是拆分web程序里面的数据库和各个功能,分别打包成为docker镜像,实现微服务了。

你可能感兴趣的:(docker)