阿里云实操---docker\

275 阅读2分钟

命令笔记:操作所有容器:

docker stop/rm  (docker ps -a | awk '{ print 1}' | tail -n +2)

  • 仓库(Registry)存放->镜像(Image)生成->容器(Container
  1. 控制台

  2. 创建ecs实例

  3. 抢占式实列 - 实例规格:x86计算+ 共享型 - 镜像:Ubuntu 18.04|lastest 64位

  4. 系统配置:导出新的密钥  (如果之前的忘记的话)

  5. 点击创建

  6. 连接远程ssh 如果忘记密码也要重置一下密码 

    ssh root@地址
    
    
    ssh-keygen -R 122.51.xxx.xxx
    
  7. 连接远程成功之后

  8. 更新乌班图的常用根据apt:  apt-get update

  9. 添加相关软件包

    apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    software-properties-common
    
  10. 下载软件包的合法性,需要添加软件源的GPG密钥

    curl -fsSL mirrors.ustc.edu.cn/docker-ce/l… | sudo apt-key add -

  11. source.list 中添加Docker软件源

    add-apt-repository
    "deb [arch=amd64] mirrors.ustc.edu.cn/docker-ce/l…
    $(lsb_release -cs)
    stable"

  12. 安装Docker CE  (在这之前再次更新apt)

    apt-get update apt-get install docker-ce

  13. 启动Docker CE 

    systemctl enable docker systemctl start docker

  14. 建立 docker 用户组 

    groupadd docker usermod -aG docker $USER

  15. hello world 测试

    docker run hello-world

  16. 镜像加速

    vi /etc/docker/daemon.json 添加 { "registry-mirrors": [ "dockerhub.azk8s.cn", "reg-mirror.qiniu.com" ] } 重启一下 systemctl daemon-reload systemctl restart docker

  17. docker安装nginx docker pull nginx

  18. 写一个例子

    mkdir www echo 'hello docker!!' >> www/index.html

  19. 启动后台-d (不加-d就是前台窗口时时启动)

    docker run -p 80:80 -v $PWD/www:/usr/share/nginx/html -d nginx

  20. docker stop-> rm 镜像

  21.  进入某个容器

    docker exec -it 【镜像名】 /bin/bash

  22. exit 退出容器

定制镜像

  1. 根目录下创建 source/docker 文件夹

  2. 进入该文件夹 创建nginx文件夹

  3. 进入该文件夹 创建Dockerfile文件

  4. 在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

  1. 在source/docker文件夹下面创建node文件夹

  2. 进入node文件夹

    npm init -y
    npm i koa -S
    
  3. 创建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') })
    
  4. 创建docker文件 Dockerfile

    FROM node:10-alpine
    ADD . /app/
    WORKDIR /app
    RUN npm install
    EXPOSE 80
    CMD ["node","app.js"]
    
  5. 创建node镜像

     docker build -t node:[镜像名]   .
    
  6. 启动一个容器

    docker run -p 80:80 -d [镜像名]
    

定制pm2

  1. copy 一下node文件

  2. 添加process.yml 

    apps:
    - script : app.js
    instances: 2
    watch : true
    env :
    NODE_ENV: production
    
  3. 修改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"]
    
  4. build+run and success~

docker-compose: Compose项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排。

  1. 安装docker-compose 

    apt install docker-compose
    
  2. 打开某个文件夹中,创建docker-compose.yml

    version: '3.1'
    services:
     hello-world:
     image: hello-world
    
  3. 验证 success~

     docker-compose up
    
  4. 启动多个镜像容器,创建新的文件夹,新建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
    
  5. 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)

// })