Docker
安装
本地安装
- docs.docker.com/docker-for-…
- docker version 查看版本
测试机安装
-
curl -fsSL get.docker.com -o get-docker.sh
-
sh get-docker.sh
镜像命令
- 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 # 查看本本
测试机安装
- curl -L get.daocloud.io/docker/comp… -s
-
uname -m` > /usr/local/bin/docker-compose - sudo chmod +x /usr/local/bin/docker-compose
背景
- 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 账户
- ssh root@47.94.*.
- adduser work
- passwd 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