这年头不是全栈工程师,连中间件实验都做不了了
基本知识
docker 名词 | java 名词 |
---|---|
镜像 | 类 |
容器 | 对象 |
由镜像构建容器 | new 一个某类的实例 |
docker build | 设计一个class |
docker run | new |
列出镜像列表 | 查看所有类 |
列出所有容器 | 查看所有已经实例化的对象 |
停止容器 | 使得这个对象停止功能 |
删除容器 | 使得这个对象被释放(delete) |
ubuntu 安装 docker
参考链接:https://www.runoob.com/docker/ubuntu-docker-install.html
预备
先通过docker version
查看本机上是否已经安装 docker,若是,则执行下述命令,卸载旧版本 docker
sudo apt-get remove docker docker-engine docker.io containerd runc
安装
首次安装时,需要设置仓库
指令 | 用途 |
---|---|
sudo apt-get update | 更新 apt 包索引 |
sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common | 安装 apt 依赖包,用于通过 HTTPS 来获取仓库 |
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - | 添加 Docker 的官方 GPG 密钥 |
sudo add-apt-repository “deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable” | 设置稳定版仓库 |
安装 Docker Engine-Community
指令 | 用途 |
---|---|
sudo apt-get update | 更新 apt 包索引 |
sudo apt-get install docker-ce docker-ce-cli containerd.io | 安装最新版本的 Docker Engine-Community 和 containerd |
docker version | 检查 docker 版本,验证是否安装成功 |
ubuntu 使用 docker 部署jar
参考链接:https://blog.csdn.net/weixin_42054155/article/details/90815393
构建 docker 镜像
构造文件
Dockerfile
,这是一个无后缀文件该文件内容如下
1
2
3
4
5FROM java:8
MAINTAINER Ringoer
ADD demo-0.0.1-SNAPSHOT.jar demo.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","demo.jar"]FROM 表示拉取一个 java 版本为 1.8 的 docker image(docker镜像)
MAINTAINER 表示作者声明,后接作者名字
ADD 向镜像中加入文件,第一个参数是要加入的文件名,第二个参数是文件的重命名,表示它在 docker 镜像中的名字
EXPOSE 表示该镜像对外暴露的端口号(与 java 项目的端口号要相同)
ENTRYPOINT 表示运行该镜像时执行的命令行参数,示例中给出的配置等效于执行命令
java -jar demo.jar
向服务器上传 jar 包和 Dockerfile 文件,这两个文件要在同一个目录下
连接服务器终端,cd 进入该目录
执行命令
docker build -t demo .
构建镜像,其中 demo 是镜像名称。记得别漏了最后的一个点
操作镜像
运行容器
docker run -d --name demo1 -p 8080:8080 demo
docker run 部分是不可变的
-d 指示了 docker 容器后台运行
–name 部分指示了新运行的容器实例的名称
-p 部分指示了两个端口号,用冒号隔开。其中前一个端口号表示暴露在公网的 ip,后一个表示容器暴露的 ip
最后一个参数是镜像名称,此处表示使用名为 demo 的镜像构建容器,容器名为 demo1
其余命令
命令 | 功能 |
---|---|
docker pull [name] | 根据名称获取镜像 |
docker images | 查看所有镜像 |
docker rmi [name] | 根据名称删除某个镜像 |
docker rmi $(docker images -q) | 删除所有镜像 |
docker ps -a | 查看所有容器 |
docker ps -aq | 列出所有容器ID |
docker stop [name] | 根据名称停止某个容器 |
docker stop $(docker ps -aq) | 停止所有容器 |
docker rm [name] | 根据名称删除某个容器 |
docker rm $(docker ps -aq) | 删除所有容器 |
docker 部署基于 nginx 的前端项目
参考链接:
http://dockone.io/article/8834
https://www.cnblogs.com/littleorange7/p/12838101.html
在服务器上使用命令
docker pull nginx
下载 nginx在服务器上为 vue 项目新建一个文件夹(假设命名为 vue)
在本地使用命令
npm run build
打包 vue 项目,打包完成后会在项目目录下产生一个 dist 文件夹。将该文件夹上传到服务器不如说,几乎所有前端用的打包框架都是产生 dist 文件夹
在本地编写 Dockerfile 文件
文件内容如下,照抄即可
1
2
3FROM nginx
COPY dist/ /usr/share/nginx/html/
COPY nginx/default.conf /etc/nginx/conf.d/default.conf编写完毕后上传到服务器的 vue 文件夹
新建一个名为 nginx 的文件夹,在这个文件夹里新建一个名为 default.conf 的文件
文件内容如下
1 | server { |
需要注意的字段如下
字段名 | 用途 |
---|---|
listen | 配置 nginx 的监听端口,要求与 vue 配置的端口号一致 |
server_name | 前端访问的主机名,要求填写公网地址(域名或 ip) |
index | 指示项目主页。此处注释掉是作为对比,原因见下一条 |
try_files | 使用 index 进行配置时,会导致在非项目主入口刷新时,报 404 错误。所以使用 try_files 进行配置,使得刷新可以触发设定好的拦截,跳转至登录界面。照抄即可,注意是 uri,不是 url |
location /api/ {} | 配置跨域请求,这里的 /api/ 与 vue 项目内部配置的 proxyTable 里所填前缀一致 |
proxy_pass | 转发地址,与 vue 项目内部配置的 proxyTable 下的 target 所填内容一致。必须完整填写(包含 http 和斜杠),不然会报错 |
proxy_redirect | 是否重定向,off 就行了 |
别的东西 | 都可以照抄 |
将 nginx 文件夹上传到服务器 vue 文件夹
- 现在服务器 vue 文件夹中有2个文件夹和1个文件
文件名 | 描述 |
---|---|
dist | vue 项目静态资源文件夹 |
nginx | nginx 配置文件夹 |
Dockerfile | docker 配置文件(不是文件夹) |
其中 nginx 文件夹中还包含 default.conf 文件
接下来过程与部署 jar 包一致
部署命令顺序
通过 cd 命令进入服务器上 vue 文件夹后,按顺序执行下述命令
docker build -t [name] .
,其中 [name] 是你所希望的镜像名称末尾的一个点别漏了
docker run -d --name [name1] -p [port1]:[port2] [name2]
,其中
字段名 | 描述 |
---|---|
[name1] | 你所希望的容器名称 |
[port1] | 容器暴露在公网的端口号 |
[port2] | nginx 监听的端口号,也是 vue 项目配置的端口号 |
[name2] | 1中命令设置的镜像名称 |
现在,通过浏览器访问 [server_name]:[port1] 即可看到你的 vue 项目