看这篇文章,必须知道基础的 docker,本文只提供思路和部分代码,不负责教
所有的命令必须谨慎操作!三思而后行
命令
- 停止所有运行的容器
docker stop $(docker ps -a -q)
- 删除所有的容器
docker rm $(docker ps -a -q)
- 使用 docker-compose 启动容器
docker-compose up -d
- 使用 docker-compose 关闭容器
docker-compose down
- 查看 Log
docker logs ${容器 id}
部署 mysql
docker-compose
services:
mysql:
network_mode: "host"
environment:
MYSQL_ROOT_PASSWORD: "yourpassword"
MYSQL_USER: 'test'
MYSQL_PASS: 'yourpassword'
image: "docker.io/mysql:latest"
restart: always // 连不上就一直重试
// depends_on: 选择依赖于某个服务,依赖的服务会先加载
// - 'sss'
volumes:
- "./db:/var/lib/mysql"
- "./conf/my.cnf:/etc/my.cnf"
- "./init:/docker-entrypoint-initdb.d/"
ports:
- "3306:33060"
自动加载 sql 语句,实现初始化数据库
mysql 的官方镜像中,会在加载时执行 docker-entrypoint-initdb.d 下面文件夹下的 sql 文件 利用这个实现初始化
如果 mysql 数据文件夹中有数据,则不会加载 sql 文件
EGG 项目配合 docker: 直接被中断
因为 egg-scripts
自己有一套守护进程,去掉 daemon
参数
"start": "egg-scripts start --title=egg-server-broken-chain",
部署 NodeJs 项目
- 新建 Dockerfile 文件
FROM node:10.13-alpine
ENV NODE_ENV production
WORKDIR /usr/src/app
COPY ["package.json", "package-lock.json*", "npm-shrinkwrap.json*", "./"]
RUN npm install -g cnpm
RUN cnpm install --production --silent
COPY . .
EXPOSE 7001
CMD ["npm", "start"]
- 在 docker-compose.yml 中添加信息,用 docker-compose 管理多个镜像相当方便
最终的 docker-compose.yml 文件
version: '2'
services:
broken-chain:
image: broken-chain
build: .
environment:
NODE_ENV: production
ports:
- 7001:7001
depends_on:
- "mysql"
restart: always
mysql:
environment:
MYSQL_ROOT_PASSWORD: "123"
image: "docker.io/mysql:5.6"
volumes:
- "./mysql/init:/docker-entrypoint-initdb.d/"
ports:
- "3306:3306"
发布镜像
- 登录
Dockerhub
docker login
- 给镜像打上标签
docker tag ${镜像 id} ${用户名}/${镜像名}:${tag 标签}
- push 推到 dockerhub
docker push ${用户名}/${镜像名}:${tag 标签}
最后
最终,你要把你做的项目给别人用,开箱即用的那种。你需要
- 新建目录结构
- init
- xxx.sql // 初始化的 sql 语句
- docker-compose.yml
- docker-compose.yml 如下
version: '2'
services:
broken-chain:
image: ${你的用户名}/${你的镜像} // 这回直接拉取你在 dockerhub 上的镜像
// build: . 去掉构建步骤
environment:
NODE_ENV: production
ports:
- 7001:7001
depends_on:
- "mysql"
restart: always
mysql:
environment:
MYSQL_ROOT_PASSWORD: "123"
image: "docker.io/mysql:5.6"
volumes:
- "./mysql/init:/docker-entrypoint-initdb.d/"
ports:
- "3306:3306"
- 压缩 zip 给别人
使用命令一键运行(数据库 + 项目)
docker-compose up -d
- 舒服了