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来构建镜像
3.5 查看本地镜像
docker images
到这里我们的应用镜像已经创建成功,接下来,我们基于该镜像启动一个docker容器
3.6 启动docker容器测试
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:要启动的镜像名称 :后面为版本号(如果没有可以不填)
查看启动的容器
docker ps
可以看到我们的镜像目前运行在ID为b7f6c1c45f03的容器上 对外访问端口为9090 别名为vueTest
3.7 访问测试
现在我们已经启动了,访问宿主机的地址:9090就可以看到我们部署的网站了
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