Docker Command

191 阅读3分钟

Docker Command

基础的docker使用,制作一个简易的nginx服务器

拉取官方镜像 - 面向docker的只读模板

docker pull nginx

查看

docker images nginx

启动镜像

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

启动

www目录里面放一个index.html

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

后台启动

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

停止

docker stop ff6

查看进程

docker ps docker ps -a // 查看全部

删除镜像

docker rm ff6

在Dockerfile所在的目录下定制镜像

定制nginx镜像

  • 创建Dockerfile文件,然后在其中定义内容

    # 告诉docker我们是从哪个镜像开始往下写
    FROM nginx:lastest
    # 镜像运行的过程中执行的命令
    # 地址/usr/share/nginx/html/index.html为docke主机内的地址
    RUN echo '<h1>hello, charph !!!</h1>' > /usr/share/nginx/html/index.html
    
  • 构建镜像并进行测试docker build -t mynginx .

  • 运行测试镜像: docker run -p 8000:80 mynginx

    # 定制镜像, mynginx是打包出来的镜像名
    docker build -t mynginx .
    # 运行 mynginx这个镜像
    docker run -p 8000:80 mynginx
    

定制NodeJs镜像

  • 准备好node的程序代码

    npm init -y
    npm i koa -s
    
    // package.json
    {
      "name": "myappp",
      "version": "1.0.0",
      "main": "app.js",
      "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1"
      },
      "keywords": [],
      "author": "",
      "license": "ISC",
      "description": "myappp",
      "dependencies": {
      "koa": "^2.7.0"
      }
    }
    
    // app.js
    const Koa = require('koa')
    const app = new Koa()
    app.use(ctx => {
    	ctx.body = 'Hello Docker'
    })
    app.listen(3000, () => {
    	console.log('app started at http://localhost:3000/')
    })
    
  • 创建Dockerfile文件,然后在其中定义内容

    # 制定node镜像的版本
    FROM node:10-alpine
    
    # 将当前目录下面的文件 copy 到 app目录下
    ADD . /app/
    
    # 进入到app目录下面,类似cd
    WORKDIR /app
    
    # 安装依赖
    RUN npm install
    
    # 对外暴露的端口
    EXPOSE 3000
    
    # docker run 的时候执行的指令, 直接理解为:程序启动脚本
    CMD ["node", "app.js"]
    
  • 构建镜像并进行测试

    # 定制镜像, mynode是打包出来的镜像名
    docker build -t mynode .
    # 运行 mynode这个镜像, -d 为后台运行
    docker run -p 3000:3000 -d mynode
    

PM2镜像定制

一般运行node程序,不会直接去运行,而是通过PM2这样一个进程守护的程序去运行node程序

  • 创建.dockeringnore文件

    node_modules
    
  • 创建process.yml文件,去描述它的运行

    // process.yml
    apps:
        # 启动执行的文件,我们这个node程序启动是node app.js,所以就是app.js
      - script : app.js
        # 启动 2个 进程
        instances: 2
        # 对代码启用一个监听状态
        watch : true
        # node 中的 env 设置为 生产模式
        env :
        	NODE_ENV: production
    
  • 创建Dockerfile文件,然后在其中定义内容

    # Dockerfile
    
    # 制定pm2镜像的版本
    FROM keymetrics/pm2:latest-alpine
    
    # 将当前目录下面的文件 copy 到 /usr/src/app目录下
    ADD . /usr/src/app
    
    # 进入到/usr/src/app目录下面,类似cd
    WORKDIR /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"]
    
  • 构建镜像并进行测试

    # 定制镜像, mypm2是打包出来的镜像名
    docker build -t mypm2 .
    # 运行 mypm2这个镜像, -d 为后台运行
    docker run -p 3000:3000 -d mypm2