Docker Dockerfile docker-compose.yml deploy-dev.yml

Docker

安装

本地安装

测试机安装

镜像命令

  • docker images
  • docker pull 镜像名 # docker pull nginx
  • docker rmi 镜像ID
  • docker build 镜像名 . # 基于Dockerfile
  • docker image prune # 清楚镜像Id为的镜像

容器命令

  • docker ps -a
  • docker start 容器ID
  • docker stop 容器ID
  • docker rm 容器ID
  • docker logs 容器ID
  • docker inspect 容器ID
  • docker exec -it 容器ID # 进入控制台

容器运行

* docker run -p 81:80 -d -v /Users/wangJK/Desktop/blog/code/html:/usr/share/nginx/html --name nginx-test nginx
* -p 端口映射
* -d 后台运行
* -v 文件映射: nginx 是一个容器,里面有一块index.html 指向80端口,宿主机端口81端口映射80端口,文件映射到某个新的地方的index.html, 这样容器本身就从一个容器变成了一个服务
* --name 容器名
复制代码

Dockerfile

  • 一个简单的配置文件,描述如何构建一个新的image镜像
  • 必须是Dockerfile 这个文件名, 必须在项目的根目录

node server示例

  FROM node:14
  LABEL maintainer=wangJK@qq.com
  WORKDIR /app  # 创建一个工作目录
  COPY . . 
  # 设置时区
  RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
  # 安装
  RUN npm set registry https://registry.npm.taobao.org
  RUN npm i
  # 启动 阻塞控制台, 否则这个docker 就不会持续进行中
  CMD echo $SERVER_NAME && echo $AUTHOR_NAME && npm run pro-dev && npx pm2 log 

  # 环境变量
  ENV SERVER_NAME="biz-editor-server"
  ENV AUTHOR_NAME="shuangyue"
复制代码

web 示例

  # build stage
  FROM node:12-alpine as build-stage
  LABEL maintainer=wangJK@qq.com
  # 创建一个工作目录
  WORKDIR /app
  COPY . .
  RUN npm install cnpm -g --no-progress --registry=https://registry.npm.taobao.org
  RUN cnpm install --no-progress
  RUN npm run build
  # production stage
  FROM nginx:stable-alpine as production-stage
  COPY --from=build-stage /app/dist /usr/share/nginx/html
  EXPOSE 80
  CMD ["nginx", "-g", "daemon off;"]
复制代码

构建镜像

  • docker build server-admin .
  • docker build web-web .

基于构建的镜像创建一个容器,并运行

  • docker run -p 8081:3000 –name server-test server-admin
  • docker run -p 8082:80 –name web-test web-web

docker-compose

安装

本地安装

  • 本地安装完docker之后可以直接使用
  • docker-compose version # 查看本本

测试机安装

背景

  • docker 只是一个容器 docker-compose 可以理解为一个组合容器
  • 比方说上面我们运行的server-admin 容器, 它里面会依赖其他服务比方说mongo、mysql、redis等, 如果是使用docker,那岂不是要一个一个的运行,那是否可以有一种解决方案,将它们一块打个包呢

容器命令

  • docker-compose ps
  • docker-compose up -d
  • docker-compose down

构建镜像

  • docker-compose build 名字 # 构建

docker-compose.yml

* 配置文件
复制代码

示例

  version: '3'
  services:
      editor-server: # service name
          build:
              context: .
              dockerfile: Dockerfile
          image: editor-server
          container_name: editor-server
          ports:
              - 8081:3000
      editor-redis:
          image: redis
          container_name: editor-redis
          ports:
              - 6378:6379
          environment:
              - TZ=Asia/Shanghai # 设置时区
      editor-mongo:
          image: mongo
          container_name: editor-mongo
          restart: always
          volumes:
              - '.docker-volumes/mongo/data:/data/db' # 数据持久化
          environment:
              - MONGO_INITDB_DATABASE=myblob # 数据库
              - TZ=Asia/Shanghai
          ports:
              - '27016:27017'
      editor-mysql:
          image: mysql
          container_name: editor-mysql
          restart: always # 出错则重启
          privileged: true # 高权限,执行下面的 mysql/init
          command: --default-authentication-plugin=mysql_native_password # 远程访问
          ports:
              - 3305:3306 # 宿主机可以用 127.0.0.1:3305 即可连接容器中的数据库,和 redis 一样
          volumes:
              - .docker-volumes/mysql/log:/var/log/mysql # 记录日志
              - .docker-volumes/mysql/data:/var/lib/mysql # 数据持久化
              - ./mysql/init:/docker-entrypoint-initdb.d/ # 初始化 sql
          environment:
              - MYSQL_DATABASE=koa2_weibo_db # 初始化容器时创建数据库
              - MYSQL_ROOT_PASSWORD=wjk*******
              - TZ=Asia/Shanghai # 设置时区
复制代码
### 构建镜像
* docker-compose build editor-server
复制代码

发布测试机

创建work 账户

添加work 权限

  • whereis sudoers
  • chmod u+w /etc/sudoers
  • vim /etc/sudooers
    • 找到 root ALL=(ALL) ALL
    • 下面添加work ALL=(ALL) ALL
  • chmod u-w /etc/sudoers
  • exit
  • 使用work登录测试机,驶入su, 输入root账号的密码, 即可拥有【超级权限】

登录信任

* 使用你刚创建的work账户登录服务 ssh work@47.94.***.**
* touch ~/.ssh/authorized_key  # 创建文件
* chmod 700 ~/.ssh         # 修改文件夹权限
* chmod 600 ~/.ssh/authorizes_key #将本机的id_rsa.pub 内容粘贴进去
* exit
* 此时 可以使用免密登录了
复制代码

利用work 登录测试机 安装git

  • yum install git
  • git –version

测试机部署借助GitHub actiosn

  • .github/workflows/deploy-dev.yml
name: test

on:
    push:
        branches:
            - master
        paths:
            - '.github/workflows/**'
            - '__test__/**'
            - 'src/**'
            - 'Dockerfile'
            - 'docker-compose.yml'
            - 'bin/*'


jobs:
    deploy-test:
        runs-on: ubuntu-latest # 是在什么操作环境下使用

        steps:
            - uses: actions/checkout@v2 # 第三方actios 把代码拉下来 相当于git pull
            - name: set ssh key # 临时设置ssh key 之前说的登录信任
              run: |
                  mkdir -p ~/.ssh/ # 将私钥给这个运行环境ubuntu-latest
                  echo "${{secrets.WFP_ID_RSA}}" > ~/.ssh/id_rsa    # secret 在这里配置 https://github.com/imooc-lego/biz-editor-server/settings/secrets
                  chmod 600 ~/.ssh/id_rsa # 加一个权限
                  ssh-keyscan "47.94.***.**" >> ~/.ssh/known_hosts
            - name: deploy # 部署
              run: |
                  ssh work@47.94.**.** " # 限免这三步现在测试机上自己完成, 这样就相当于测试机上有我们的仓库源代码
                    # 【注意】用 work 账号登录,手动创建 /home/work/wjk-lego 目录
                    # 然后 git clone https://username:password@github.com/wjk-lego/biz-editor-server.git -b master (私有仓库,使用 github 用户名和密码)
                    # 记得删除 origin ,否则会暴露 github 密码

                    # 上面三步是基础, 之后我们每次提交代码到master 就会部署到测试机上
                    cd /home/work/wjk-lego/github-action-test;
                    git remote add origin https://${{secrets.WFP_USERNAME}}:${{ secrets.WWFP.PASSWORD}}@github.com/${{secrets.WFP_USERNAME}}/github-action-test.git;
                    # git fetch;
                    git checkout master; # 如果不是你要的那个分支,打开注释进行切换分支
                    git pull origin master; # 重新下载最新代码s
                    git remote remove origin; # 删除 origin ,否则会暴露 github 密码
                    # 启动 docker
                    docker-compose build editor-server; # 和 docker-compose.yml service 名字一致
                    docker-compose up -d;
                  "
            - name: delete ssh key # 删除 ssh key
              run: rm -rf ~/.ssh/id_rsa

复制代码

欢迎关注公众号,一起学习

前端成长

参考链接

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享