Docker部署前后端項目


本人使用的是ubuntu 18.04進行開發

前期准備

1、本地安裝docker:

sudo apt install docker.io

2、本地安裝Git與nodejs,鏈接

3、服務器安裝Docker,鏈接

 

服務器(CentOS7)使用Docker安裝mysql鏡像

查看已安裝鏡像

docker images

查找:(建議選擇與項目相應的版本,后面我改成Mysql57了)

docker search mysql

 

下載

docker pull docker.io./mysql
# 安裝5.7
docker pull mysql:5.7

 關閉原運行的Mariadb  沒有忽列(端口占用)

systemctl stop mariadb.service
systemctl disable mariadb.service

 運行容器

docker run -p 3306:3306 --name mymysql -v $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/logs -v $PWD/data:/ var/lib/mysql -e MYSQL_ROOT_PASSWORD =123456 -d mysql鏡像的IMAGE ID
-p 3306:3306:將容器的 3306 端口映射到主機的 3306 端口。

-v $PWD/conf:/etc/mysql/conf.d:將主機當前目錄下的 conf/my.cnf 掛載到容器的 /etc/mysql/my.cnf。

-v $PWD/logs:/logs:將主機當前目錄下的 logs 目錄掛載到容器的 /logs。

-v $PWD/data:/var/lib/mysql :將主機當前目錄下的data目錄掛載到容器的 /var/lib/mysql 。

-e MYSQL_ROOT_PASSWORD=123456:初始化 root 用戶的密碼

發現容器重名:重命名或者刪除

刪除:

重新運行:

docker run -p 3306:3306 --name mymysql -v $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/logs -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql鏡像的IMAGE ID

成功:

 

 進入容器:

docker exec -it mymysql bash

登入mysql:密碼為上面創建容器是設置的密碼

mysql -u root -p
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';

root:用戶名  123456:密碼

添加遠程登錄用戶

CREATE USER 'admin'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';

創建一個用戶名為:admin,密碼為123456;

並允許admin用戶和root用戶遠程登陸

退出容器:

ctrl+p+q

即可本地連接將數據導入數據庫

 

服務器(CentOS7)docker安裝Nginx鏡像

 查找

docker search nginx

安裝:

docker pull docker.io/nginx

查看

運行容器:

docker run -p 8899:8899 --name mynginx -v $PWD/www:/www -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf -v $PWD/logs:/wwwlogs  -d nginx
復制代碼
命令說明:

-p 80:80:將容器的80端口映射到主機的80端口 --name mynginx:將容器命名為mynginx -v $PWD/www:/www:將主機中當前目錄下的www掛載到容器的/www -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf:將主機中當前目錄下的nginx.conf掛載到容器的/etc/nginx/nginx.conf -v $PWD/logs:/wwwlogs:將主機中當前目錄下的logs掛載到容器的/wwwlogs
復制代碼

出現錯誤:

/usr/bin/docker-current: Error response from daemon: oci runtime error: container_linux.go:235: starting container process caused "container init exited prematurely".
View Code

解決方法:暫時未知

另一種啟動方式:

docker run -p 8899:8899 -d docker.io/nginx //將80端口映射為8899,因為8080被tomcat用

查看容器啟動情況 

docker ps

 成功:

 

 

方法一:使用並創建DockerHub鏡像倉庫

Docker Hub : https://cloud.docker.com

阿里的容器服務也可以這里采用Docker Hub來演示

 

部署Vue前端項目:

1.將項目拉到本地

git clone -b audit https://gitee.com/Tz_819827497/innovate-admin-vue.git

2.編寫docker文件:

FROM docker.io/nginx

MAINTAINER soldier <soldier_wyyx.com>

RUN rm /etc/nginx/conf.d/default.conf

ADD default.conf /etc/nginx/conf.d/

COPY dist/  /usr/share/nginx/html/
Dockerfile
server {
       listen       8080;
       server_name  localhost;
  
       #charset koi8-r;
       #access_log  /var/log/nginx/log/host.access.log  main;
   
       location / {
           root   /usr/share/nginx/html;
          index  index.html index.htm;
       }
 
    #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   html;
     }
  
     # proxy the PHP scripts to Apache listening on 127.0.0.1:80
      #
      #location ~ \.php$ {
      #    proxy_pass   http://127.0.0.1;
     #}
  
      # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
     #
     #location ~ \.php$ {
    #    root           html;
      #    fastcgi_pass   127.0.0.1:9000;
   #    fastcgi_index  index.php;
     #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}
 
    # deny access to .htaccess files, if Apache's document root
     # concurs with nginx's one
     #
      #location ~ /\.ht {
      #    deny  all;
      #}
  }
default.conf

下載依賴

npm install

代碼打包:

npm run build

打包鏡像:

docker build -t soldierdocker/innovate-admin-vue:v1.0.0 .

將鏡像推到倉庫:

docker push soldierdocker/innovate-admin-vue

拉取鏡像

docker pull soldierdocker/innovate-admin-vue:v1.0.0

安裝並運行鏡像 

docker run --name=innovate-admin-vue -p 8001:8001 -d soldierdocker/innovate-admin-vue:v1.0.0

其中8001是服務器上nginx運行的端口號

npm run build報錯

building for production...Killed  

原理

按照他人的說法是,服務器內存不夠用了,這樣就給他配置一個單獨的內存出來就解決了

解決方法

sudo /bin/dd if=/dev/zero of=/var/swap.1 bs=1M count=1024 sudo /sbin/mkswap /var/swap.1 sudo /sbin/swapon /var/swap.1

 

部署后端Springboot:

用mven將項目打包上傳到服務器

編寫Dockerfile

FROM java:8
 EXPOSE 8080
   
  VOLUME /tmp
   ADD innovate-admin.jar /app.jar
   RUN bash -c 'touch /app.jar'
  ENTRYPOINT ["java","-jar","/app.jar"]
Dockerfile

生成鏡像

docker build -t soldierdocker/innovate-admin:v1.0.0 .

推鏡像

docker push soldierdocker/innovate-admin

拉鏡像

docker pull soldierdocker/innovate-admin:v1.0.0

啟動容器:

docker run -d -p 8080:8080 soldierdocker/innovate-admin:v1.0.0

查看運行的容器日志: 

sudo docker logs -f -t --tail 行數 容器名
sudo docker logs -f -t --tail n 容器名

 

方法二:使用阿里雲鏡像服務部署

阿里雲容器鏡像服務:https://cr.console.aliyun.com/cn-hangzhou/instances/repositories

先創建一個命名空間

再創建一個鏡像倉庫

本地構建項目

啟動docker: service docker start
進入管理員賬號:su
1.下載相關依賴: npm install
2.編譯項目: npm run build
3.打包鏡像: docker build -t registry.cn-hangzhou.aliyuncs.com/soldier-hub/sweetheart:[鏡像版本號] .
4.登錄: docker login --username=soldier_ali registry.cn-hangzhou.aliyuncs.com
5.推送:docker push registry.cn-hangzhou.aliyuncs.com/soldier-hub/sweetheart:[鏡像版本號]

 

部署項目

登錄服務器:ssh 116.62.48.112
1.登錄: docker login --username=soldier_ali registry.cn-hangzhou.aliyuncs.com
1.下拉鏡像: docker pull registry.cn-hangzhou.aliyuncs.com/soldier-hub/sweetheart:[鏡像版本號]
2.運行容器: docker run -d --name sweetheart-vue-[datatime] -p 5200:5200 <imageId>

后面的5200是default.conf里設置的,前面的5200是你要運行的、會映射到后面那個的端口上

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM