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

人生乱弹 2年前 (2023) admin
9 0

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 inode app.js 这样会一直占用控制台,替换成 nohup node app.js &之后,ps -aux 看到 有一个程序命令为 node app.js 的进程测试 cur 127.0.0.1:3000 正常 退出容器,使用物理机ip和端口测试,访问正常
4 )测试迭代
修改源代码后,重启
杀掉之前的进程
ps -aux 找到 node进程的 PIDkill -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 获取容器iddocker exec -it 容器id /bin/bash
ls 看到我们部署后的目录文件
docker 部署 beego 项目
1 )部署编译好的golang项目
源码目录
src
go.modmain.go
main.go
package main

import (
"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=linuxset GOARCH=amd64go 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 获取容器iddocker 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/beegodemo

ENV GO111MODULE=on
ENV GOPROXY=https://goproxy.cn

RUN 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 goimage3docker ps 查看容器id直接物理机访问:127.0.0.1:8082 正常除了 ENTRYPOINT [‘bee’, ‘run’] 这种方式运行,还可以
RUN bee packENTRYPOINT [‘nohup’, ‘./beepkg’]

文章来源

版权声明:admin 发表于 2023年12月18日 pm3:01。
转载请注明:Docker笔记:简单部署 nodejs 项目和 golang 项目 | 银库

相关文章

本站主题由 OneNav 一为主题强力驱动