Docker發(fā)布前后端分離項(xiàng)目

友情提示:因?yàn)椴渴鸬氖俏易约旱捻?xiàng)目,所以有些工具是我自用的,不需要的可以不用安裝。

環(huán)境與插件

  • 操作系統(tǒng):Ubuntu 18.04
  • jdk: 1.8
  • Docker: 19.03.13
  • Redis: 6.0.9
  • Mysql: 5.7
  • Nginx: 1.10
  • wkhtmltopdf
  • 前后端分離:
    前端:Vue
    后端:Spring Boot

Docker

更新apt 包索引

sudo apt-get update

安裝 apt 依賴包,用于通過HTTPS來獲取倉(cāng)庫(kù)

sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common

添加 Docker 的官方 GPG 密鑰

curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add -

設(shè)置穩(wěn)定版?zhèn)}庫(kù)

sudo add-apt-repository \
   "deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/ \
  $(lsb_release -cs) \
  stable"

更新apt源索引

sudo apt-get update

安裝最新版本的 Docker Engine-Community 和 containerd ,或者轉(zhuǎn)到下一步安裝特定版本:

sudo apt-get install docker-ce docker-ce-cli containerd.io
  1. 安裝特定版本的 Docker Engine-Community,請(qǐng)?jiān)趥}(cāng)庫(kù)中列出可用版本,然后選擇一種安裝。列出您的倉(cāng)庫(kù)中可用的版本:
apt-cache madison docker-ce
image.png
  1. 使用第二列中的版本字符串安裝特定版本,例如 5:19.03.12 ~ 3-0~ubuntu-bionic
sudo apt-get install docker-ce=<VERSION_STRING> docker-ce-cli=<VERSION_STRING> containerd.io

測(cè)試 Docker 是否安裝成功

sudo docker run hello-world

打印出以下信息則安裝成功


image.png

查看版本

docker -v
image.png

安裝jdk

官網(wǎng)下載.gz包

官網(wǎng)下載地址

解壓

sudo mkdir /usr/local/java
sudo tar -zxvf jdk-8u271-linux-x64.tar.gz -C /usr/local/java

環(huán)境變量

sudo vim /etc/profile

export JAVA_HOME=/usr/local/java/jdk

export CLASSPATH=.:${JAVA_HOME}/lib

export PATH=${JAVA_HOME}/bin:$PATH

立即生效

source /etc/profile

查看安裝

java -version
image.png

Docker安裝Redis

查看redis來源

docker search redis
image.png

拉取鏡像

docker pull redis:6.0.9

創(chuàng)建映射文件

redis.conf: 官網(wǎng)下載

修改配置文件:

bind 127.0.0.1: #注釋掉這部分,這是限制redis只能本地訪問
daemonize no:#默認(rèn)no,改為yes意為以守護(hù)進(jìn)程方式啟動(dòng),可后臺(tái)運(yùn)行,除非kill進(jìn)程,改為yes會(huì)使配置文件方式啟動(dòng)redis失敗
appendonly yes: #redis持久化
requirepass foobared: #修改密碼

mkdir /alidata/docker/redis
vim /alidata/docker/redis/redis.conf

創(chuàng)建容器

docker run -p 6379:6379 --name redis -v /alidata/docker/redis/redis.conf:/etc/redis/redis.conf -v /alidata/docker/redis/data:/data -d redis:6.0.9 redis-server /etc/redis/redis.conf --appendonly yes

命令解釋說明:

-p 6379:6379: 端口映射:前表示主機(jī)部分,:后表示容器部分。

--name redis: 指定該容器名稱,查看和進(jìn)行操作都比較方便。

-v: 掛載目錄,規(guī)則與端口映射相同。

為什么需要掛載目錄:個(gè)人認(rèn)為docker是個(gè)沙箱隔離級(jí)別的容器,這個(gè)是它的特點(diǎn)及安全機(jī)制,不能隨便訪問外部(主機(jī))資源目錄,所以需要這個(gè)掛載目錄機(jī)制。

-d redis:6.0.9: 表示后臺(tái)啟動(dòng)redis

redis-server /etc/redis/redis.conf: 以配置文件啟動(dòng)redis,加載容器內(nèi)的conf文件,最終找到的是掛載的目錄/alidata/docker/redis/redis.conf

測(cè)試

image.png

Docker安裝Mysql

拉取鏡像

docker pull mysql:5.7

創(chuàng)建映射文件

mkdir /alidata/docker/mysql/data
mkdir /alidata/docker/mysql/logs
vim /alidata/docker/mysql/conf/my.cnf

創(chuàng)建容器

docker run \
  -p 3306:3306 \
  --name mysql \
  -v /alidata/docker/mysql/conf/my.cnf:/etc/mysql/my.cnf \
  -v /alidata/docker/mysql/logs:/logs \
  -v /alidata/docker/mysql/data:/var/lib/mysql \
  -e MYSQL_ROOT_PASSWORD=root \
  -d mysql:5.7

命令解釋說明:

-e MYSQL_ROOT_PASSWORD=root 設(shè)置登錄密碼

進(jìn)入容器

docker exec -it mysql bash

進(jìn)入mysql

mysql -u root -p ##輸入登錄密碼root

遠(yuǎn)程登錄mysql

連接宿主機(jī)的IP ,指定端口為3306

遠(yuǎn)程連接出現(xiàn)的問題

image
  1. 看MySQL的用戶是不是限制了遠(yuǎn)程登錄,也就是看host是localhost還是%
mysql> SELECT user, host FROM mysql.user;
image

上圖不正常

mysql> update user set host = '%' where user = 'root';
mysql> flush privileges;
  1. 查看3306端口是否打開
netstat -talnp 
image
  1. 如果使用的是ECS,設(shè)置安全配置規(guī)則,允許訪問端口


    image.png

測(cè)試

image.png

Docker安裝RabbitMQ

拉取鏡像

docker pull rabbitmq:3.7

創(chuàng)建容器并啟動(dòng)

docker run -d --name rabbit -p 15672:15672 -p 5672:5672 -p 61613:61613 rabbitmq:3.7

注:這邊需要用到stomp插件,所以需要將61613端口映射到宿主機(jī)上,看個(gè)人需求

安裝STOMP插件

進(jìn)入容器

docker exec -it rabbit bash

手動(dòng)開啟mq管理插件

rabbitmq-plugins enable rabbitmq_management

手動(dòng)開啟STOMP插件

rabbitmq-plugins enable rabbitmq_stomp
image.png

訪問http://ip:15672

image.png

安裝wkhtmltopdf

官網(wǎng)

下載

wget https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6-1/wkhtmltox_0.12.6-1.xenial_amd64.deb

下載依賴

sudo apt-get install libxfont1 xfonts-encodings xfonts-utils xfonts-base xfonts-75dpi

安裝wkhtmltopdf

sudo dpkg -i wkhtmltox_0.12.6-1.xenial_amd64.deb

wkhtmltopdf工具的路徑在/usr/local/bin/wkhtmltopdf

測(cè)試

wkhtmltopdf https://www.baidu.com/ test.pdf

中文亂碼

下載simsun.ttc/usr/share/fonts(可以在Windows里面找)

Docker安裝Nginx

拉取鏡像

docker pull nginx:1.10

創(chuàng)建映射文件

mkdir /alidata/docker/nginx/logs
mkdir /alidata/docker/nginx/conf

啟動(dòng)容器

docker run --name nginx-test -p 80:80 -d nginx:1.10

訪問

image.png

建立映射

查看容器

docker ps
image.png

copy配置文件

docker cp 1c1245efec1d:/etc/nginx/nginx.conf /alidata/docker/nginx/conf

創(chuàng)建Nginx容器,并將www,logs,conf目錄映射到本地,啟動(dòng)

docker run -d --name nginx \
  -p 8082:80 \
  -v /alidata/www/histo/pcp:/usr/share/nginx/html \
  -v /alidata/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
  -v /alidata/docker/nginx/logs:/var/log/nginx \
  nginx:1.10

參數(shù)說明:

--name nginx:容器名稱。
-p 81:80: 端口進(jìn)行映射,將本地 81 端口映射到容器內(nèi)部的 80 端口。
-d nginx:1.10: 設(shè)置容器在在后臺(tái)一直運(yùn)行。

創(chuàng)建頁(yè)面

/alidata/www/histo/pcp/index.html

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>docker搭建nginx</title>
</head>
<body>
    <h1>Docker部署nginx成功</h1>
</body>
</html>

訪問

image.png

Docker部署前端(待更)

編譯

編譯后的文件拷貝至/alidata/www/histo/pcp/

配置niginx

Docker部署后端

獲取項(xiàng)目

git clone 項(xiàng)目地址

構(gòu)建項(xiàng)目

mvn clean
mvn install

編寫Dockerfile文件

# 基礎(chǔ)鏡像使用java
FROM java:8
# 作者
MAINTAINER xxx@qq.com
# 將jar包添加到容器中并更名為pcp.jar
ADD ./target/*.jar pcp.jar
# 容器內(nèi)應(yīng)用將會(huì)使用容器的指定端口
EXPOSE 10999
# 運(yùn)行jar包
ENTRYPOINT java -jar pcp.jar

制作鏡像方式一

將編譯好的項(xiàng)目和Dockerfile上傳服務(wù)器

### 上傳至/alidata/application/pcp/pcp
image.png

ls

image.png

制作鏡像

docker build -t pcp .

啟動(dòng)容器

docker run -d --name pcp -p 10999:10999 pcp

制作鏡像方式二

阿里云新建docker鏡像上傳的云端地址

這個(gè)自己去阿里云上新建,免費(fèi)的

配置build.sh腳本

docker rmi registry.cn-shanghai.aliyuncs.com/xxx/yyy:${1}
docker build -t registry.cn-shanghai.aliyuncs.com/xxx/yyy:${1} .
docker login --username=xxx --password=xxx registry.cn-shanghai.aliyuncs.com
docker push registry.cn-shanghai.aliyuncs.com/xxx/xxx:${1}

進(jìn)入項(xiàng)目,打開git bash

image.png

執(zhí)行build.sh腳本

sh build.sh {{version}}

拉鏡像

docker pull registry.cn-shanghai.aliyuncs.com/xxx/yyy:{{version}}

啟動(dòng)容器

docker run -d --name pcp -p 10999:10999 pcp
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容