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’] 
 
                            