什么是企业营销型网站,英文网站设计方案,网站备案后经营,硬件定制Docker简介#xff0c;可以看上一篇文章#xff1a;
为什么互联网公司离不开Docker容器化#xff0c;它到底解决了什么问题#xff1f;-CSDN博客 Docker体系结构 docker核心就是镜像和容器#xff1a;
镜像就是应用程序的安装文件#xff0c;包含了所有需要的资源…Docker简介可以看上一篇文章
为什么互联网公司离不开Docker容器化它到底解决了什么问题-CSDN博客 Docker体系结构 docker核心就是镜像和容器
镜像就是应用程序的安装文件包含了所有需要的资源但是不能运行。
容器是最终运行的产物每个容器都是可以独立运行的应用程序。
需要先在服务器上安装docker引擎才可以进行使用服务器上安装doker引擎后会内置一个客户端。docker的执行过程为客户端发送docker命令docker引擎接收到命令后会检查本地是否有镜像没有的话就用远程仓库把镜像下载然后创建容器对外提供服务。 说明本文章是学习docker的使用所以是在Windows电脑上安装了虚拟机在虚拟机中安装CentOS7操作系统在CentOS7中进行docker的部署在实际的项目部署时不需要虚拟机而是直接在服务器上进行部署。
环境准备
安装虚拟机的步骤省略。
虚拟机安装后在虚拟机中安装CentOS7参考文章
在VMware中安装和配置linux系统_vmware创建虚拟机-CSDN博客 CentOS7配置网络的教程让CentOS7可以和物理机网络互通同时可以访问互联网参考文章
VMware虚拟机环境下Centos7 静态IP的设置方法_虚拟机设置ip-CSDN博客 为了操作方便使用Xsheel和Xftp进行命令操作和文件传输这两个软件直接从官网下载即可安装免费版本。下载地址家庭/学校免费 - NetSarang Website 以上步骤全部操作完成把虚拟机运行起来找到安装的操作系统并开机便可以用Xsheel直接访问CentOS7了。这是在物理机上使用Xsheel连接上CentOS7后的样子 在CentOS7上安装docker
1.安装底层工具 sudo yum install -y yum-utils device-mapper-persistent-data lvm2 这是安装Docker的底层工具它就会自动提示下载很快下载就完成了。
如果遇到报错的情况可以参考这个文章进行解决
安装docker 遇到异常Could not resolve host: mirrorlist.centos.org 2.加入阿里云yum仓库提速docker下载过程 sudo yum-config-manager --add-repohttp://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 增加阿里云的Docker下载仓库默认情况下Docker官方是从他的国外的服务器下载速度是非常慢的所以在这里我们是使用yum config manager组件来指定一个新的下载源指向的是阿里的应用服务器通过阿里来提高我们Docker的下载速度。 3.更新一下仓库的源信息 sudo yum makecache fast 4.自动安装下载Docker sudo yum -y install docker-ce 在这里它就会自动的下载解析可以看到利用阿里云下载速度是非常快的Docker便自动安装成功。 5.启动Docker服务 sudo service docker start 6.验证docker是否启动成功 docker version 至此docker安装成功docker它的安装过程因为操作系统可能有不同但是命令每个平台都是一样的docker version显示我们当前已安装的版本。 7.配置镜像加速器
因为docker需要从远程的仓库中下载镜像速度比较慢为了快速下载镜像文件通过使用国内提供的仓库进行镜像的下载操作步骤如下 vi /etc/docker/daemon.json 删除原有的配置替换为下面的配置 { registry-mirrors: [https://docker.registry.cyou, https://docker-cf.registry.cyou, https://dockercf.jsdelivr.fyi, https://docker.jsdelivr.fyi, https://dockertest.jsdelivr.fyi, https://mirror.aliyuncs.com, https://dockerproxy.com, https://mirror.baidubce.com, https://docker.m.daocloud.io, https://docker.nju.edu.cn, https://docker.mirrors.sjtug.sjtu.edu.cn, https://docker.mirrors.ustc.edu.cn, https://mirror.iscas.ac.cn, https://docker.rainbond.cc] } 保存并退出文件编辑。
重新启动docker systemctl daemon-reload systemctl restart docker 到此为止docker镜像加速器配置就完成了。 应用部署实战
部署一个Java编译后的jar包程序并通过NGINX反向代理服务器对应用进行访问 要部署的应用架构如下 app1、app2、app3代表3个应用模拟分布式架构。NGINX负责请求转发分别将用户请求转发给三个应用三个应用连接MySQL数据库进行数据获取。
以上内容均放在一个虚拟网段中给该网段起名my-bridge。 1.创建虚拟网段 docker network create -d bridge my-bridge 2.构建MySQL 5.7 容器并挂载到容器内部 把素材放到服务器/usr/local目录下 素材文件下载地址
https://download.csdn.net/download/liangmengbk/90062212?spm1001.2014.3001.5503 docker run \ -p 3306:3306 \ --network my-bridge \ --name db \ -v /usr/local/bsbdj/sql:/docker-entrypoint-initdb.d \ -v /usr/local/bsbdj/data:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORDroot \ -d mysql:5.7 命令解读
docker run ...mysql 5.7 代表创建并自动运行mysql 5.7 容器如果宿主机没有mysql 5.7镜像则自动会从dockerhub进行下载。--name db是容器的名字。-p 3306:3306 代表将容器内部MySQL5.7 映射到宿主机的3306端口这样才可以从外界进行访问。--network my-bridge 代表将db容器加入到my-bridge虚拟网段这样才可以和其他容器通信。-v /usr/local/bsbdj/sql ... 代表将宿主机的sql目录挂载到容器内的docker-entrypoint-initdb.d根据dockerhub 的描述放入docker-entrypoint-initdb.d目录下的SQL文件会在MySQL容器创建后自动执行完成数据初始化任务。-v /usr/local/bsbdj/data ...同样是挂载因为容器很容易创建或迁移如果将MySQL数据文件保存在容器内部容器销毁数据就会丢失因此同样使用-v命令将容器内产生的数据文件挂载到宿主机的data目录下这样即使容器销毁数据也不会丢失。-e MYSQL_ROOT_PASSWORDroot ,mysql容器要求的环境参数说明创建容器时默认数据库root密码为root。-d 代表采用后台模式运行不加-d则采用前台独占方式运行。
注意docker发现宿主机上没有MySQL容器会自动下载。 安装的MySQL对应的架构图如下 MySQL安装完成后使用navicate工具进行访问 数据库和表都已经创建完成创建数据库和表用到的脚本就是/usr/local/bsbdj中sql目录中提前准备好的脚本 3.构建应用镜像
在上传到/usr/local/bsbdj目录下资料中有个dockerfile文件这个文件是用来构建应用镜像的也就是把自己的应用程序构建为docker的镜像文件。 dockerfile文件内容 FROM openjdk:11 表示引用openjdk11的镜像在这个镜像基础上进行扩展 ADD ./app /usr/local/bsbdj 将指定的宿主机文件复制到容器内部。 WORKDIR /usr/local/bsbdj 在镜像内部切换工作目录 CMD [java,-jar, bsbdj.jar] 执行 java -jar bsbdj.jar 命令 切换到dockerfile文件所在的路径下面 cd /usr/local/bsbdj 执行创建镜像的命令 docker build -t itlaoqi/bsbdj:1.0 . 该命令的作用是读取dockerfile文件并在宿主机上生成镜像。
镜像的名称是自定义的这里定义为 itlaoqi/bsbdj:1.0
最后面的点代表当前目录。 镜像创建完成后查看所有安装部署在宿主机上的镜像 docker images 这个就是我们自己创建的镜像文件。 4.创建APP容器 docker run \ --name app1 \ --network my-bridge \ -p 8080:8080 \ -d itlaoqi/bsbdj:1.0 docker run --name app2 \ --network my-bridge \ -p 8081:8080 \ -d itlaoqi/bsbdj:1.0 docker run \ --name app3 \ --network my-bridge \ -p 8082:8080 \ -d itlaoqi/bsbdj:1.0 上面的命令会创建3个应用容器三个容器都是基于同一个镜像itlaoqi/bsbdj:1.0生成的三个容器名称分别为app1、app2、app3 在浏览器中访问宿主机CentOS操作系统的IP我的IP为192.168.1.10加上应用的端口就可以访问应用系统了。 三个应用容器通过不同的端口都可以正常访问。 需要注意的地方jar包程序中数据库链接需要与数据库容器名称一致应用才能访问到数据库。 这里的db就是MySQL容器的名称代码中的名称要跟容器名称一致才能访问数据库。 5.创建Nginx容器 创建反向代理服务器配置负载均衡策略。 docker run --name nginx \ -v /usr/local/bsbdj/nginx/nginx.conf:/etc/nginx/nginx.conf \ --network my-bridge \ -p 80:80 \ -d nginx 注意docker发现宿主机上没有NGINX容器会自动下载。 命令解读
docker run --name nginx \ 运行NGINX容器如果没有则自动部署
-v /usr/local/bsbdj/nginx/nginx.conf:/etc/nginx/nginx.conf \ 用宿主机上的文件替换NGINX容器中的配置文件
-p 80:80 \ 宿主机的80端口对应到NGINX容器的80端口。 /usr/local/bsbdj/nginx/nginx.conf文件是提前准备好的NGINX配置负载均衡策略的文件。 配置文件中核心部分是上图所示的位置app1、app2、app3指应用容器的名称后面的8080代表容器内提供服务的端口。这里一定要填写容器内服务的端口不是宿主机的端口8080/8081/8082。 location / 代表对请求做转发proxy_pass为转发的规则bsbdj对应到upstream的名称。当前的配置默认采用轮询的方式对请求均匀进行转发。 通过浏览器访问应用验证NGINX是否部署成功通过访问宿主机的IP80端口可以省略能够正常访问就说明NGINX部署完成了。 6.实用脚本
查看网段内的容器信息 docker network inspect my-bridge my-bridge是指虚拟网段名称。
在containers中看到容器都是互联互通的。这些容器都是通过容器名称Name来互相访问的。 查看当前启动的容器 docker ps 删除上面已经安装的所有容器与镜像 docker rm -f nginx docker rm -f app1 docker rm -f app2 docker rm -f app3 docker rm -f db docker rmi -f itlaoqi/bsbdj:1.0 docker rmi -f mysql:5.7 docker rmi -f openjdk:11 docker network rm my-bridge rm 指移除容器
-f 指强制操作
rmi 指删除镜像
network 虚拟网段 docker官网https://hub.docker.com/
如果要在多台服务器上进行容器集群部署需要使用另外的技术KubernetesK8s。K8s被称为容器编排工具作用是在docker的基础上进行大规模、多节点、多容器的统一管理和统筹。而且提供了响应的监控和管理界面。可以同时管理超过20万台服务器已经上百万个容器实例。