记一次Docker的前后端部署操作

348 阅读4分钟

1. 部署前的操作

在Liunx服务器上安装Docker

使用官方安装脚本自动安装

安装命令如下:

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

也可以使用国内 daocloud 一键安装命令:

curl -sSL https://get.daocloud.io/docker | sh

启动 Docker。

sudo systemctl start docker

2. 后端打包

2.1 JAVA端打包

2.1.1 maven添加docker插件,maven plugins 节点添加

  <plugin>
        <groupId>com.spotify</groupId>
        <artifactId>docker-maven-plugin</artifactId>
        <version>0.4.14</version>
        <configuration>
          <imageName>${artifactId}:0.0.1</imageName>
          <dockerDirectory>${project.basedir}</dockerDirectory>
          <resources>
            <resource>
              <targetPath>/</targetPath>
              <directory>${project.build.directory}</directory>
              <include>${project.build.finalName}.jar</include>
            </resource>
          </resources>
        </configuration>
        <!-- 运行命令 mvn clean package docker:build 打包并生成docker镜像 -->
      </plugin>

2.1.2 编写dockerfile

FROM openjdk:8-alpine

#ENV 变量

ENV TZ='Asia/Shanghai'
ENV DATA_API_ADDRESS=""


#COPY
COPY  ./target/langyage-1.0-SNAPSHOT.jar /root

#EXPOSE 服务端口
EXPOSE 8081

#ENTRYPOINT 启动命令
ENTRYPOINT java -jar  /root/langyage-1.0-SNAPSHOT.jar

2.1.3 执行打包

在pom.xml所在目录执行

mvn clean package docker:build 

2.1.4 查看镜像

执行 docker images 即可查看镜像 ,即打包完成

2.2 python 端打包

前提 安装python环境

2.2.1 导出当前项目的依赖

pip install pipreqs

pipreqs ./

执行完后,在这个项目下会生成一个requirements.txt文件,里面记录了该项目所用到的依赖

2.2.2 编写dockerfile

FROM python:3.7-alpine

#ENV 变量

ENV TZ='Asia/Shanghai'
ENV DATA_API_ADDRESS=""

COPY  ./  /code
WORKDIR /code

#EXPOSE 服务端口
EXPOSE 8000

#ENTRYPOINT 启动命令
RUN pip3 install -r /code/requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple  --trusted-host  pypi.tuna.tsinghua.edu.cn
CMD ["python3", "/code/Run.py"]

2.2.3 执行打包

docker  build  -t   langyage_py  . 

2.2.4 查看镜像

执行 docker images 即可查看镜像 ,即打包完成

3. 前端打包

3.1 获取nginx镜像

docker pull nginx

这一步可能比较慢, 推荐科学上网进行下载或者自己去国内网站下载Nginx的基础镜像到本地,使用Docker的Load命令加载进镜像库

3.2 项目打包

npm run build

根据自己使用的框架来选择打包命令,这里不多赘述。生成后的文件夹可以使用live-server进行测试是否正常。附live-server简易服务器的使用教程www.jianshu.com/p/a162131e2…

3.3 创建Dockerfile文件

在项目根目录下创建文件dockerfile,写入如下内容

FROM nginx //该镜像是基于nginx:latest镜像构建的
 
MAINTAINER zhangcheng //添加说明

EXPOSE 80 //对外部暴露80端口(如无配置过nginx,默认则为80端口)

COPY /build /usr/share/nginx/html //(将build下的文件复制到/usr/share/nginx/html下)

ENTRYPOINT nginx -g "daemon off;" //设定容器启动时运行nginx命令

第四步的/build根据前端打包生成的文件夹名称来设置,例如React框架搭建的项目打包生成的文件为dist,相应的第三步命令也应修改为COPY /dist

3.4 构建docker镜像

docker build -t langyage:0.0.1 .

注意不要少了最后的“.”(点)

-t是给镜像命名,.(点)是基于当前目录的Dockerfile来构建镜像

image-20201030152525359.png

3.5 查看本地镜像

docker images

image-20201030152744823.png 到这里我们的应用镜像已经创建成功,接下来,我们基于该镜像启动一个docker容器

3.6 启动docker容器测试

docker run -d -p 9090:80 --name vueTest langyage:0.0.1

image-20201030153054347.png

docker run:基于镜像启动一个容器

-d:后台方式启动

-p 9090:80: 端口映射,将宿主机的9090端口映射到容器的80端口

--name:容器名,我起的叫vueTest

langyage:0.0.1:要启动的镜像名称 :后面为版本号(如果没有可以不填)

查看启动的容器

docker ps

image-20201030153244552.png

可以看到我们的镜像目前运行在ID为b7f6c1c45f03的容器上 对外访问端口为9090 别名为vueTest

3.7 访问测试

现在我们已经启动了,访问宿主机的地址:9090就可以看到我们部署的网站了

image-20201030153458730.png

4. 镜像部署:生成tar文件

docker save -o langyage.tar langyage:0.0.1 
docker save:保存一个镜像为指定文件

-o:输出到的文件

langyage.tar: 输出后的文件名

langyage:0.0.1: 指定的镜像名称(无版本号可不填)

在同级目录下便会生成.tar文件。生成的.tar文件可以发送到服务器上。使用以下命令解压到服务器的镜像库中, 例如

docker load < langyage.tar

再使用docker run命令即可运行

docker run -d -p 9090:80 --name vueTest langyage:0.0.1

docker run:基于镜像启动一个容器

-d:后台方式启动

-p 9090:80: 端口映射,将宿主机的9090端口映射到容器的80端口

--name:容器名,我起的叫vueTest

langyage:0.0.1:要启动的镜像名称 :后面为版本号(如果没有可以不填)

5.其他说明

  • 因为一些原因,部分docker源无法很好的访问,可以修改Docker源,创建或修改 /etc/docker/daemon.json 文件
# vi /etc/docker/daemon.json
{
    "registry-mirrors": ["https://cr.console.aliyun.com/"]
}
systemctl restart docker.service
  • 另外提供一些docker的基本命令

删除docker中的镜像,我们可以使用如下命令:

docker rmi 镜像id

删除docker中的容器可以使用如下命令:

docker rm 容器id

使用如下命令可以查看当前正在运行的容器

docker ps

对于已退出的容器,可以使用如下命令进行查看:

docker ps -a