版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/muumian123/article/details/90137749
最近公司要求搞一个 dashboard ,前端用 Vue.js 框架,后端用 Go 语言写的。在决定用 Docker 进行部署的时候,遇到了很多问题,特此记录。
由于这个项目需要使用 AWS 中的 DynamoDB,因此需要先在 Docker 的 image 中安装 aws-cli,然而 aws-cli 只能依赖 Python 进行安装。因为我考虑先从运行一个 Ubuntu 基础镜像(如果是 Centos7,会有很多命令不一样,但是思路都是一样的),再在这个容器中安装好所需要的 nodejs、Python 环境,之后安装好 aws-cli,并对其进行 aws 账号的配置。这样之后,我们就有了一个拥有 aws 账号的镜像。具体步骤如下:
# 启动并进入 Ubuntu 基础镜像
docker run -it ubuntu /bin/bash
#更新 apt-get,防止出现包安装不上的情况
apt-get update
apt-get upgrade
# 安装 python
apt-get install python3.6
ln -s /usr/bin/python3.6 /usr/bin/python
apt-get install python3-pip
ln -s /usr/bin/pip3 /usr/bin/pip
# 安装 aws-cli
pip install awscli --upgrade --user
# 安装 vim
apt-get install vim
# 设置 aws-cli 路径
vim /root/.bashrc
export PATH=/root/.local/bin:$PATH
source /root/.bashrc
# 配置 aws 账号
aws configure
# 安装 nodejs
apt-get install nodejs
# 退出容器
exit
# 将安装好环境的容器重新打包成新的镜像
docker commit -m"install package" <container-id> aws-node:0.0.1
至此我们就有了一个拥有 aws 账号的镜像 “aws-node:0.0.1”。接下来,我们将以这个镜像为基础镜像,重新构建下一个用于启动 nodejs 和 GO 程序的镜像。编写 Dockerfile 文件如下:
FROM aws-node:0.0.1
RUN mkdir -p /app
WORKDIR /app
COPY . /app
ENV AWS_table=XXX
RUN chmod +x /app/service.sh
EXPOSE 8080 # 前端页面端口
EXPOSE 3000 # 后端端口
CMD /app/service.sh
由于要在 container 里先后启动前后端进程,然而每个 Dockerfile 中只允许出现一个 CMD 命令,因此我将需要运行的全部命令放在了一个脚本文件 “service.sh” 里,如下所示:
#!/bin/sh
curl -o- -L https://yarnpkg.com/install.sh | bash # 安装 yarn
$HOME/.yarn/bin/yarn install # 安装 vue 项目依赖包
env GIN_MODE=release ./service > service.log & # 在后台启动后端(已将go写的后端编译成二进制文件)
$HOME/.yarn/bin/yarn serve --host 0.0.0.0 # 启动前端(注意必须指定 --host 0.0.0.0)
之后是常规流程,先 build image(切换至项目所在目录):
docker build -t dashboard:0.0.1 .
再启动 container:
docker run -d -p 8000:8080 -p 3000:3000 dashboard:0.0.1
之后浏览器输入“http://<your-ip>:8000” 就可以看到页面啦!