概述

很多情况下我们需要自定制镜像,如果自定制过程中需要下载配置很多包,而且这些包之间还有依赖关系,那么如果我们手动去操作的话就会很麻烦,正确的做法是把操作的命令封装到一个文件里,然后直接执行这个文件就行了,docker提供了这个文件,就是Dockerfile,下面我们用Dockerfile来自定制一个运行在centos环境下的django镜像

## 定制过程


### 1.下载centos镜像
```linux
docker pull centos

  1. <br>
  2. ### 2. 下载django-2.1.7源码包与阿里云扩展源epel.repo文件
  3. 在/opt目录下建立一个docker目录,切换到docker目录,下载django源码包与epel.repo文件
  4. ```linux
  5. wget https://media.djangoproject.com/releases/2.1/Django-2.1.7.tar.gz
  6. wget -O epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

### 3. 创建空的Dockerfile和run.sh文件
Dockerfile是存放创建镜像过程中所需命令的文件,run.sh是执行Django的bash脚本

创建好之后/opt/docker目录下的文件应该如下

  1. [root@localhost docker]# ls
  2. Django-2.1.7.tar.gz Dockerfile epel.repo run.sh

### 4. 编写Dockerfile

这一步是这篇博客的重点

  1. FROM centos # 指定base image
  2. MAINTAINER robin # 作者名字
  3. ADD epel.repo /etc/yum.repos.d # 将当前目录的epel.repo文件拷贝到容器的/etc/yum.repos.d目录下
  4. RUN yum update -y # 运行命令
  5. RUN yum install -y python36
  6. RUN yum install -y python36-pip
  7. RUN pip3 install setuptools
  8. ADD Django-2.1.7.tar.gz /opt/
  9. WORKDIR /opt/ # 进入/opt目录
  10. RUN mv Django-2.1.7 django # 运行命令mv
  11. WORKDIR /opt/django # 进入/opt/django目录
  12. RUN python3 setup.py install
  13. WORKDIR /opt
  14. RUN django-admin.py startproject myproject
  15. ADD run.sh /opt/qishi3dj/run.sh
  16. WORKDIR /opt/qishi3dj
  17. RUN chmod 777 run.sh # 更改run.sh的权限
  18. EXPOSE 9090 # 声明容器端口
  19. CMD ["/bin/sh","run.sh"] # 容器启动时默认执行的命令

### 5. 编写run.sh
```linux
python3 manage.py runserver 0.0.0.0:8000


  1. <br>
  2. ## 生成镜像
  3. 生成镜像使用build命令
  4. ```linux
  5. docker build -t robin/django-217 .

## 启动容器

后台启动容器,将宿主机的9090端口映射到容器的8000端口

  1. docker run -d -p 9090:8000 robin/django-217

## 进入容器
查看容器运行状态,找到容器id

  1. docker ps

以交互模式进入容器

  1. docker exec -it xxx /bin/bash

查看运行的进程,可以看到

  1. UID PID PPID C STIME TTY TIME CMD
  2. root 1 0 0 15:43 ? 00:00:00 /bin/sh run.sh
  3. root 6 1 0 15:43 ? 00:00:00 python3 manage.py runserver 0.0.0.0:8000
  4. root 28 6 4 15:48 ? 00:03:00 /usr/bin/python3 manage.py runserver 0.0.0.0:8000
  5. root 36 0 0 16:56 pts/0 00:00:00 /bin/bash
  6. root 49 36 0 16:56 pts/0 00:00:00 ps -ef

## 使用

修改settings.py的ALLOWHOSTS=["*"]

访问192.168.1.111:9090

## 导出镜像
```
docker save -o centos_django217.tar.gz robin/django-217
```
-o 指定地址和文件名
robin/django-217为镜像名

  1. [root@localhost docker]# ls
  2. centos_django217.tar.gz Django-2.1.7.tar.gz Dockerfile epel.repo run.sh

docker自定制镜像的更多相关文章

  1. Docker Dockerfile 定制镜像(转)

    转自: https://yeasy.gitbooks.io/docker_practice/ 及 https://blog.csdn.net/wo18237095579/article/details ...

  2. 【Docker自定制镜像之Dockerfile】

    镜像的定制,就是定制每一层所添加的配置.文件,如果可以把每一层修改.安装.构建.操作的命令都写入到一个脚本中,用脚本来构建.定制镜像,这个脚本就是Dockerfile Dockerfile是一个文本文 ...

  3. Docker Dockerfile 定制镜像

    使用 Dockerfile 定制镜像  镜像的定制实际上就是定制每一层所添加的配置.文件.如果我们可以把每一层修改.安装.构建.操作的命令都写入一个脚本,用这个脚本来构建.定制镜像,那么无法重复的问题 ...

  4. Docker - 定制镜像

    Dockerfile Docker Hub拥有大量高质的官方镜像:可直接使用的服务类镜像.语言应用镜像.基础操作系统镜像等,满足绝大部分需求. 此外,可以通过定制镜像的方式来满足实际使用中的特定需求. ...

  5. Docker入门之--定制镜像

    1. 首先定制一个Web 服务器为例 1.1 启动镜像 执行下面命令 docker run --name webserver -d -p 80:80 nginx 1.2 查看容器和镜像状态 然后执行下 ...

  6. docker之常用命令、自定制镜像、公(私)仓库的上传和下载

    一.docker命令 1.参数和命令汇总 1. 参数 Options: --config=~/.docker Location of client config files #客户端配置文件的位置 - ...

  7. Docker学习笔记三 Dockerfile 指令 定制镜像

    本文地址:https://www.cnblogs.com/veinyin/p/10412079.html  镜像是分层存储的,每一层都是独立存在的,修改当前层并不会修改其依赖的上一层,删除某一层也只是 ...

  8. Docker定制镜像

    定制镜像 除了使用定制好的镜像外,我们也可以通过定制实现符合自己环境的镜像. 在docker里面通过build方法来生成镜像,在生成镜像之前,我们需要一个Dockerfile脚本,脚本中包含的是一条一 ...

  9. Docker上定制CentOS7镜像

    原文:Docker上定制CentOS7镜像 前言: 环境:centos7.5 64 位 正文: 第一步:下载centos7镜像 docker pull centos 第二步:建立centos7的容器 ...

随机推荐

  1. Docker-Linux环境安装

    不同服务器操作系统安装命令不同,例如centOS默认用yum,Ubuntu可能默认用apt-get.这里推荐一种安装方式,通过下载shell脚本 https://get.docker.com,会检测操 ...

  2. CRC32明文攻击

    明文攻击是一种较为高效的攻击手段,大致原理是当你不知道一个zip的密码,但是你有zip中的一个已知文件(文件大小要大于12Byte)时, 因为同一个zip压缩包里的所有文件都是使用同一个加密密钥来加密 ...

  3. 爬虫技术实现空间相册采集器V.0.0.1版本

    一.    功能需求分析: 在很多时候我们需要做这样一个事情:我们想把我们QQ空间上的相册高清图像下载下来,怎么做?到网上找软件?答案是否定的,理由之一:网上很多软件不知有没有病毒,第二它有可能捆了很 ...

  4. Webstorm 2017.3激活破解

    之前尝试过各种激活破解办法,不过随着版本的不断升级,激活信息都失效了(毕竟咱不是通过正常途径激活的),只能重新激活.而且难度越来越大,记得早先网上有人分享激活码,激活的server地址,破解程序等等, ...

  5. Alpha阶段事后分析

    设想和目标 我们在Alpha阶段对网站的定位布局一直在摸索,网站所有功能和网站所能解决的需求痛点并不是在前几次会议就定死了的.Alpha阶段整个过程中我们团队靠着频繁的scrum会议和微信群交(shu ...

  6. 01-Redhat/Centos7网卡命名介绍及修改方式

    1. Redhat/Centos7网卡命名介绍 1.1 网络设备命名 Redhat/Centos7提供在网络接口中使用新的网络设备命名方法.这些功能会更改系统中的网络接口名称,以便定位和区分这些接口. ...

  7. UnityInspector显示扩展

    比如经常在三方插件中看到如下在Inspector中的样式 这种对特别是要做编辑序列化数据脚本操作很友好,但是这个是如何实现呢?比如我们要创建一个保存序列化的npc基本数据,名字(Name),性别(Se ...

  8. Java的selenium代码随笔(6)

    //获取元素列表public List<WebElement> ListElements(WebElement webElement, By parentBy, By childrenBy ...

  9. 探索PowerShell 【十三】WMI对象

    原文:探索PowerShell ][十三]WMI对象 我记得在xp时代,经常使用的工具有一个叫做WMI Administrative Tools,是微软官方提供的用来查看.编辑WMI对象的,只是现在好 ...

  10. XAMPP支持多PHP版本

    在使用xampp进行开发的时候,我们都知道它只能支持一个PHP版本不能像PHPstudy那样方便进行不同版本的切换操作.因此我们手动的对于xampp进行改造一下,使其支持其他PHP版本 1. 从官网上 ...