GPS定位系统(五)——Docker
前⾔
前⾯已经把Android、Java、web端都弄得差不多了,现在,需要打包并进⾏服务器部署了,这样,我们的⽹站也能够在公⽹上给⼤家进⾏访问。接下来,想要学习⼀下docker来进⾏服务器环境的搭建和部署,因为docker的部署有诸多好处,所以也学习实践⼀番。
GPS定位系统系列
收获
学习完这篇⽂章你将收获:
docker的好处及其相关
docker部署mysql 构建数据库
docker部署nginx 构建静态web⽹站
docker部署java 构建后端服务提供接⼝
docker+nginx部署多个web⽹站应⽤
docker+nginx部署多个https的web⽹站应⽤
⽂章⽬录
⼀、docker介绍
docker有很多好处,可能光看定义理论会有些理解不了,但是通过使⽤实践以及⼀些案例的探究,就会发现docker真的是实实在在的,优化配置效率,节约时间、⼈⼒成本。以下是个⼈总结docker的⼀些好处(可能有交叉)
1、⼀次构建,随处运⾏,多端跨平台
2、可移植性,⽅便运维部署
3、轻量⾼效,优于虚拟机
4、隔离性、松耦合
5、⽅便持续集成、持续交付及其⾃动化
6、管理⽅便
镜像与容器
关于docker,需要先介绍⼀下,关于容器和镜像。
docker其实顾其名和logo思义,就能发现,最明显的特征就是集装箱(容器)。
要知道,在全球的物流运输中,集装箱的标准化可谓是⽴了⼤功,这样的标准化使得,集装箱能够在船舶、汽车、⽕车、飞机等等交通⼯具中任意装载和运输,跟docker的构建⼀次,随处运⾏⾮常地契合。集装箱就类似于docker中的容器的概念,⽽镜像就类似于容器中具体装载什么物料的清单(个⼈理解)。
docker运⾏⼀个服务的流程,简单来说就是,构建镜像,⽣成容器,运⾏容器。⽤刚才那个例⼦类⽐,则为拟⼀张货料清单,装成⼀个集装箱,搬上交通⼯具。
好处及例⼦
1、⼀次构建,随处运⾏,多端跨平台
docker⾸先win、mac、linux等都兼容跨平台,部署服务器不再怕各种不同的操作系统。⽆论⼀个系统部署地有多么的复杂,配置了多少的模块或者服务,都可以⼀次性⽣成镜像,复⽤在其他各处。
例如:
公司需要配置⼀个服务器环境,mysql、nginx、tomcat、redis、java、python、go等多个环境,配置个系统环境,花了⼀天半天,然后,某天,领导有让你去帮忙给客户部署N多台相同环境的服务器,你怎么办,那不是要⼜去⼀台⼀台的配置N次吗?有了docker,你可以⽣成⼀个镜像,上传镜像仓库,然后,其他N台服务器就安装docker,拉镜像,运⾏就OK了。节约了配置时间,⽽且隔离了不同的服务器或者操作系统,是不是很⽅便呀。
2、可移植性,⽅便运维部署
⼀般开发和运维的关系是这样的,开发完成打包后,丢给运维,运维进⾏部署更新等,对于你所需的运⾏环境,运维都必须了如指掌,且最好让线上环境的配置跟你本地的测试环境的配置⼀样,保证其环境⼀样,排除其他影响条件。但是,这样的话,沟通成本,环境部署成本,都很⾼,还不能避免⼀些⼈为操作失误。
有了docker,你可以直接把打包成镜像,上传仓库,运维⼈员,只需要⼏条命令,拉镜像,运⾏。⽽且,如果线上版本出现了问题,运维还可以直接回滚上⼀个版本的镜像就OK了。
3、轻量⾼效,优于虚拟机
⼀般的虚拟机分配的都⽐较⼤,docker容器则很轻量,可以到M级别,构建部署运⾏⼏乎都是秒级别的,操作效率时分得⾼。
4、隔离性、松耦合
每个容器之间是隔离的,相互没有影响。像以前的⼤型项⽬,如果都合在⼀起,如果其中某个模块或者功能出现了问题,直接就会影响到其他的功能的使⽤,耦合性⼗分的⼤。但是,有了docker,再完美配合微服务、SOA等架构体系的实施,就能保证各个模块之间的独⽴⾃治。也可以使得开发⼈员各司其职,”各⾃为政“。
5、⽅便持续集成、持续交付及其⾃动化
现在很多⼤型公司的开发流程较为成熟完善,基本都需要做⾃动化相关,⽽docker就能很⽅便地配合各种⾃动化框架(jenkins、travis)进⾏⾃动化集成、部署、运⾏等。
关于持续集成、持续交付、持续部署等概念,这⾥个⼈简单做⼀下阐述
持续集成:以前是多个开发测试完毕后,才把代码往主分⽀上合并,可能交叉、冲突,合并之后还可
能产⽣新的问题。⽽持续集成,就是经常提交代码到主分⽀,⼀天可能好⼏次。并且,⾃动化地进⾏单元测试并提供测试报告等,这样的话就能拆分细度颗粒,保证产品能够⼀步⼀步地安全可靠地迭代。很多以测试驱动开发的公司就是这样做的。
持续交付:持续集成的基础上,增加打包构建形成产物。
持续部署:持续交付的基础上,增加部署到相应的线上环境。
总⽽⾔之,这些持续做的事情,就是为了经常提交代码⾃动化测试、运⾏、部署,反馈问题,解决问题,再测试、运⾏、部署依次循环。不过持续部署也是有好处的,我们可以直接提交代码,后续⼀系列过程都是⾃动化的,就不⽤管了,只需要看⼀下是否出错就⾏了。
6、管理⽅便
各个容器管理⽅便,可以轻易地安装、卸载、升级、启动、停⽌等等。
如果换做直接在系统上部署环境,各个配置⽂件之间可能存在交叉或者污染系统本⾝的⼀些环境变量的配置,想想就难受。
总之,docker的好处是很多的,可能以上的不是最全⾯的,但是是我个⼈能够理解和体会的。
⼆、docker安装
安装可选win、mac、linux,win和mac都提供了desktop的桌⾯应⽤管理,linux的主要是应⽤于服务器。
照着⽂档安装即可。mysql下载后的初次使用
这⾥还要说⼀下【kitematic】和【kubernetes】
kitematic是docker以前的版本官⽅推荐的⼀个轻量的桌⾯管理docker容器、配置的软件。kubernetes是最新版本推荐的,⽐较重⼀些,功能也⽐较多⼀些,可以通过docker软件间接下载安装使⽤。
其实如果熟悉命令⼀点的同学,完全⽤不着它们-。- 直接使⽤命令来查看container就⾏了。
国内镜像加速
⼀般docker去拉镜像的话,可能有些镜像会很慢,这⾥可以使⽤aliyun的镜像加速,
1、登录aliyun,进⼊ 左侧点击 【镜像加速器】,就会⽣成⼀个你⾃⼰独有的加速器地址,类似【xxxxxx.mirror.aliyuncs】
2、在docker的settings中,json⾥⾯加⼊
{
"registry-mirrors":["<your accelerate address>"]
}
常⽤docker命令
docker ps 查看现在运⾏的容器
docker ps -a 查看所有容器,包括已经退出的
docker rm xxx 删除容器 -f 强制删除
docker rmi xxx 删除镜像
docker start xxx 启动容器
docker stop xxx 停⽌容器
docker restart xxx 重启容器
docker exec -it xxxx /bin/bash 进⼊容器内部的系统 可查看⽂件等
docker images 查看镜像
三、docker部署mysql
1、使⽤命令创建
docker run --name mysql -p 3306:3306 -v /mydockerdata/mysql/data:/var/lib/mysql -v /mydockerdata/mysql/mysqlf:/etc/mysql/myf -v /mydockerdata/ mysql/log:/var/log/mysql -e MYSQL_ROOT_PASSWORD=7632785 -d mysql:5.7.0
2、命令解释
docker
run 运⾏⼀个容器
--name mysql 给container容器起名字
-p 3306:3306 端⼝映射把容器内的3306端⼝映射到本机的3306  本机端⼝:容器端⼝
-v /mydockerdata/mysql/data:/var/lib/mysql  映射mysql的数据库⽂件⽬录到本机
-v /mydockerdata/mysql/mysqlf:/etc/mysql/myf 映射mysql的配置到本机
-v /mydockerdata/mysql/log:/var/log/mysql 映射mysql的log⽬录到本机
-e MYSQL_ROOT_PASSWORD=7632785 设置初始化的root_password环境变量
-d 后台运⾏
mysql:5.7.0  镜像及其版本
端⼝映射
-p 3309:3307
容器内的端⼝,我们把容器看做⼀个封闭的沙盒,就像⼀个只有mysql的"操作系统"⼀样。
⽐如你的数据库的端⼝是3307,那么按道理,你就应该把"操作系统”的3307给占⽤,对于容器⽽⾔,则为3307容器端⼝需要使⽤,则你就可以把容器的3307进⾏映射,⽐如映射到本机的3309端⼝,这样你进⾏访问则为:
外部访问3309 ->等同于访问本机的3309-> 进⽽访问docker容器的3307->访问到mysql的3307数据库
映射命令则为:-p 3309:3307
数据库⽂件映射
-v /mydockerdata/mysql/data:/var/lib/mysql
要知道,我们使⽤docker管理mysql,很有可能会多次rm掉mysql的container然后重装,这时候,如果你的数据⽂件就会丢失了,如何做到,⽆论mysql怎么安装卸载,数据库数据都在呢?那就需要数据库⽬录的映射了。
我们在本机单独建⼀个⽬录来管理mysql的⼀些log、myf、data,我这⾥是/mydockerdata/mysql。
然后映射本机的mydockerdata/mysql/data到容器内部的/var/lib/mysql,本机的路径你可以⾃定,但是容器内部的路径,没有特殊操作,就是固定的/var/lib/mysql
数据库log映射
-v /mydockerdata/mysql/log:/var/log/mysql
同上
数据库配置⽂件映射
-v /mydockerdata/mysql/mysqlf:/etc/mysql/myf
mysql有各个不同的版本,⽬前⽐较稳定的是5.6、5.7等,不过最新的已经8.0了,新版本的msyql增加了很多功能,如果需要兼容旧版本的mysql的使⽤⽅式,就需要更改⼀些配置,⽽在容器内,是没有办法直接通过vim命令来修改配置⽂件的,所以最好把配置⽂件映射出来。
⾃⼰先新建⼀个mysqlf空⽂件,或者先新建⼀个容器,并把其mysqlf⽂件配置拷贝出来,然后再进⾏映射,总之,⾃⼰先要有⼀个mysqlf⽂件,不管是不是空的。
数据库初始化密码
-e MYSQL_ROOT_PASSWORD=7632785
mysql初次创建,需要设置root密码
log
如果创建出错,可以通过docker logs mysql(你容器的命名) 来查看log,或者进⼊映射的log⽬录来查看
四、docker部署nginx
1、先随便创建⼀个nginx,⽬的是为了去把默认的nginx的配置拷贝出来,因为映射配置的时候,是需要有默认的配置⽂件的。
docker run nginx
docker ps 查看其container id等信息
2、拷贝配置⽂件
nginx docker cp 【CONTAINER ID】 :/etc/nginx/ /mydockerdata/nginx/etc/
/mydockerdata/nginx/etc/为本机⾃建的管理⽬录
拷贝完了之后,可以删掉原来那个nginx
docker rm nginx -f
3、重新创建nginx,并映射
docker run -p 8080:80 --name mynginx -v /mydockerdata/nginx/log/:/var/log/nginx -v /mydockerdata/nginx/etc/f:/etc/f -v /my dockerdata/nginx/dist/:/usr/share/nginx/html -d nginx
命令解释
docker
run
-p 8080:80  这样就可以通过keep999:8080访问⽹站了
--name mynginx
-v /mydockerdata/nginx/log/:/var/log/nginx  映射log⽬录
-v /mydockerdata/nginx/etc/f:/etc/f 映射配置⽂件
-v /mydockerdata/nginx/dist/:/usr/share/nginx/html 映射静态web⽹页⽂件⽬录
-d
nginx
这⾥我们把/mydockerdata/nginx/dist作为⽹站的静态⽂件的存放⽬录。
当我们打包好web前端⽹页,然后可以⾥⾯scp命令把⽂件上传到服务器的/mydockerdata/nginx/dist下,再容器nginx就可以实现reload新⽹页了。
scp -r  /Users/jafir/Documents/myadmin/dist/  root@keep999:/mydockerdata/nginx/

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。