码农行者 码农行者
首页
  • Python

    • 语言特性
    • Django相关
    • Tornado
    • Celery
  • Golang

    • golang学习笔记
    • 对比python学习go
    • 模块学习
  • JavaScript

    • Javascript
  • 数据结构预算法笔记
  • ATS
  • Mongodb
  • Git
云原生
运维
垃圾佬的快乐
  • 数据库
  • 机器学习
  • 杂谈
  • 面试
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

DeanWu

软件工程师
首页
  • Python

    • 语言特性
    • Django相关
    • Tornado
    • Celery
  • Golang

    • golang学习笔记
    • 对比python学习go
    • 模块学习
  • JavaScript

    • Javascript
  • 数据结构预算法笔记
  • ATS
  • Mongodb
  • Git
云原生
运维
垃圾佬的快乐
  • 数据库
  • 机器学习
  • 杂谈
  • 面试
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • Docker学习笔记(二)--简单使用,搭建python开发环境

    • 安装
      • 更换镜像源
        • Docker 使用案例:使用docker 来搭建python开发环境
          • 第一步,镜像获取
          • 第二步,启动容器,开发项目:django 项目为例
          • 第三步,在pycharm中配置使用
        • 参考
        • 云原生
        • docker
        DeanWu
        2017-08-26
        目录

        Docker学习笔记(二)--简单使用,搭建python开发环境

        # 安装

        docker 安装现在已非常简单,具体可参考官方文档 (opens new window).

        安装成功后可以使用以下命令检测:

        $ docker --version
        Docker version 17.06.2-ce, build cec0b72
        
        1
        2

        # 更换镜像源

        因 Docker 官方仓库地址在国外,速度比较慢。可使用国内的几家大厂放出的 Docker 仓库镜像源。

        • DaoCloud 加速器 (opens new window)。注册登录后可看到如下配置说明文档,按教程配置即可。
        • 阿里云镜像加速器 (opens new window)

        # Docker 使用案例:使用docker 来搭建python开发环境

        下面我们以构建python的开发环境为例来看下Docker 在开发中的应用。

        docker 容器的运行是基于docker镜像的,所以我们需要先获取镜像。镜像的获取有几种方法:

        • 1、从docker hub (国内有仓库的镜像资源站,如Daocloud、阿里云等)上拉取所需要的镜像,修改打包使用。
        • 2、自己编写Dockerfile, 基于现有镜像或官方镜像,自己构建新镜像。

        最早的镜像只有官方推出的官方镜像 (opens new window),随着Docker的发展Docker hub上已有数不清的非官方镜像为使用者提供服务。我们也可以将我们构建的镜像上传到Docker hub 上供其他人使用。

        # 第一步,镜像获取

        我们这里通过编写Dockerfile来定制镜像。

        FROM python:2.7  
        ENV PYTHONUNBUFFERED 1  
        RUN mkdir /code    
        WORKDIR /code  
        ADD ./requirements.txt /code/  
        RUN pip install -r requirements.txt  
        
        1
        2
        3
        4
        5
        6

        说明:

        • 1、依据python:2.7 镜像构建
        • 2、这是python环境变量
        • 3、在docker容器内创建代码目录
        • 4、设置工作目录为 code
        • 5、复制文件到code 目录下
        • 6、执行命令安装python依赖包

        注: 1、如何编写Dockerfile, 官方文档 (opens new window) 2、copy vs add 官方文档 (opens new window)

        ADD 功能更多:

        • ADD指令可以让你使用URL作为参数。当遇到URL时候,可以通过URL下载文件并且复制到。
        • ADD的另外一个特性是有能力自动解压文件。如果参数是一个可识别的压缩格式(tar, gzip, bzip2, etc)的本地文件(所以实现不了同时下载并解压),就会被解压到指定容器文件系统的路径。
        • URL下载和解压特性不能一起使用。任何压缩文件通过URL拷贝,都不会自动解压。

        Copy :

        • 只复制文件

        Dockerfile 里添加文件建议使用 Copy, 除非明确需要使用ADD.

        运行 docker build -t docker-ssh:v1 -f Dockerfile . 构建镜像。

        注意: Forbidden path outside of the build context错误,解决方案参考 (opens new window)

        这样,基于python2.7的python开发镜像便做好了,自己需要什么python依赖直接写到requirements文件里即可。

        # 第二步,启动容器,开发项目:django 项目为例

        在目录/Users/pylixm/docker.dev/django-demo/下,运行django-admin startproject mysite在本地目录创建django项目, 目录如下:

        $ tree
        .
        ├── Dockerfile
        ├── manage.py
        ├── mysite
        │   ├── __init__.py
        │   ├── settings.py
        │   ├── urls.py
        │   └── wsgi.py
        └── requirements.txt
        
        1
        2
        3
        4
        5
        6
        7
        8
        9
        10

        运行以下命令以bash模式启动容器:

        docker run -it --rm -p 80:80 -v /Users/pylixm/docker.dev/django-demo/mysite:/code/mysite docker-ssh:v1 bash
        
        1

        说明:

        • -it:这是两个参数,一个是 -i:交互式操作,一个是 -t 终端。我们这里打算进入 bash 执行一些命令并查看返回结果,因此我们需要交互式终端。
        • --rm:这个参数是说容器退出后随之将其删除。默认情况下,为了排障需求,退出的容器并不会立即删除,除非手动 docker rm。我们这里只是随便执>行个命令,看看结果,不需要排障和保留结果,因此使用 --rm 可以避免浪费空间。
        • -p hostPort:containerPort : 映射容器端口到主机端口,前面是主机端口,后边是容器端口;
        • -v 主机目录:容器内目录 :挂载主机目录作为容器的持久化数据卷。主机目录必须是绝对路径;
        • bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 bash。

        此处利用容器的数据卷,将我们的开发项目映射到容器中,当我们的项目文件发生电话时会立即体现在容器中。容器关闭后,项目的变动任然存在。这样便可以愉快的使用docker来封装我们的开发环境了。

        可进入容器,运行python manage.py runserver 0.0.0.0:80启动django项目。在我们主机的浏览器访问0.0.0.0:80, 便可看到项目页面了。

        我们也可改造Dockerfile,设置暴露端口,和执行的命令,重新编译镜像。设置好后,我们便不用再进入容器启动运行django项目启动命令。

        ## 暴露docker容器的端口
        EXPOSE 8000
        CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
        
        1
        2
        3

        或者直接在docker run 命令后加启动命令:

        docker run -it --rm -p 80:8000 -v /Users/pylixm/docker.dev/django-demo/mysite:/code/mysite docker-ssh:v1 python ./mysite/manage.py runserver 0.0.0.0:8000
        
        1

        # 第三步,在pycharm中配置使用

        第二步的时候,我们构建了我们的python开发镜像。我们只需要在pycharm中配置Project Interpreter为Docker镜像即可。

        检查 在Mac上开发,需要保证Docker for Mac启动,并配置好Docker API(Preferences | Build, Execution, Deployment | Docker),如下图:

        配置

        - 1、到`Preferences -> Project Interpreter -> Add Romete `,选择本地的可用Docker 镜像,如图:
        ![](/static/imgs/docker-config-1.png)
        
        - 2、配置`Edite configrations`, 将host设置为`0.0.0.0`, 选择刚才添加的项目解释器,并配置容器运行参数`Docker container settings`,如图:
        ![](/static/imgs/docker-config-2.png)
        
        >说明:
        >    - 容器端口:8000 映射到主机端口 80
        >    - 挂载项目目录的数据卷: ` /Users/pylixm/docker.dev/django-demo/mysite:/code/mysite`
        
        - 3、正常启动项目,访问`http://0.0.0.0:80`,即可看到亲切的欢迎界面。
        
        
        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12

        update:2018年05月31日

        以上配置是基于pycharm2017.3, 截止到目前为止最新pycharm版本为2018.1。

        Docker 管理窗口

        此版本增加了对Docker镜像及容器的管理窗口,可以在此创建和启动容器。

        并且配置和Django等服务的配置在一个地方,注意区分,不要把Docker的配置和Django运行的python interpreter混淆。

        Python Interpreter的配置

        • 1、到Preferences -> Project Interpreter -> Add,选择 Docker, 随后在右侧窗口选择使用的镜像。 如图:

        • 2、配置Edite configrations, 将host设置为0.0.0.0, 选择刚才添加的项目解释器,并配置容器运行参数Docker container settings,如图:

        说明:

        • 容器端口:8000 映射到主机端口 80
        • 挂载项目目录的数据卷: /Users/pylixm/docker.dev/django-demo/mysite:/code/mysite
        • 3、正常启动项目,访问http://0.0.0.0:80,即可看到亲切的欢迎界面。

        更加详细配置说明参见Pycharm官方Docker使用文档 (opens new window)。

        # 参考

        • http://blog.csdn.net/yhcvb/article/details/45696961 (opens new window)
        • http://blog.csdn.net/wind_602/article/details/77988395 (opens new window)
        #自动化运维#Docker
        上次更新: 2023/03/30, 18:46:09
        最近更新
        01
        chromebox/chromebook 刷bios步骤
        03-01
        02
        redis 集群介绍
        11-28
        03
        go语法题二
        10-09
        更多文章>
        Theme by Vdoing | Copyright © 2015-2024 DeanWu | 遵循CC 4.0 BY-SA版权协议
        • 跟随系统
        • 浅色模式
        • 深色模式
        • 阅读模式