美文网首页
docker食用食谱(二) —— 镜像

docker食用食谱(二) —— 镜像

作者: 谁有羊毛 | 来源:发表于2019-11-24 23:15 被阅读0次

    镜像

    以前我在windows上学习linux的时候,都是搭一个linux的虚拟机,现在没想到docker也可以这么简单轻量的启动一个linux的交互式终端,供我们简单的学习

    # -i 表示交互式 -t表示终端 --rm表示用后就删除容器 bash表示终端是shell
    docker run -it --rm centos:centos7.2 bash
    

    镜像的命令

    docker image --help 看到所有的镜像相关的命令

    1. 查看所有的镜像
    docker image ls
    
    1. 删除镜像
    docker image rm [image_tag_name]
    docker image rm [image_id]
    
    1. 查看镜像所占的体积 真实的硬盘空间
    docker system df
    

    镜像的构建 —— Dockerfile

    它是用来构建自定义镜像的

    1. 基础镜像毕竟是基础镜像,无法满足我们的需求,我们总是要各种定制(为了方便),而方式有二:docker commit 和 Dockerfile ,由于docker commit实在不容易记录更改,日久就忘了。所以 Dockerfile 就成了我们的选择
    • 一个 Dockerfile 可能长这样:
    # 基础镜像
    FROM python:3.7.5-slim
    # 工作目录
    WORKDIR /home/user/app
    # 复制当前目录下所有文件入容器目录(自动创建目录)
    COPY / /home/user/app
    # 构建层 执行各种命令
    RUN pip install flask
    # 声明一个端口用以随机映射
    EXPOSE 5000
    # 声明数据卷
    VOLUME /data
    # 容器启动后执行的命令
    CMD ["python","index.py"]
    
    1. FROM base_image_name
    # FROM表示从一个镜像为基础来构建
    FROM debian
    
    1. RUN 这玩意儿运行一次就构建一层,所以尽量少构建层 一次RUN完
    # 这个可以用以装环境依赖什么的
    RUN apt-get update \
        && apt-get install -y python3  && pip3 install flask \
        && rm -rf /var/lib/apt/lists/*
    
    1. COPY 复制文件命令
    命令     源地址       镜像中的目录
    COPY / /home/user/app/
    # 将操作的主机的目录下的文件(比如build好的文件)copy到镜像的目录下
    
    1. WORKDIR
    WORKDIR /home/user/app
    # 这样就可以指定工作目录 即使没有也会递归创建整个路径
    
    1. CMD
    cmd命令 容器运行的时候,是以服务该主进程的,当CMD这个命令执行结束的时候,那就结束了,所以没必要去后台运行进程
    CMD ["python3","index.py"]
    

    index.py内容如下:

    from flask import Flask
    app = Flask(__name__)
    
    @app.route('/')
    def hello_world():
        return 'Hello World!'
    
    if __name__ == '__main__':
        app.run(host='0.0.0.0')
    
    1. EXPOSE 暴露端口
    # 这个EXPOSE 的作用在于使用运行docker run -P ...... 命令的时候,会使用宿主机的随机端口来自动映射到这个声明的端口
    # docker run -p <宿主端口>:<容器端口> -t [container_tag_name]
    EXPOSE 5000
    
    1. ENV 配置环境变量
    # 格式:ENV <key1>=<value1> <key2>=<value2>...
    ENV ASP_ENV=production FLASK_ENV=production
    
    1. ARG 构建环境变量
    # 这个也是一种环境变量,只不过它只存在与构建镜像的时候,运行的时候并不存在,主要对于CI系统的一些构建会比较有用
    ARG NODE_VERSION=10.1
    
    1. VOLUME 数据卷 又一个很重要的东西,类似一个路径映射关系。注意:数据卷是一个关系。同时无法在创建镜像是指定本机目录,只能声明这个卷,创建容器的时候才能关联本机目录
    # 我们数据持久化会用到这个东西,比如你的mysql,这个就必不可少了
    # 定义一个匿名卷 
    命令   镜像使用的目录
    VOLUME /data
    
    # 该命令会关联本机目录 创建一个匿名的卷,同时把本地路径/var/user/data 映射到容器的 /data目录,也就是在容器中访问/data就是访问本地的/var/user/data 目录
    docker run -v /var/user/data:/data -t [image_tag_name]
    

    相关文章

      网友评论

          本文标题:docker食用食谱(二) —— 镜像

          本文链接:https://www.haomeiwen.com/subject/dpirwctx.html