安装

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

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

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

更换镜像源

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

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

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

docker 容器的运行是基于docker镜像的,所以我们需要先获取镜像。镜像的获取有几种方法: - 1、从docker hub (国内有仓库的镜像资源站,如Daocloud、阿里云等)上拉取所需要的镜像,修改打包使用。 - 2、自己编写Dockerfile, 基于现有镜像或官方镜像,自己构建新镜像。

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

第一步,镜像获取

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

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

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

注: 1、如何编写Dockerfile, 官方文档 2、copy vs add 官方文档

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错误,解决方案参考

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

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

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

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

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

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

说明: * -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项目启动命令。

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

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

1
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

第三步,在pycharm中配置使用

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

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

配置

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
- 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`,即可看到亲切的欢迎界面。

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使用文档

参考