大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE稳定放心使用
文章目录
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:latest
ports:
- 80:80
volumes:
- /root/nginx/html:/usr/share/nginx/html #挂载:前面是挂载到哪儿,后面是nginx得配置目录
- /root/nginx/nginx.conf:/etc/nginx/nginx.conf
privileged: true #解决nginx得文件调用权限的问题
vueblog:
image: vueblog:latest
build: .
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数据库
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/180580.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...