Docker笔记:简单部署 nodejs 项目和 golang 项目
2023-12-13 13:26:21
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 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=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/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 goimage3
- docker ps 查看容器id
- 直接物理机访问:127.0.0.1:8082 正常
- 除了 ENTRYPOINT [‘bee’, ‘run’] 这种方式运行,还可以
- RUN bee pack
- ENTRYPOINT [‘nohup’, ‘./beepkg’]
文章来源:https://blog.csdn.net/Tyro_java/article/details/134969341
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!