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

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势&#xff1a;专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发&#xff0c;是一款收费低廉但功能全面的Windows NAS工具&#xff0c;主打“无学习成本部署” 。与其他NAS软件相比&#xff0c;其优势在于&#xff1a; 无需硬件改造&#xff1a;将任意W…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法

树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作&#xff0c;无需更改相机配置。但是&#xff0c;一…...

进程地址空间(比特课总结)

一、进程地址空间 1. 环境变量 1 &#xff09;⽤户级环境变量与系统级环境变量 全局属性&#xff1a;环境变量具有全局属性&#xff0c;会被⼦进程继承。例如当bash启动⼦进程时&#xff0c;环 境变量会⾃动传递给⼦进程。 本地变量限制&#xff1a;本地变量只在当前进程(ba…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动

一、前言说明 在2011版本的gb28181协议中&#xff0c;拉取视频流只要求udp方式&#xff0c;从2016开始要求新增支持tcp被动和tcp主动两种方式&#xff0c;udp理论上会丢包的&#xff0c;所以实际使用过程可能会出现画面花屏的情况&#xff0c;而tcp肯定不丢包&#xff0c;起码…...

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

ssc377d修改flash分区大小

1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...

页面渲染流程与性能优化

页面渲染流程与性能优化详解&#xff08;完整版&#xff09; 一、现代浏览器渲染流程&#xff08;详细说明&#xff09; 1. 构建DOM树 浏览器接收到HTML文档后&#xff0c;会逐步解析并构建DOM&#xff08;Document Object Model&#xff09;树。具体过程如下&#xff1a; (…...

Python如何给视频添加音频和字幕

在Python中&#xff0c;给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加&#xff0c;包括必要的代码示例和详细解释。 环境准备 在开始之前&#xff0c;需要安装以下Python库&#xff1a;…...

前端开发面试题总结-JavaScript篇(一)

文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包&#xff08;Closure&#xff09;&#xff1f;闭包有什么应用场景和潜在问题&#xff1f;2.解释 JavaScript 的作用域链&#xff08;Scope Chain&#xff09; 二、原型与继承3.原型链是什么&#xff1f;如何实现继承&a…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习

禁止商业或二改转载&#xff0c;仅供自学使用&#xff0c;侵权必究&#xff0c;如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...