从0到1构建docker开发镜像

从0到1构建docker开发镜像

本地开发环境容器化的益处

无需在本地主机安装所有开发依赖控件,诸如,数据库、语言解释器等,保持本地主机的相对 纯净。

自然支持多个开发环境,诸如,在主机上运行不同版本的 Ruby、Postgresql 数据库服务等。

这次要干啥

打一个docker镜像node环境包,用koa开发一个简单的网页.不同电脑拉取此镜像开发.

开始前,我们需要先熟悉下docker的一些常用命令。

    docker pull 镜像:tag                ##拉取远程仓库tag版本号的镜像
    docker images                       ##查询本地仓库的所有镜像
    docker rmi 镜像id                   ##删除镜像
    docker tag 镜像id 镜像:TAG          ##重命名镜像
    docker run -it --privileged -d --name developer --rm imageId  ##根据本地某个镜像创建一个容器
    docker ps                           ##查询本地容器
    docker ps -a                        ##查询本地所有运行的容器
    docker rm containerId                ##删除容器
    docker attach containerId            ##进入容器,需要先start容器或者docker run创建容器
    docker export 容器id > x:/xx/xx.tar ##导出容器快照
    docker import - x:/xx/xx.tar        ##导入容器快照
    docker save 镜像id -o x:/xx/xx.tar   ##导出镜像
    docker load -i x:/xx/xx.tar    ##导入镜像

开始

目录结构

    ├── .dockerignore   // docker忽略文件
    ├── dockerfile      // 镜像生成描述文件
    ├── index.js        // node index文件
    ├── package.json    // 无底洞生成文件

.dockerignore

类似我们熟悉的 .gitignore ,就是当我们在进行 COPY 或 ADD 文件复制操作时,将不必要的文件忽略掉(诸如文档文件、git文件、node_modules以及一些非生成必要文件等),从而减小镜像体积. 这里忽略index.js文件

index

先随便写点东西

    // index.js
    const Koa = require('koa');
    const app = new Koa();

    app.use(async ctx => {
    ctx.body = 'Hello World';
    });

    app.listen(3000);

package.json

为了查看挂载效果,用nodemon 自动重启node项目
    {
    "name": "app",
    "version": "1.0.0",
    "private": true,
    "scripts": {
        "start": "nodemon index.js"
    },
    "dependencies": {
            "koa": "^2.5.0",
            "nodemon": "^2.0.2"
        }
    }

dockerfile


终于进入主题
    FROM node                        // 基于node镜像构建
    ADD . /home/node/app             // 把当前目录文件打包进镜像
    EXPOSE 3000                      // 暴露的端口   
    WORKDIR /home/node/app           // 设置工作区文件
    RUN npm install                  // 运行命令   
    CMD [ "npm","run","start" ]      // run命令

build

    docker image build ./ -t app 

查看build后的image

    docker images

run

    docker run --name=app1 -v ~/app/index.js:/home/node/app -p 8000:3000 app

    -v 指定挂载文件或目录
    -p 映射端口
    --name 设置容器名

访问

访问浏览器 127.0.0.1:8000 就可以看到hello world了,修改代码也是ok的

push到仓库

    docker tag app:latest username/app:latest 
    
    docker push username/app
其他机器pull下来,run起来就可以开发了.

本文链接:

https://shayne.wang/archives/13.html
1 + 2 =
快来做第一个评论的人吧~