当前位置: 首页 > news >正文

Docker笔记:简单部署 nodejs 项目和 golang 项目

docker 简单的维护 nodejs 项目容器

1 )Nodejs 程序

const express = require('express')
const app = express()app.get('/', (req, res) => {res.send('首页')
})app.get('/news', (req, res) => {res.send('news')
})// dokcer 做端口映射不要指定ip
app.listen(3000)

2 ) 运行镜像

  • docker pull node 拉取nodejs镜像
  • docker run -it -d --name mynode -p 3000:3000 -v /root/www:root/ node /bin/bash

3 )维护容器

  • docker ps 查看
  • docker inspect 容器id | grep root 查看容器的部署情况
  • docker exec -it 容器id /bin/bash 进入容器目录
    • 再次进入项目目录,安装依赖 cnpm i
    • node app.js 这样会一直占用控制台,替换成 nohup node app.js &
    • 之后,ps -aux 看到 有一个程序命令为 node app.js 的进程
    • 测试 cur 127.0.0.1:3000 正常
  • 退出容器,使用物理机ip和端口测试,访问正常

4 )测试迭代

  • 修改源代码后,重启
    • 杀掉之前的进程
      • ps -aux 找到 node进程的 PID
      • kill -9 PID
    • 重启
      • nohup node app.js &
  • 验证迭代

dockerfile 部署 nodejs 程序

1 )编写 Dockerfile

FROM node
COPY . /root/nodedemo # 将当前项目所有文件拷贝到 /root/nodedemo目录中
WORKDIR /root/nodedemo
RUN npm i cnpm -g --registry=https://registry.npm.taobao.org
RUN cnpm i
ENTRYPOINT node app.js
EXPOSE 3000
  • 注意,上面的执行顺序,先拷贝,再安装依赖

2 ) 构建镜像

  • 构建镜像 $ docker build -t nodedemo:v1.0.0 .

3 ) 运行容器

  • 运行容器
    • $ docker run -itd -p 3000:3000 nodedemo:v1.0.0

4 ) 检查

  • 物理机内检查: curl 127.0.0.1:3000 正常
  • 获取物理机ip: ip addr
  • 客户端访问: xxx.xxx.xxx.xxx:3000 正常
  • docker ps 获取容器id
  • docker exec -it 容器id /bin/bash
    • ls 看到我们部署后的目录文件

docker 部署 beego 项目

1 )部署编译好的golang项目

源码目录

  • src
    • go.mod
    • main.go

main.go

package mainimport ("fmt""net/http"
)func handlerHello(w http.ResponseWriter, r *http.Request) {fmt.Fprintf(w, "hello docker")
}func main() {http.HandleFunc("/", handlerHello)http.ListenAndServe(":8080", nil)
}
  • 运行: go run main.go
  • 编译: go build
    • 生成 goweb.exe (用windows下的编译来准备)
  • 运行编译后的: 双击 goweb.exe 或 ./goweb
  • 在 windows上编译成 linux的可执行文件
    • set GOOS=linux
    • set GOARCH=amd64
    • go build -o “filename”,直接 go build 也可以

Dockerfile

FROM centos
COPY . /root/godemo # 将当前项目拷贝到容器内的目录
WORKDIR /root/godemo
EXPOSE 8080
ENTRYPOINT ["./goweb"]
  • go build -t goimage .

  • docker images 获取刚编译好的 goimage 的 imageId

  • docker run -itd --name my_go_image -p 8080:8080 imageId

  • docker ps 获取当前容器id

  • docker exec -it 容器id /bin/bash

  • curl 127.0.0.1:8080 访问容器上的go应用,正常

  • exit 退出到物理机

  • curl 127.0.0.1:8080 访问物理机上的go应用,正常

  • 注意:

    • 如果上述映射端口失败,重启docker: systemctl restart docker
  • 之后走正常的,将web应用打包镜像,运行生成容器,访问ip

    • 如果访问不了,关闭防火墙
    • 客户端可正常访问
  • 注意,golang 应用 和 beego框架应用都类似

2 )部署未编译好的golang项目和beego项目

  • 比上面就多了一步编译
  • 在linux上要安装golang, 才能运行go build

安装golang的方法1

  • 在centos中安装golang, 借助上面的方法

安装golang的方法2

  • 直接使用 golang 镜像
  • 我们采用这种方式

Dockerfile

FROM golang
ADD . /root/goweb
WORKDIR /root/goweb
RUN go build # 执行编译
EXPOSE 8080
ENTRYPOINT ['./goweb']
  • 注意,上述 WORKDIR 与 RUN 的顺序
  • docker build -t goimage2 . 构建镜像
  • docker run -itd --name mygoimage2 -p 8081:8080 goimage2 启动容器
  • docker ps 获取容器id
  • docker exec -it 容器id /bin/bash
    • go nev 看go的环境
    • curl 127.0.0.1:8080 可正常访问
  • exit退出后,在物理机访问:127.0.0.1:8081 可正常访问

部署未编译的 beego 项目

  • bee --help 查看 beego 命令
    • bee dockerize 可创建一个dockerfile
  • beego 提供的 dockerfile 可能需要修改
FROM golang
COPY . /root/beegodemo
WORKDIR /root/beegodemoENV GO111MODULE=on
ENV GOPROXY=https://goproxy.cnRUN go get github.com/beego/bee
EXPOSE 8082
ENTRYPOINT ['bee', 'run']
  • docker build -t goimage3 .
  • docker images 查看刚构建好的镜像
  • docker run -itd --name mybeego03 -p 8082:8082 goimage3
  • docker ps 查看容器id
  • 直接物理机访问:127.0.0.1:8082 正常
  • 除了 ENTRYPOINT [‘bee’, ‘run’] 这种方式运行,还可以
    • RUN bee pack
    • ENTRYPOINT [‘nohup’, ‘./beepkg’]
http://www.lryc.cn/news/262317.html

相关文章:

  • java内置的数据结构
  • 轻松搭建FPGA开发环境:第三课——Vivado 库编译与设置说明
  • 【PostgreSQL】从零开始:(十一)PostgreSQL-Dropdb命令删除数据库
  • UDP网络编程其他相关事项
  • Redhat LINUX 9.3 + PG 16.1 搭建主备流复制
  • kafka设置消费者组
  • Worker-Thread设计模式
  • npm 安装包遇到问题的常用脚本(RequestError: socket hang up)
  • 活动 | Mint Blockchain 将于 2024 年 1 月 10 号启动 MintPass 限时铸造活动
  • Android动画(四)——属性动画ValueAnimator的妙用
  • C语言飞机大战
  • js 原型 和 原型链
  • 如何利用SD-WAN节省运维成本和简化运维工作?
  • 在工作中使用CHAT提高效率
  • Maven 项目的三种打包方式与 pom.xml 文件中项目描述
  • 【普中】基于51单片机简易计算器数码管显示设计( proteus仿真+程序+实物演示+讲解视频)
  • 【Android】DeepLink
  • 微服务Redis-Session共享登录状态
  • 30道C++ 基础高频题整理(附答案背诵版)
  • 【Spark面试】Spark面试题答案
  • Axure的动态面板
  • 【STM32】STM32学习笔记-对射式红外传感器计次 旋转编码器计次(12)
  • 后端项目操作数据库-中枢组件Service调用Mapper实现增删改查-实例
  • kafka学习笔记--节点的服役与退役
  • 2023-12-16:用go语言,给定整数数组arr,求删除任一元素后, 新数组中长度为k的子数组累加和的最大值。 来自字节。
  • libxls - 编译
  • 自建私有git进行项目发布
  • 华为HCIP认证H12-821题库上
  • Web安全漏洞分析—文件包含
  • C++入门【9-C++循环】