美文网首页
docker学习笔记

docker学习笔记

作者: 右左君 | 来源:发表于2019-07-07 20:00 被阅读0次

    docker学习笔记

    [TOC]

    相关概念

    需求

    • 环境配置麻烦的问题
    • 虚拟机:资源占用多、冗余步骤多、启动慢(虚拟机是完整的操作系统)

    linux 容器

    Linux 容器(Linux Containers,缩写为 LXC)不是模拟一个完整的操作系统,而是对进程进行隔离。

    优势:进程级别,资源占用低,体积小,启动快,多个容器可以共享资源。

    Docker

    Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。
    Docker 通过将程序及程序依赖包or文件打包成一个文件,即为image文件。运行image文件,生成一个容器(底层系统的一个进程)。

    每个容器之间相互隔离(内存空间、硬盘空间、线程、网络地址等等),共用部分系统资源。

    image 文件

    • 二进制文件,包含程序代码及其依赖
    • 通用,可以看做是容器的模板
    • 同一个image可以生成多个容器且同时运行

    container 文件

    image 文件生成的容器实例,本身也是一个文件,称为容器文件。

    一旦容器生成,会生成容器文件,且容器文件不会随容器停止而删除。

    Dockerfile 文件

    Dockerfile文件,用来配置image,docker根据Dockerfile创建image文件。

    编写Dockerfile文件

    以python web项目为例

    1.根目录创建 .dockerignore文件

    表示打包成image时忽略的文件或者文件夹

    .git
    *.log
    

    2.生成python依赖包文件requirements.txt

    pipenv lock --requirements > requirements.txt

    bottle==0.12.16
    urllib3==1.23
    

    3.编写Dockerfile文件

    
    # python 环境 alpine版本为体积最小版本
    FROM python:3.7-alpine 
    
    # 将工作目录设置为 /web
    WORKDIR /web
    
    # 将当前目录内容复制到位于 /web 中的容器中
    ADD . /web
    
    # 按照 依赖环境到临时的虚拟包
    # 安装 requirements.txt 中指定的任何所需软件包
    # 删除缓存文件和虚拟包
    RUN apk add --no-cache --virtual .pynacl_deps build-base python3-dev libffi-dev \
         && pip install -r requirements.txt \
         && rm -rf .cache/pip \
         && apk del .pynacl_deps
    
    # 定义环境变量
    ENV  profile=test
    # 定义语言环境
    ENV LANG=en_US.UTF-8
    
    #将容器 8080 端口暴露出来, 允许外部连接这个端口。
    EXPOSE 8080
    
    # 在容器启动时运行 web.py
    CMD ["python3", "web.py"]
    
    

    4.生成docker image文件

    # docker image build -t <image_name>:<image_version> <Dockerfile 所在文件夹名称>
    docker image build -t web .
    

    5.运行container

    # test 环境
    docker container run --env profile=test --rm -p 8080:8080 -it web
    
    # prod 环境
    docker container run --env profile=prod --rm -p 8080:8080 -it web
    

    6.发布image 文件

    # 先登录
    docker login
    
    # 为本地image 标注用户名和版本。
    docker image tag [imageName] [username]/[repository]:[tag]
    # 实例
    docker image tag web:latest xxx/web:latest
    
    docker image push xxx/web:latest
    
    
    
    

    6. 获取image

    # 先登录
    docker login
    
    # 后pull
    docker pull xxx/web:latest
    

    参考文档

    相关文章

      网友评论

          本文标题:docker学习笔记

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