当前位置: 首页 > 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;使得两种语言在一些关键点上有显著的区别。 …...

2026年,揭秘那些真正安全的原生态食材厂家你不可不知的秘密

随着人们生活水平的提升以及对健康的日益重视&#xff0c;选择真正安全的原生态食材已经成为许多人购买食物的标准。但市场的繁杂使得甄别真正安全的食材厂家变得愈加困难。今天&#xff0c;我将通过几个关键角度&#xff0c;为大家揭秘那些真正安全的原生态食材厂家的秘密&…...

录音会议纪要整理不同使用场景,实用口碑选择建议

针对不同场景的录音整理需求&#xff08;短录音、中长录音、长内容深度整理&#xff09;&#xff0c;本文基于实际使用体验&#xff0c;分享不同场景下的工具选择建议与使用心得。一、场景一&#xff1a;短录音&#xff08;15-60分钟&#xff0c;发音清晰&#xff09;典型场景&…...

多智能体谈判系统:Agent 如何通过博弈达成最优交易价格?

多智能体谈判系统&#xff1a;Agent 如何通过博弈达成最优交易价格&#xff1f;关键词 多智能体系统、自动谈判、博弈论、纳什均衡、帕累托最优、双边/多边谈判、强化学习谈判、动态定价 摘要 想象一个没有人类中介的世界&#xff1a;电商平台上的智能客服自动和批发商砍价、供…...

深度解析HS2-HF Patch:从技术框架到创作工具链的完整升级方案

深度解析HS2-HF Patch&#xff1a;从技术框架到创作工具链的完整升级方案 【免费下载链接】HS2-HF_Patch Automatically translate, uncensor and update HoneySelect2! 项目地址: https://gitcode.com/gh_mirrors/hs/HS2-HF_Patch 你是否曾因Honey Select 2的原版体验受…...

真可用!美团数字人模型开源,MV、电商等统统拿下

美团开源的数字人视频生成框架 LongCat-Video-Avatar 刚刚更新到 1.5 版本。是真能用。这版更新把音频编码器换了&#xff0c;推理步数砍到8步&#xff0c;在770人、13240条主观评分的大规模评测里&#xff0c;雷达图面积全面领先。音频编码器换血&#xff0c;8步出图LongCat-V…...

uWSGI目录穿越漏洞CVE-2018-7490深度利用与防御实战

1. 这不是“读文件”那么简单&#xff1a;uWSGI目录穿越在真实攻防链中的定位与误判代价你刚在Vulfocus靶场里跑通了CVE-2018-7490的PoC&#xff0c;用curl "http://target:8080/?p../../../../etc/passwd"成功读出了root:x:0:0:root:/root:/bin/bash&#xff0c;截…...

基于GSM与Arduino的远程控制系统:DIY电话控制与短信报警方案

1. 项目概述与核心价值如果你曾经想过&#xff0c;在离家几十公里外&#xff0c;仅凭一部普通的手机&#xff0c;就能远程打开家里的车库门、查看门窗是否关好&#xff0c;甚至在异常情况发生时让系统自动打电话给你报警&#xff0c;那么这个基于GSM的远程控制系统项目&#xf…...

我们公司全员把 Cursor 换成了自研的 全开源AtomCode

【引子】这是一篇实录——一位 CTO 用 28 天,用 Claude GLM 双模型调度,造出了一个让全公司放弃 Cursor 的工具。然后我意识到我们正在经历的事情,比"换工具"大得多。【读者承诺】接下来 15 分钟,你会拿到三件东西:一个真实案例(28 天 1,146 commits 是怎么做出来的…...

Windows开机自动全屏打开指定网页?一个快捷方式参数就搞定(Chrome/Edge/Firefox教程)

Windows开机自动全屏展示网页的终极方案每次开机都要手动打开浏览器、输入网址、切换全屏模式&#xff1f;这种重复操作不仅浪费时间&#xff0c;还容易在重要演示时手忙脚乱。想象一下&#xff1a;电脑启动后自动全屏显示你的仪表盘、会议日程或是监控大屏&#xff0c;整个过程…...

Go开发者必备:circuitbreaker API全解析与最佳实践指南 [特殊字符]

Go开发者必备&#xff1a;circuitbreaker API全解析与最佳实践指南 &#x1f680; 【免费下载链接】circuitbreaker Circuit Breakers in Go 项目地址: https://gitcode.com/gh_mirrors/circ/circuitbreaker 作为一名Go开发者&#xff0c;你是否经常遇到远程服务调用失败…...