Ubuntu下使用Docker部署的办法

这年头不是全栈工程师,连中间件实验都做不了了


基本知识

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 镜像

  1. 构造文件Dockerfile,这是一个无后缀文件

    该文件内容如下

    1
    2
    3
    4
    5
    FROM 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

  2. 向服务器上传 jar 包和 Dockerfile 文件,这两个文件要在同一个目录下

  3. 连接服务器终端,cd 进入该目录

  4. 执行命令 docker build -t demo . 构建镜像,其中 demo 是镜像名称。记得别漏了最后的一个点

操作镜像

  1. 运行容器

    docker run -d --name demo1 -p 8080:8080 demo

    docker run 部分是不可变的

    -d 指示了 docker 容器后台运行

    –name 部分指示了新运行的容器实例的名称

    -p 部分指示了两个端口号,用冒号隔开。其中前一个端口号表示暴露在公网的 ip,后一个表示容器暴露的 ip

    最后一个参数是镜像名称,此处表示使用名为 demo 的镜像构建容器,容器名为 demo1

  2. 其余命令

命令 功能
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

  1. 在服务器上使用命令 docker pull nginx 下载 nginx

  2. 在服务器上为 vue 项目新建一个文件夹(假设命名为 vue)

  3. 在本地使用命令 npm run build 打包 vue 项目,打包完成后会在项目目录下产生一个 dist 文件夹。将该文件夹上传到服务器

    不如说,几乎所有前端用的打包框架都是产生 dist 文件夹

  4. 在本地编写 Dockerfile 文件

    文件内容如下,照抄即可

    1
    2
    3
    FROM nginx
    COPY dist/ /usr/share/nginx/html/
    COPY nginx/default.conf /etc/nginx/conf.d/default.conf

    编写完毕后上传到服务器的 vue 文件夹

  5. 新建一个名为 nginx 的文件夹,在这个文件夹里新建一个名为 default.conf 的文件

    文件内容如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
server {
listen 2222;
server_name ali.ringoer.com;

#charset koi8-r;
access_log /var/log/nginx/host.access.log main;
error_log /var/log/nginx/error.log error;

location / {
root /usr/share/nginx/html;
#index index.html index.htm;
try_files $uri $uri/ /index.html;
}

location /api/ {
proxy_pass http://ali.ringoer.com:9527/;
proxy_redirect off;
}

#error_page 404 /404.html;

# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}

需要注意的字段如下

字段名 用途
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 文件夹

  1. 现在服务器 vue 文件夹中有2个文件夹和1个文件
文件名 描述
dist vue 项目静态资源文件夹
nginx nginx 配置文件夹
Dockerfile docker 配置文件(不是文件夹)

其中 nginx 文件夹中还包含 default.conf 文件

接下来过程与部署 jar 包一致

  1. 部署命令顺序

    通过 cd 命令进入服务器上 vue 文件夹后,按顺序执行下述命令

    1. docker build -t [name] .,其中 [name] 是你所希望的镜像名称

      末尾的一个点别漏了

    2. docker run -d --name [name1] -p [port1]:[port2] [name2],其中

字段名 描述
[name1] 你所希望的容器名称
[port1] 容器暴露在公网的端口号
[port2] nginx 监听的端口号,也是 vue 项目配置的端口号
[name2] 1中命令设置的镜像名称

现在,通过浏览器访问 [server_name]:[port1] 即可看到你的 vue 项目

--It's the end.Thanks for your read.--