上线项目 Docker部署项目到服务器总结
文章目录
- Docker简介
- Docker为什么出现?
- 安装Docker
- 阿里云镜像加速
- 找到镜像加速器
- 配置使用
- 回顾HelloWorld流程
- 底层原理
- Docker的常用命令
- 部署项目
- 1、安装docker
- 2、安装Docker-Compose
- 3、编写相关配置文件
- Docker-Compose.yml
- 编写Dockerfile
- 编写Nginx的配置
- 4、打包
- 前端
- 后端
Docker简介
Docker为什么出现?
一款产品: 开发–上线 两套环境!应用环境,应用配置!
开发 — 运维。 问题:我在我的电脑上可以运行!版本更新,导致服务不可用!对于运维来说考验十分大!
环境配置是十分的麻烦,每一个机器都要部署环境(集群Redis、ES、Hadoop…) !费事费力。
之前在服务器配置一个应用的环境 Redis MySQL JDK ES Hadoop 配置超麻烦了,不能够跨平台。
开发环境Windows,最后发布到Linux!
传统:开发jar,运维来做!
现在:开发打包部署上线,一套流程做完!
docker流程: java-jar(环境) — 打包项目帯上环境(镜像) — ( Docker仓库:商店)-----下载我们发布的镜像直接运行即可!
在容器技术出来之前,我们都是使用虚拟机技术!
虚拟机:在window中装一个VMware,通过这个软件我们可以虚拟出来一台或者多台电脑!笨重!
虚拟机也属于虚拟化技术,Docker容器技术,也是一种虚拟化技术!
VMware : linux centos 原生镜像(一个电脑!) 隔离、需要开启多个虚拟机! 几个G 几分钟
docker: 隔离,镜像(最核心的环境 4m + jdk + mysql)十分的小巧,运行镜像就可以了!小巧! 几个M 秒级启动!
之前的虚拟机技术
虚拟机技术缺点:
1、 资源占用十分多
2、 冗余步骤多
3、 启动很慢!
容器化技术
容器化技术不是模拟一个完整的操作系统
比较Docker和虚拟机技术的不同:
- 传统虚拟机,虚拟出一条硬件,运行一个完整的操作系统,然后在这个系统上安装和运行软件
- 容器内的应用直接运行在宿主机的内容,容器是没有自己的内核的,也没有虚拟我们的硬件,所以就轻便了
- 每个容器间是互相隔离,每个容器内都有一个属于自己的文件系统,互不影响
镜像(image):
docker镜像就好比是一个目标,可以通过这个目标来创建容器服务,tomcat镜像==>run==>容器(提供服务器),通过这个镜像可以创建多个容器(最终服务运行或者项目运行就是在容器中的)。
容器(container):
Docker利用容器技术,独立运行一个或者一组应用,通过镜像来创建的.
启动,停止,删除,基本命令
目前就可以把这个容器理解为就是一个简易的 Linux系统。
仓库(repository):
仓库就是存放镜像的地方!
仓库分为公有仓库和私有仓库。(很类似git)
Docker Hub是国外的。
阿里云…都有容器服务器(配置镜像加速!)
安装Docker
- xshell或者堡塔终端连接远程服务器,连接需要我们服务器的公网ip+服务器密码
1、yum 包更新到最新
yum update
2、安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
yum install -y yum-utils device-mapper-persistent-data lvm2
3、 设置yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
4、 安装docker,出现输入的界面都按 y
yum install -y docker-ce
5、 查看docker版本,验证是否验证成功
docker --version
6、启动docker
/bin/systemctl start docker.service
7、设置镜像的仓库
yum-config-manager \--add-repo \https://download.docker.com/linux/centos/docker-ce.repo
#上述方法默认是从国外的,不推荐#推荐使用国内的
yum-config-manager \--add-repo \https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
8、 测试
docker run hello-world
9、查看已经下载的镜像(从这里可以查看已有镜像的id)
[root@iz2zeak7sgj6i7hrb2g862z ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest bf756fb1ae65 4 months ago 13.3kB
卸载docker
#1. 卸载依赖
yum remove docker-ce docker-ce-cli containerd.io
#2. 删除资源,主机上的映像,容器,卷或自定义配置文件不会自动删除
rm -rf /var/lib/docker
# /var/lib/docker 是docker的默认工作路径!
rm -rf /var/lib/containerd
阿里云镜像加速
找到镜像加速器
配置使用
#1.创建一个目录
sudo mkdir -p /etc/docker#2.编写配置文件
sudo tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://9cq9ab7f.mirror.aliyuncs.com"]
}
EOF#3.重启服务
sudo systemctl daemon-reload
sudo systemctl restart docker
回顾HelloWorld流程
docker run 流程图
底层原理
Docker是怎么工作的?
Docker是一个Client-Server结构的系统,Docker的守护进程运行在主机上(服务)。通过Socket从客户端访问!
Docker-Server接收到Docker-Client的指令,就会执行这个命令!
[外
为什么Docker比Vm快
1、docker有着比虚拟机更少的抽象层。由于docker不需要Hypervisor实现硬件资源虚拟化,运行在docker容器上的程序直接使用的都是实际物理机的硬件资源。因此在CPU、内存利用率上docker将会在效率上有明显优势。
2、docker利用的是宿主机的内核,而不需要Guest OS。
GuestOS: VM(虚拟机)里的的系统(OS)HostOS:物理机里的系统(OS)
因此,当新建一个 容器时,docker不需要和虚拟机一样重新加载一个操作系统内核。仍而避免引导、加载操作系统内核返个比较费时费资源的过程,当新建一个虚拟机时,虚拟机软件需要加载GuestOS,返个新建过程是分钟级别的。而docker由于直接利用宿主机的操作系统,则省略了这个复杂的过程,因此新建一个docker容器只需要几秒钟。
Docker的常用命令
$ docker ps // 查看所有正在运行容器
$ docker stop containerId // containerId 是容器的ID
$ docker ps -a // 查看所有容器 $ docker ps -a -q // 查看所有容器ID
$ docker stop $(docker ps -a -q) // stop停止所有容器
$ docker rm $(docker ps -a -q) // remove删除所有容器
$ docker ps -a:查看已经运行的docker镜像
$ docker exec -it imagename(镜像名称) bash
$ service mysql status 查看mysql的启动状态
$ docker rm -f mysql(容器名称): 删除容器
$ 设置数据库root密码:docker run -name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=数据库密码 mysql
$ docker start :启动一个或多个已经被停止的容器
$ docker stop :停止一个运行中的容器
$ docker restart :重启容器
$ netstat -anp |grep 3306 :查看端口
$ docker stats :查看docker容器使用内存情况 查看cpu状态
部署项目
- 如果不是前后端分离直接导入jar其实也可以
- 部署之前的练手博客springboot+vue
由于前后端分离所以用nginx来部署vue,后端直接导入jar包即可,redis和mysql可以直接用服务器中的,也可以导入容器内部做一个端口映射,在容器里面使用
1、安装docker
2、安装Docker-Compose
这个相当于是一个容器的方法,执行Docker-Compose up
根据docker-Compose.yml来执行里面的容器
1、安装
curl -L https://get.daocloud.io/docker/compose/releases/download/1.29.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
去到安装目录检查:下载成功!
2、设置文件可执行权限
sudo chmod +x /usr/local/bin/docker-compose
3、查看版本信息
docker-compose -version
3、编写相关配置文件
- html(目录):存放我们Vue的前端项目打包后的结果!
- nginx.conf : 我们Nginx的核心配置
- blog-api…:我们的后端的Spriongboot项目打的jar包
- docker-compose.yml:我们Docker-Compose的核心配置文件
- Dockerfile:我们的Springboot项目,无法直接在DockerHub拉取,需要借助其built镜像
Docker-Compose.yml
- 注意格式,缩进问题,一级空格只能有一个
version: '3'
services:nginx: #服务名称image: nginx:latestports:- 80:80volumes: - /root/nginx/html:/usr/share/nginx/html #挂载:前面是挂载到哪儿,后面是nginx得配置目录- /root/nginx/nginx.conf:/etc/nginx/nginx.confprivileged: true #解决nginx得文件调用权限的问题vueblog:image: vueblog:latestbuild: .ports:- 8888:8888
- 由于我直接用服务器的redis和mysql,所以这里边没有配置redis和mysql
编写Dockerfile
Dockerfile 就是用来构建docker镜像的构建文件!命令脚本!
通过这个脚本可以生成镜像,镜像是一层一层的,脚本是一个个的命令,每个命令都是一层!
FROM java:8
EXPOSE 8888
ADD blog-api-1.0-SNAPSHOT.jar app.jar #前半部分,自己项目打包后的名称!
RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-jar","/app.jar","--spring.profiles.active=prod"]
编写Nginx的配置
worker_processes 1;
events {worker_connections 1024;
}
http {include mime.types;default_type application/octet-stream;sendfile on;keepalive_timeout 65;server {listen 80; # 端口server_name localhost;location / {root /usr/share/nginx/html;try_files $uri $uri/ /index.html last; #千万加上!index index.html index.htm;}error_page 500 502 503 504 /50x.html;location = /50x.html {root html;}}
}
4、打包
前端
执行npm run dev
,在dist下把这两放到html下即可
后端
reids设置
关闭保护
redis密码
数据库设置
sqlyog连接服务器数据库
打包
直接放到root下
然后直接启动
docker-compose up
docker0compose up -d # 后台启动 让网站一直启动
参考
Docker-Compose + Nginx 部署前后端分离项目
教你Docker+nginx部署SpringBoot+vue前后端分离项目
使用docker部署springboot项目并连接上mysql数据库
上线项目 Docker部署项目到服务器总结相关推荐
- IDE工具(45) idea使用Docker部署项目到服务器的全过程
一.前言 温馨小提示: 案例源码demo放文章最后了 基本环境 idea CentOS7.3服务器 docker springboot项目 二.服务器配置docker远程连接 可参考小编的另外一篇文章 ...
- 【7】idea集成docker部署项目
[7]idea集成docker部署项目 一.修改docker配置 1.1 修改服务器docker.service服务信息 允许其他主机远程访问服务器的docker vim /usr/lib/syste ...
- (四)docker部署项目
docker部署项目 基于ubuntu16.4+python3的flask web项目,使用gunicorn启动,项目运行时需要加载一些动态链接库,并且项目在运行时需要多个后缀为.vpo的授权文件,项 ...
- Python【算法中心 03】Docker部署Django搭建的Python应用流程实例(Docker离线安装配置+Django项目Docker部署)
1.Docker离线安装配置 rpm版本安装 # 系统版本 rpm -qi centos-release Name : centos-release Version : 8.1 Release : 1 ...
- vue项目打包部署到服务器,Vue项目打包部署到apache服务器的方法步骤
vue项目在开发环境下,让项目运行起来,是通过npm run dev命令,原理是在本地搭建了一个express服务器. 但是在服务器上就不是这样的,必须要通npm run build命令来对整个项目进 ...
- docker部署项目自动化脚本
docker部署项目脚本,脚本会完成容器停止,删除,镜像删除,镜像构造,运行容器等一系列操作 该脚本配合jenkins使用,真的舒服 #!/bin/bash echo "开始执行脚本&quo ...
- Linux centos7 docker部署gitlab私有服务器
Docker部署gitlab私有服务器,那么,这里必须要有两个软件啦,一个是Docker,一个是gitlab.鉴于很多同学还是不太了解这两个东西,并且观看了不少的其他大神的相关博客,发现对于Docke ...
- 如何将Java项目打包部署到Linux服务器进行访问
1. 什么是Docker? Docker 是一个开源项目,诞生于 2013 年初, 初是 dotCloud 公司内部的一个业余项目.它基于 Google 公司推出的 Go 语言实现. 项目后来加入了 ...
- vue项目打包部署linux_Vue项目打包部署到Nginx服务器
"随着前后端分离项目的流行,vue项目开发部署也成为了前端人员必备技能:本文将带你学习vue项目部署及遇到的各种坑." 关于vue项目部署不得不提的是配置文件vue.config. ...
最新文章
- 阿里云如何将服务器添加至跳板机,如何将服务器添加至jumpsever
- 数字经济时代,算力到底有多重要?
- QC中设置组权限-隐藏筛选器
- Python 爬取简单网页
- DL之RBM:基于RBM实现手写数字图片识别提高准确率
- 【研发管理】中国企业 VS 世界优秀企业在产品研发上差距(下)
- 力扣1103.分糖果
- 互联网行业哪个职位比较有前途?
- 什么是存储过程,存储过程的作用及好处
- iOS -[JYBDScanCardManage configIDScan] in JYBDScanCardManage.o等静态库问题
- SpringMVC简单映射请求参数介绍
- 碰撞检测——碰撞器和物理材质
- 注意力(Attention)
- android studio 圆形头像,Android Studio实现带边框的圆形头像
- 如何通过微信小程序进行更加有效的电商营销?
- Cauchy-Schwarz Inequality
- AcWing2022寒假每日一题(1 月 2 日 ~ 1 月 15 日)
- Java --- 线程同步和异步的区别
- java mysql SSM实现的校园门户平台网站系统源码+含开题报告与需求分析+包安装配置
- 互联网因特网计算机网络的区别,因特网和互联网的区别?
热门文章
- scratch编程密室逃脱
- 机器学习 28 个视频教程
- vue+播放直播视频流(websocket的流文件)
- 电商系统-优惠券叠加规则、优惠分摊介绍(三)
- 使用NtCreateThreadEx将Dll注入目标进程
- 纳斯达克Linq利用区块链改造私有股权交易平台
- java分布式免费开源搜索引擎 Elasticsearch 详细学习笔记
- 淘宝天猫店招空白间隔去除
- java解决数独_Java解决“数独”之三
- 看几个拿到外企offer的故事... 送你一套免费英语资料(价值1899)