当前位置: 首页 > 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’]

相关文章:

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…...

java内置的数据结构

Java语言提供了许多内置的数据结构,包括: 1. 数组(Array):数组是最基本的数据结构之一,它是一个有序的元素集合,每个元素都有一个对应的索引。在Java中,数组可以通过声明和初始化来创…...

轻松搭建FPGA开发环境:第三课——Vivado 库编译与设置说明

工欲善其事必先利其器,很多人想从事FPGA的开发,但是不知道如何下手。既要装这个软件,又要装那个软件,还要编译仿真库,网上的教程一大堆,不知道到底应该听谁的。所以很多人还没开始就被繁琐的开发环境搭建吓…...

【PostgreSQL】从零开始:(十一)PostgreSQL-Dropdb命令删除数据库

dropdb命令删除数据库 命令 [postgrespostgre-sql bin]$ dropdb --help dropdb removes a PostgreSQL database.Usage:dropdb [OPTION]... DBNAMEOptions:-e, --echo show the commands being sent to the server-f, --force try to terminate …...

UDP网络编程其他相关事项

netstat指令 netstat -an 可以查看当前主机网络情况,包括端口监听情况和网络连接情况。 netstat -an | more 可以分页显示。 要求在dos控制台下执行。 说明:(1)Listening表示某个端口在监听;(2&#xf…...

Redhat LINUX 9.3 + PG 16.1 搭建主备流复制

一直想搭建一个PG流复制,最近正好有一个新环境,操作系统是最新的,rhel 9.3,数据库是最新的 pg 16.1,借鉴了网上的步骤,尤其是小工到专家的内容,在此谢过。 1.安装环境 1)IP: 主:192.168.133.151…...

kafka设置消费者组

安装部署后 consumer.properties group.idtest-group 单机测试,自己开俩窗口,一个测试消费者,一个测试生产者(创建消息那步) 创建主题 bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --replica…...

Worker-Thread设计模式

Worker-Thread模式类似于工厂流水线,有时也称为流水线设计模式。线程池在某种意义上也算是Worker-Thread模式的一种实现,线程池初始化时创建线程类似于在流水线等待工作的工人,提交给线程池的Runnable接口类似于需要加工的产品,Ru…...

npm 安装包遇到问题的常用脚本(RequestError: socket hang up)

前言 最近在给一个基于 Electron 的开源项目做贡献,需要去安装一些 npm 库,由于众所周知的原因,经常会出现报错: npm ERR! path D:\Projects\project\node_modules\electron npm ERR! command failed npm ERR! command C:\Windo…...

活动 | Mint Blockchain 将于 2024 年 1 月 10 号启动 MintPass 限时铸造活动

MintPass 是由 Mint Blockchain 官方发行的 Mint 网络和社区的 NFT 通行证,将在 2024 年 1 月份启动限时铸造活动。今天这篇文章会着重向大家介绍即将举办的 MintPass 活动的基础信息。 MintPass 有 2 种类型: 类型 1:Mint Genesis NFT Mint…...

Android动画(四)——属性动画ValueAnimator的妙用

目录 介绍 效果图 代码实现 xml文件 介绍 ValueAnimator是ObjectAnimator的父类,它继承自Animator。ValueAnimaotor同样提供了ofInt、ofFloat、ofObject等静态方法,传入的参数是动画过程的开始值、中间值、结束值来构造动画对象。可以将ValueAnimator看…...

C语言飞机大战

一、前言 [设计难度 : ★☆☆☆☆ [参考书籍:《C语言课程设计与游戏开发实践教程》 [主要涉及知识:函数封装 循环判断语句 [程序运行效果图: [主要的游戏功能: 通过按键’w’,‘s’,‘a’,d’分别实现飞机的上下左右移动 按空格…...

js 原型 和 原型链

function Person(name,age){ this.name name this.age age } var p new Person(张三,11) //创建构造函数的时候,解析器会自动为构造函数创建prototype属性,prototype属性对应的对象就是原型对象 // prototype 翻译为 原…...

如何利用SD-WAN节省运维成本和简化运维工作?

在当今数字化时代,企业对于网络的要求越来越高,需要保障网络的安全性、可靠性和灵活性。同时,随着企业的上云和远程办公等需求的增加,传统的WAN网络已经无法满足企业的需求。因此,SD-WAN技术应运而生。 SD-WAN节省运维…...

在工作中使用CHAT提高效率

问CHAT:数智时代与中国情境下的营销管理创新方向:市场营销(管理)的使命 CHAT回复:市场营销(管理)的使命可以被概述为寻找、吸引和保留消费者。通过识别、满足甚至超越消费者期望,以实…...

Maven 项目的三种打包方式与 pom.xml 文件中项目描述

目录&#xff1a; 定义项目的信息 本项目描述相关标签<parent> 标签<relativePath/> 标签<scope> 标签 Maven 三种打包方式 JARWARPOM 原文链接 — —...

【普中】基于51单片机简易计算器数码管显示设计( proteus仿真+程序+实物演示+讲解视频)

【普中开发板】基于51单片机简易计算器数码管显示设计( proteus仿真程序实物演示讲解视频&#xff09; Proteus 仿真&#xff1a;Proteus 8.16(有低版本) 程序编译器&#xff1a;keil 4/keil 5 编程语言&#xff1a;C语言 设计编号&#xff1a;P04 1. 主要功能&#xff1a…...

【Android】DeepLink

官方文档&#xff1a;创建指向应用内容的深层链接 Intro to Deep Linking on Android What is Deep linking? Deeplinks are a concept that help users navigate between the web and applications. They are basically URLs which navigate users directly to the specif…...

微服务Redis-Session共享登录状态

一、背景 随着项目越来越大&#xff0c;需要将多个服务拆分成微服务&#xff0c;使代码看起来不要过于臃肿&#xff0c;庞大。微服务之间通常采取feign交互&#xff0c;为了保证不同微服务之间增加授权校验&#xff0c;需要增加Spring Security登录验证&#xff0c;为了多个服务…...

30道C++ 基础高频题整理(附答案背诵版)

1. C和C有什么区别&#xff1f; C是C语言的超集&#xff08;我看网上很多文章说这是不对的&#xff09;&#xff0c;这意味着几乎所有的C程序都可以在C编译器中编译和运行。然而&#xff0c;C引入了许多新的概念和特性&#xff0c;使得两种语言在一些关键点上有显著的区别。 …...

为什么你需要ZXPInstaller?3分钟搞定Adobe扩展安装难题

为什么你需要ZXPInstaller&#xff1f;3分钟搞定Adobe扩展安装难题 【免费下载链接】ZXPInstaller Open Source ZXP Installer for Adobe Extensions 项目地址: https://gitcode.com/gh_mirrors/zx/ZXPInstaller 还在为Adobe扩展插件安装而烦恼吗&#xff1f;每次看到.z…...

语音增强与跨平台部署:DeepFilterNet全场景技术指南

语音增强与跨平台部署&#xff1a;DeepFilterNet全场景技术指南 【免费下载链接】DeepFilterNet Noise supression using deep filtering 项目地址: https://gitcode.com/GitHub_Trending/de/DeepFilterNet 在远程会议中被背景噪音淹没&#xff1f;多语言语音通信时因音…...

3分钟掌握视频转PPT终极技巧:快速提取幻灯片内容

3分钟掌握视频转PPT终极技巧&#xff1a;快速提取幻灯片内容 【免费下载链接】extract-video-ppt extract the ppt in the video 项目地址: https://gitcode.com/gh_mirrors/ex/extract-video-ppt 还在为会议录屏中的PPT幻灯片提取而烦恼吗&#xff1f;extract-video-pp…...

HarmonyOS6 半年磨一剑 - RcTextarea 组件状态管理与禁用只读机制

文章目录 前言一、焦点状态机1.1 isFocused 驱动的 UI 变化1.2 焦点事件处理流程 二、禁用与只读的本质区别2.1 技术实现对比2.2 视觉表现差异2.3 清空按钮的保护逻辑 三、清空按钮的智能显示策略3.1 双重触发模式3.2 清空按钮的渲染位置3.3 清空操作的完整流程 四、自动聚焦与…...

保姆级教程:用Python和Open3D玩转激光雷达点云与图像融合(附KITTI数据集实战)

从零实现激光雷达与相机融合&#xff1a;Open3DKITTI实战指南 当激光雷达的精确测距遇上相机的丰富纹理&#xff0c;自动驾驶感知系统便拥有了"立体视觉"——这正是多模态融合技术的魅力所在。本文将带您用Python和Open3D构建一个完整的点云-图像融合流水线&#xff…...

终极macOS菜单栏管理指南:从杂乱到整洁的完美蜕变 [特殊字符]

终极macOS菜单栏管理指南&#xff1a;从杂乱到整洁的完美蜕变 &#x1f680; 【免费下载链接】Ice Powerful menu bar manager for macOS 项目地址: https://gitcode.com/GitHub_Trending/ice/Ice macOS菜单栏是每个苹果用户每天都要面对的重要界面&#xff0c;但随着安…...

AI图像放大神器Upscayl:告别模糊时代的终极解决方案

AI图像放大神器Upscayl&#xff1a;告别模糊时代的终极解决方案 【免费下载链接】upscayl &#x1f199; Upscayl - Free and Open Source AI Image Upscaler for Linux, MacOS and Windows built with Linux-First philosophy. 项目地址: https://gitcode.com/GitHub_Trendi…...

从零手写感知机到MindSpore实战:一份完整的鸢尾花分类作业避坑指南

从零手写感知机到MindSpore实战&#xff1a;一份完整的鸢尾花分类作业避坑指南 鸢尾花分类是机器学习入门的经典案例&#xff0c;但对于初学者来说&#xff0c;从理论推导到框架实战往往充满挑战。本文将带你完整走通这条学习路径&#xff1a;先手写感知机理解算法本质&#xf…...

ms-swift框架实战:从零构建高效Embedding微调流水线

1. 为什么需要定制Embedding模型&#xff1f; 在智能客服问答匹配这类场景中&#xff0c;预训练的通用Embedding模型往往表现不佳。我去年做过一个电商客服项目&#xff0c;直接用开源Embedding模型处理"怎么退货"这类问题时&#xff0c;会把"如何退款"、&…...

NoFences:免费开源的Windows桌面图标分区管理工具终极指南

NoFences&#xff1a;免费开源的Windows桌面图标分区管理工具终极指南 【免费下载链接】NoFences &#x1f6a7; Open Source Stardock Fences alternative 项目地址: https://gitcode.com/gh_mirrors/no/NoFences 当你的Windows桌面被各种文件、快捷方式和应用程序图标…...