命令笔记:操作所有容器:
docker stop/rm (docker ps -a | awk '{ print 1}' | tail -n +2)
- 仓库(Registry)存放->镜像(Image)生成->容器(Container)
-
控制台
-
创建ecs实例
-
抢占式实列 - 实例规格:x86计算+ 共享型 - 镜像:Ubuntu 18.04|lastest 64位
-
系统配置:导出新的密钥 (如果之前的忘记的话)
-
点击创建
-
连接远程ssh 如果忘记密码也要重置一下密码
ssh root@地址 ssh-keygen -R 122.51.xxx.xxx -
连接远程成功之后
-
更新乌班图的常用根据apt: apt-get update
-
添加相关软件包
apt-get install \ apt-transport-https \ ca-certificates \ curl \ software-properties-common -
下载软件包的合法性,需要添加软件源的GPG密钥
curl -fsSL mirrors.ustc.edu.cn/docker-ce/l… | sudo apt-key add -
-
source.list 中添加Docker软件源
add-apt-repository
"deb [arch=amd64] mirrors.ustc.edu.cn/docker-ce/l…
$(lsb_release -cs)
stable" -
安装Docker CE (在这之前再次更新apt)
apt-get update apt-get install docker-ce
-
启动Docker CE
systemctl enable docker systemctl start docker
-
建立 docker 用户组
groupadd docker usermod -aG docker $USER
-
hello world 测试
docker run hello-world
-
镜像加速
vi /etc/docker/daemon.json 添加 { "registry-mirrors": [ "dockerhub.azk8s.cn", "reg-mirror.qiniu.com" ] } 重启一下 systemctl daemon-reload systemctl restart docker
-
docker安装
nginx docker pull nginx -
写一个例子
mkdir www echo 'hello docker!!' >> www/index.html
-
启动后台-d (不加-d就是前台窗口时时启动)
docker run -p 80:80 -v $PWD/www:/usr/share/nginx/html -d nginx
-
docker stop-> rm 镜像
-
进入某个容器
docker exec -it 【镜像名】 /bin/bash
-
exit 退出容器
定制镜像
-
根目录下创建 source/docker 文件夹
-
进入该文件夹 创建nginx文件夹
-
进入该文件夹 创建Dockerfile文件
-
在Dockerfile文件中定义
FROM nginx:latest RUN echo 'something' > /usr/share/nginx/html/index.html (把内容映射到nginx对应html里面) 定制 docker build -t nginx:[镜像名] . 启动 docker run -p 80:80 -d nginx:[镜像名]
定制nodejs
-
在source/docker文件夹下面创建node文件夹
-
进入node文件夹
npm init -y npm i koa -S -
创建app.js
const Koa = require('koa') const app = new Koa() app.use(ctx=>{ ctx.body = 'hello node' }) app.listen(80,()=>{ console.log('app started at 80') }) -
创建docker文件 Dockerfile
FROM node:10-alpine ADD . /app/ WORKDIR /app RUN npm install EXPOSE 80 CMD ["node","app.js"] -
创建node镜像
docker build -t node:[镜像名] . -
启动一个容器
docker run -p 80:80 -d [镜像名]
定制pm2
-
copy 一下node文件
-
添加process.yml
apps: - script : app.js instances: 2 watch : true env : NODE_ENV: production -
修改Dokcerfile
FROM keymetrics/pm2:latest-alpine WORKDIR /usr/src/app ADD . /usr/src/app RUN npm config set registry https://registry.npm.taobao.org/ && \ npm i EXPOSE 3000 #pm2在docker中使用命令为pm2-docker CMD ["pm2-runtime", "start", "process.yml"] -
build+run and success~
docker-compose: Compose项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排。
-
安装docker-compose
apt install docker-compose -
打开某个文件夹中,创建docker-compose.yml
version: '3.1' services: hello-world: image: hello-world -
验证 success~
docker-compose up -
启动多个镜像容器,创建新的文件夹,新建docker-compose.yml
version: '3.1' services: mongo: image: mongo restart: always ports: - 27017:27017 mongo-express: image: mongo-express restart: always ports: - 8000:8081 -
start and success~
docker-compose up
docker-compose和nginx结合
配置nginx和docker-compose.yml,让文件一一对应
server {
listen 80;
location / {
root /var/www/html;
index index.html index.htm;
}
location ~ \.(gif|jpg|png)$ {
root /static;
index index.html index.htm;
}
}
version: '3.1'
services:
nginx:
restart: always
image: nginx
ports:
- 8091:80
volumes:
- ./nginx/conf.d/:/etc/nginx/conf.d
- ./create/dist:/var/www/html/
- ./static/:/static/
webhooks
var http = require('http')
var createHandler = require('github-webhook-handler')
var handler = createHandler({ path: '/docker_ci', secret: 'zhanghaoqiang' })
// 上面的 secret 保持和 GitHub 后台设置的一致
function run_cmd(cmd, args, callback) {
var spawn = require('child_process').spawn;
var child = spawn(cmd, args);
var resp = "";
child.stdout.on('data', function (buffer) { resp += buffer.toString(); });
child.stdout.on('end', function () { callback(resp) });
}
// debug用
// run_cmd('sh', ['./deploy-dev.sh'], function(text){ console.log(text) });
http.createServer(function (req, res) {
handler(req, res, function (err) {
res.statusCode = 404
res.end('no such location')
})
}).listen(80,() =>{
console.log('WebHooks Listern at 80');
})
handler.on('error', function (err) {
console.error('Error:', err.message)
})
handler.on('*', function (event) {
console.log('Received *', event.payload.action);
// run_cmd('sh', ['./deploy-dev.sh'], function(text){ console.log(text) });
})
handler.on('*', function (event) {
console.log('Received a push event for %s to %s',
event.payload.repository.name,
event.payload.ref);
// 分支判断
// if(event.payload.ref === 'refs/heads/master'){
console.log('deploy master..')
run_cmd('sh', ['./deploy-dev.sh'], function(text){ console.log(text) });
// }
})
// handler.on('issues', function (event) {
// console.log('Received an issue event for % action=%s: #%d %s',
// event.payload.repository.name,
// event.payload.action,
// event.payload.issue.number,
// event.payload.issue.title)
// })