Docker部署前后端项目全流程

前言

在当今的软件开发领域,容器化技术已经成为了部署和管理应用程序的重要手段。Docker作为容器化技术的代表,它通过轻量级、可移植的容器来简化应用的部署和运维过程。这篇文章主要是记录自己学习的过程,如有错误之处可以指出讨论修改。

准备工作

需要有一个前端项目

需要有一个后端项目

这两个项目之间在本地可以正常运行

一台部署项目的服务器

一、安装docker

1.安装docker依赖环境

yum -y install yum-utils device-mapper-persistent-datalvm2

2.设置下载Docker的镜像源

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

3.安装docker

#将软件包信息提前在本地缓存一份,用来提高搜索安装软件的速度

#centos 8的命令。根据自己服务器的版本选择对应的命令
#yum makecache fast
 
#centos 7的命令。根据自己服务器的版本选择对应的命令
dnf makecache 

#提高安装速度以后,安装docker相关的(docker-ce 社区版 而ee是企业版)
yum install docker-ce docker-ce-cli containerd.io

4.启动docker,并设置为开机自动启动

#启动docker
systemctl start docker

#设置开机自启动
systemctl enable docker

5.测试是否安装成功

docker version

出现以下提示则安装成功

6.设置国内镜像

提醒:如果你的网络访问外网也很快则可以不设置,或者公司内部有自己的镜像源,可以根据自己的实际需求调整配置。设置国内镜像主要是为了解决docker拉取外国官方镜像超时的问题,设置为国内的镜像源可以提高拉取的速度

找到etc/docker/daemon.json文件并修改,添加代码如下(如果在/etc/docker下找不到daemon.json文件,可以自己新建对应的文件夹和文件。cd切换到/etc/docker目录下,使用touch命令创建)

#创建目录
sudo mkdir -p /etc/docker

#创建文件并设置国内镜像源
sudo tee /etc/docker/daemon.json <<-'EOF'
 {
  "registry-mirrors": [
          "https://ox288s4f.mirror.aliyuncs.com",
          "https://registry.docker-cn.com",
          "http://hub-mirror.c.163.com",
          "https://mirror.ccs.tencentyun.com"
  ]
}
EOF

#重启docker
sudo systemctl daemon-reload
sudo systemctl restart docker

二、安装nginx

1.拉取nginx镜像

# 拉取nginx镜像
docker pull nginx

# 查看镜像
docker images

2.创建并运行Nginx容器

# 创建容器
docker run -d --name nginx -p 80:80 nginx

# 查看正在运行的镜像
docker ps

# 查看是否运行成功
curl localhost:80

#命令详解:
# docker run 启动一个镜像
# -d 表示后台允许
# --name nginx  表示为当前容器起一个别名
# -p 80:80 表示将本机的80端口映射到nginx镜像的80端口

3.扩展

以下内容为根据项目要求,把nginx配置文件放到容器外面,方便查看和修改,如没特殊要求,可跳过以下操作。

3.1.进入到nginx容器内部

docker exec -it nginx /bin/bash

命令详解:
# docker exec 在运行的容器中执行命令
# -i 以交互模式运行容器,通常与 -t 同时使用;例如-it
# -t 为容器重新分配一个伪输入终端,通常与 -i 同时使用;例如-it
# nginx 容器名
# /bin/bash 其实就是表示载入容器后运行bash(命令语言解释程序), 因为docker中必须要保持一个进程(运行的程序)的运行,要不然整个容器就会退出,所以说,bash就担任起了docker中运行的那个进程的角色!
#而/bin/bash则是bash在linux下的位置

3.2.查询容器中配置文件存放位置

# 在容器中查询出nginx的相关配置文件存放位置
whereis nginx

# 退出容器
exit

3.3.创建管理目录并挂载

# 创建对应的配置文件
mkdir -p /home/yooyee/base/nginx
mkdir -p /home/yooyee/base/nginx/www 
mkdir -p /home/yooyee/base/nginx/conf
mkdir -p /home/yooyee/base/nginx/logs

# 将容器中的相应文件copy到刚创建的管理目录中
docker cp 8e645f97196a:/etc/nginx/nginx.conf /home/yooyee/base/nginx/
docker cp 8e645f97196a:/etc/nginx/conf.d /home/yooyee/base/nginx/conf/
docker cp 8e645f97196a:/usr/share/nginx/html/ /home/yooyee/base/nginx/www/
docker cp 8e645f97196a:/var/log/nginx/ /home/yooyee/base/nginx/logs/

# 停止Nginx容器,8e645f97196a表示容器的ID,即:CONTAINER ID
docker stop 8e645f97196a
#移除容器
docker rm 8e645f97196a


#移除和停止容器,那个容器id也可以换成容器名

3.4.再次启动容器并作目录挂载

#再次启动容器并作目录挂载
docker run --name nginx \
-p 80:80 \
-v /home/yooyee/base/nginx/nginx.conf:/etc/nginx/nginx.conf \
-v /home/yooyee/base/nginx/www/:/usr/share/nginx/html/ \
-v /home/yooyee/base/nginx/logs/:/var/log/nginx/ \
-v /home/yooyee/base/nginx/conf/:/etc/nginx/conf.d \
--privileged=true \
-d nginx

# 详解
# -p 80:80 端口进行映射,将本地 80端口映射到容器内部的 80 端口
# -v 将宿主机上的对应目录挂载到容器内的对应目录
# --privileged=true 赋予容器扩展的权限,使得容器内的进程可以执行一些需要特殊权限的操作
# -d 后台运行

三、安装mysql

1.拉取mysql镜像

#默认最新版本
docker pull mysql  

#指定版本号
#docker pull mysql:xxx  

#查看镜像
docker images    

2.启动mysql容器

#镜像部署为容器
docker run --name mysql -d -p 33061:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql

#查看运行中的容器
docker ps -a

#命令解释
# --name 自定义容器名称
# -d 后台运行
# -p 指定映射的端口号( 宿主机端口号 : 容器内端口号)
# -e MYSQL_ROOT_PASSWORD=root账号的数据库密钥
# 最后面那个mysql是镜像名

3.验证是否成功

#查看运行中的容器
docker ps -a

4.扩展

以下内容为根据项目要求,把mysql配置文件放到容器外面,方便查看和修改,如没特殊要求,可跳过以下操作(建议执行以下步骤把配置文件挂载到服务器,防止容器挂了导致数据丢失)。

4.1.移除mysql容器

# 停止mysql容器
docker stop mysql

#移除容器
docker rm mysql

4.2.创建对应目录

# 创建对应的配置文件
mkdir -p /home/yooyee/base/mysql
mkdir -p /home/yooyee/base/mysql/conf

4.3.在conf文件夹下添加一个my.cnf文件

# my.cnf文件内容

[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
[mysqld]
#datadir=/var/lib/mysql
sql-mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
character-set-server=utf8mb4
collation_server=utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'
default_authentication_plugin=mysql_native_password

4.4.启动容器,重新验证

docker run -d \
--name mysql \
-p 33061:3306 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123456 \
-v /home/yooyee/base/mysql/data:/var/lib/mysql \
-v /home/yooyee/base/mysql/conf:/etc/mysql/conf.d \
mysql

三、部署后端项目

1.后端打jar包

2.编写DockerFile

#工程java版本
FROM java:openjdk-8-jdk  

#作者
MAINTAINER yooyee

#设定时区
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo 'Asia/Shanghai' >/etc/timezone

#将所有的jar包整合为app.jar
COPY *.jar /app.jar  
 
#执行jar包
ENTRYPOINT ["java","-jar","app.jar"]  

3.把jar包和DockerFile放到服务器的某个目录

注意:这两个文件必须放在同一个目录里面

4.构建镜像

# . 点千万别漏了,这里取名镜像为practice_serve_images,可以随便取名!
docker build -t practice_serve_images . 

#查看镜像
docker images 

5.创建容器并运行

#镜像运行为容器
docker run -d -p 8686:8088 --name practice_serve practice_serve_images 

# 查看正在运行的容器
docker ps -a 

# 命令详解
# 将宿主机8686端口映射到容器8088端口
# practice_serve为自定义容器名字
# practice_serve_image是镜像名字

# 8088是后端项目实际访问的端口,对应项目配置文件设置的端口
# 注意端口间的关系,否则会出现访问404的情况

6.测试接口

四、部署前端项目

1.打包Vue工程

2.编写default.conf和Dockerfile文件

#default.conf文件

server {
    listen       80;
    server_name  ip地址; # 修改为docker服务宿主机的ip
 
    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
        try_files $uri $uri/ /index.html =404;
    }
     location /api {
      proxy_pass http://ip地址:后端服务端口号/;
    }
 
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }
}
#Dockerfile文件

# 基础镜像使用Nginx
FROM nginx

# 作者
MAINTAINER yooyee

# 添加时区环境变量,亚洲,上海
ENV TimeZone=Asia/Shanghai

# 将前端dist文件中的内容复制到nginx目录
COPY dist  /usr/share/nginx/html/

# 用本地的nginx配置文件覆盖镜像的Nginx配置
COPY default.conf /etc/nginx/conf.d/default.conf

# 暴露端口
EXPOSE 8687

3.上传文件到服务器的同一个文件夹当中

4.构建前端镜像

# . 点千万别漏了,这里取名镜像为practice_page_images,可以随便取名!
docker build -t practice_page_images . 

#查看镜像
docker images 

5.创建容器并运行

#镜像运行为容器
docker run -d -p 8687:80 --name practice_page practice_page_images

# 查看正在运行的容器
docker ps -a 

#将8687端口映射到80端口,端口记得放开
# practice_page为自定义容器名字
# practice_page_images是镜像名字

# 8687为前端访问的界面地址栏的那个端口,
# 80为通过nginx配置端口,通过80端口转发到后端的实际接口

6.测试界面是否能正常访问

至此,完成docker方式的前后端项目部署。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值