1. 程式人生 > >docker構建nodejs映象,rancher管理nodejs應用

docker構建nodejs映象,rancher管理nodejs應用

構建映象

docker常見操作
1 構建映象 一般使用Dockerfile檔案配置構建內容
構建基礎參考:https://www.cnblogs.com/jie-fang/p/7927643.html 
下面是一個nodejs執行環境的docker映象
FROM node:6.12.0-alpine
COPY ./ /tg_backend
RUN rm -fr /tg_backend/__files/*;
RUN rm -fr /tg_backend/logs/*;
RUN rm -fr /tg_backend/uploads/*;
RUN rm -fr /tg_backend/.git
# 沒有下面語句可能會保錯,參考https://blog.csdn.net/wang805447391/article/details/77416109
RUN npm config set unsafe-perm true RUN npm install -g pm2 --registry=https://registry.npm.taobao.org # 因為在容器裡面啟動是用pm2啟動的,所以需要安裝pm2 以及pm2-docker RUN npm install -g pm2-docker #RUN cd /tg_backend ; npm install EXPOSE 8201 CMD ["/bin/sh","/tg_backend/docker_start.sh"] 基於node6基礎映象,刪除了當前資料夾下一些無效檔案以及資料夾,配置npm ,安裝pm2 pm2-docker 最後向外暴露8201
埠,結尾CMD執行指令碼(每個Dockerfile只能有一個CMD指令生效) docker_start.sh 檔案 #!/bin/sh nohup node /app/scripts/task.js > /tmp/task.log 2>&1 & pm2-docker start /app/app.js -i 0 構建路徑 ![這裡寫圖片描述](https://img-blog.csdn.net/20180908124633190?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTAxMjk5ODU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70
) 構建檔案就在tg_backend 和 tg_cms裡面 (這是兩個專案,需要構建兩個映象)構建指令碼合併在tg_backend裡面 進入tg_backend ![這裡寫圖片描述](https://img-blog.csdn.net/20180908124854567?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTAxMjk5ODU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70) 執行tag.sh指令碼,指令碼內容如下 #!/bin/bash #設定標籤 tag=$1 echo "build backend......." #清空臨時資料夾 rm -fr /tmp/docker mkdir -p /tmp/docker #將當前專案檔案同步複製到臨時構建目錄,可以指定去除某些目錄或檔案 rsync -av /opt/product/tg_backend/ /tmp/docker/tg_backend --exclude __files --exclude .git --exclude uploads --exclude logs rsync -av /opt/product/tg_cms/ /tmp/docker/tg_cms --exclude __files --exclude .git --exclude uploads --exclude logs # cp -fr /opt/product/tg_backend /tmp/docker # rm -fr /tmp/docker/tg_backend/logs/* # rm -fr /tmp/docker/tg_backend/.git/* # rm -fr /tmp/docker/tg_backend/__files/* # rm -fr /tmp/docker/tg_backend/uploads/* # cp -fr /opt/product/tg_cms /tmp/docker # rm -fr /tmp/docker/tg_cms/logs/* # rm -fr /tmp/docker/tg_cms/.git/* #執行docker構建命令(需要先按照docker)構建過程中執行了Dockerfile 並且設定映象標籤(映象標籤要滿足:xxx:yy格式 並且標籤不要太長) cmd="docker build -f /tmp/docker/tg_backend/docker/Dockerfile /tmp/docker/tg_backend/ -t tgbackend:yq"${tag} eval $cmd echo "build tgbackend success!!!!!" echo "tag tgbackend......" #修改剛才構建的映象標籤名為latest表示最新 cmd="docker tag tgbackend:yq"${tag}" tgbackend:latest" eval $cmd echo "tag backend end !!!" echo "build tgcms......" cmd="docker build -f /tmp/docker/tg_cms/docker/Dockerfile /tmp/docker/tg_cms/ -t tgcms:yq"${tag} eval $cmd echo "build tgcms success!!!!!" echo "tag tgcms......" cmd="docker tag tgcms:yq"${tag}" tgcms:latest" eval $cmd echo "tag tgcms end!!!!!" #刪除臨時構建目錄 rm -fr /tmp/docker/* 執行tag.sh 如果提示bash: ./a.sh: /bin/bash^M 沒有檔案或路徑,需要執行busybox dos2unix tag.sh 參考 https://blog.csdn.net/youzhouliu/article/details/79051516 整個構建路徑: ./tag.sh ---> Dockerfile ---> docker_start.sh

配置docker

安裝docker
https://blog.csdn.net/bingzhongdehuoyan/article/details/79411479
https://yeasy.gitbooks.io/docker_practice/content/install/ubuntu.html
安裝rancher
https://blog.csdn.net/tianyaleixiaowu/article/details/75116394
開放rancher對外訪問介面(ufw allow 8000以及阿里雲安全配置)
在rancher管理介面 配置使用者,新增主機 ,新增執行docker的物理主機
最後新增應用,選擇docker-compose.yml檔案和rancher-compose.yml
配置rancher-compose.yml rancher管理配置檔案

version: '2'
services:
  cms:
    scale: 1
    start_on_create: true
  redis:
    scale: 1
    start_on_create: true
  backend-2:
    scale: 1
    start_on_create: true

docker-compose.yml應用執行環境配置
tgcms:latest和tgbackend:latest是映象+標籤(應該先在docker裡面構建這些映象)

version: '2'
services:
  cms:
    image: tgcms:latest
    environment:
      API_URL: http://39.107.77.94/rest
      BASE_URL: http://39.107.77.94
    network_mode: bridge
    volumes:
    - /home/logs/agent/tg_cms/logs:/app/logs
    - /svr/agent/tg_cms/tg_cms:/app
    - /etc/localtime:/etc/localtime
    dns:
    - 114.114.114.114
    ports:
    - 8202:8202/tcp
    labels:
      io.rancher.scheduler.affinity:host_label: agent=1

  backend:
    image: tgbackend:latest
    environment:
      MYSQL_DATABASE: tg
      MYSQL_HOST: 39.107.77.94
      MYSQL_PASSWORD: tg123456
      MYSQL_PORT: '3306'
      MYSQL_USER: tg
      NODE_ENV: production
      REDIS_HOST: 39.107.77.94
      REDIS_PORT: '6379'
    network_mode: bridge
    volumes:
    - /home/logs/agent/tg_backend/logs:/app/logs
    - /svr/agent/tg_backend/__files:/app/__files
    - /svr/agent/tg_backend/tg_backend:/app
    - /etc/localtime:/etc/localtime
    dns:
    - 114.114.114.114
    ports:
    - 8201:8201/tcp
    labels:
      io.rancher.scheduler.affinity:host_label: agent=1

然後啟動服務,在yml檔案裡面還可以配置應用需要連結的應用,比如Redis ,MySQL這些(本例直接使用外部資料庫和Redis)

管理容器

1 列出docker映象
docker images
2 列出執行的映象
docker ps -a
3 停止正在執行的容器
docker stop 83ce3514ec50 #後面是容器ID
4 刪除容器
docker rm 83ce3514ec50 #容器是執行狀態的映象
5 刪除映象,刪除映象前需要先刪除容器,停止容器(i表示image)
docker rmi 83ce3514ec50 
6 檢視docker容器啟動日誌
實時檢視docker容器日誌
sudo docker logs -f -t --tail 行數 容器名