一、安装docker
1.下载docker二进制文件
https://download.docker.com/linux/static/stable/x86_64/docker-20.10.7.tgz
2.解压docker-20.10.7.tgz
解压后获得一个docker-20.10.7的文件,改了扩展名为rar,再解压,获得一个docker文件夹,把docker文件夹上传(神奇的操作)
4.将docker文件移到可执行文件目录下 (PS:如果不移到可执行文件目录下你会发现我docker指令用不了 )
cp * /usr/bin/
复制过去之后,把文件的执行权限加上(切记,不然启动不了)
5. 配置docker.service (新建)
vim /usr/lib/systemd/system/docker.service
内容如下:
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
[Service]
Type=notify
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target
添加权限chmod +x /etc/systemd/system/docker.service
6.启动docker服务
systemctl daemon-reload
systemctl enable docker.service
systemctl start docker
docker info
7、修改docker的镜像源
sudo vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://xxx.mirror.aliyuncs.com"]
}
二、根据jar包打镜像并启动
1、创建文件夹(pmms-gateway),将jar包放进去,执行命令
2、在文件集中创建Dockerfile文件,文件内容(根据实际情况修改):
FROM openjdk:8
WORKDIR /build
COPY . .
#设置时区
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
EXPOSE 8080
CMD java -jar pmms-gateway-1.0-SNAPSHOT.jar
3、打包镜像。
返回上级目录执行
docker build pmms-gateway -t pmms-gateway:latest
4、启动镜像
删除之前的容器
docker stop $(docker ps -a -q --filter "name=pmms-gateway")
docker rm $(docker ps -a -q --filter "name=pmms-gateway")
启动镜像
docker run -d --name pmms-gateway -p 8999:8999 pmms-gateway:latest
删除镜像 docker rmi $(docker images -q --filter reference=pmms-gateway:*)
看日志docker logs --since 3m pmms-gateway
5、写一个脚本(build-pmms-gateway),代码有更新的话,上传jar包执行即可
docker stop $(docker ps -a -q --filter "name=pmms-gateway");
docker rm $(docker ps -a -q --filter "name=pmms-gateway");
docker rmi $(docker images -q --filter reference=pmms-gateway:*);
docker build pmms-gateway -t pmms-gateway:latest;
docker run -d --name pmms-gateway -p 8999:8999 pmms-gateway:latest;
注意每一行命令后加上;就可以按照顺序执行了。
6、把需要部署的后端服务按顺序部署
三、打包前端镜像
1、把编译后的dist文件夹复制到服务器,把配置好的nginx.conf复制到服务器(如果配饰ssl,要把证书啥的都复制上去)
2、编写好dockerfile
FROM nginx
COPY dist/ /usr/share/nginx/html/
COPY nginx.conf /etc/nginx/nginx.conf
3、进入目录的上一层打包
docker build vue -t vue:latest
4、运行
docker run -d --name vue -p 80:80 vue:latest
5、写一个更新脚本
docker stop $(docker ps -a -q --filter "name=vue");
docker rm $(docker ps -a -q --filter "name=vue");
docker rmi $(docker images -q --filter reference=vue:*);
docker build vue -t vue:latest;
docker run -d --name vue -p 80:80 vue:latest;
四、几点备忘:
1、为什么要把jar包上传后再生成镜像,而不是在本地生成镜像上传
本地生成镜像的话,需要本地安装了docker,开发人员的机器资源都不够,没必要每个人都安装docker,服务器必须要装docker
2、为什么不在服务器上直接拉代码、编译打包生成镜像
服务器编译打包生成镜像除了要安装docker之外,还要安装git\jdk\mvn\node等一系列环境软件,服务器资源有限。而这些都是开发人员电脑上必须要装的。
3、为啥不整k8s和jinkens
也是为了节约服务器资源。
4、为啥不直接执行jar包,而是使用docker
用docker不用配置环境真的很爽,跑前端,跑jar,跑python,一下子全搞定了,高效快捷