概述

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

## 定制过程


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

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

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

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

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

### 4. 编写Dockerfile

这一步是这篇博客的重点

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

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


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

## 启动容器

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

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

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

docker ps

以交互模式进入容器

docker exec -it xxx /bin/bash

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

UID         PID   PPID  C STIME TTY          TIME CMD
root 1 0 0 15:43 ? 00:00:00 /bin/sh run.sh
root 6 1 0 15:43 ? 00:00:00 python3 manage.py runserver 0.0.0.0:8000
root 28 6 4 15:48 ? 00:03:00 /usr/bin/python3 manage.py runserver 0.0.0.0:8000
root 36 0 0 16:56 pts/0 00:00:00 /bin/bash
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为镜像名

[root@localhost docker]# ls
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. eclipse 开发web 项目,使用gradle 需要安装的插件

    1.Buildship Gradle 扩展 eclipse IDE 以支持使用 Gradle 构建软件.此解决方案由 Eclipse 基金会提供 2.EGradle Editor (主要用来编写gra ...

  2. JavaScript(四)变量

    变量的声明 在JavaScript程序中,使用一个变量之前应当使用关键字var进行声明,如下所示:var num;var sum; 也可以写成var num,sum,avg;如果只是声明变量而没有给变 ...

  3. 记录一次Orthanc dicom数据异常手动修复

    问题复现场景 同一个StudyInstanceUID,对应两个不同的PatientID. 通俗讲,原本是一个病人的一次影像,却割裂成两个病人的影像,虽然两个病人不影响系统数据,但是同一个Study分别 ...

  4. dump文件解析之探索.Net的内存

    前言: 对于需要长时间运行的.net程序,有时需要我们查看内存的使用有没有内存泄露问题. 我们可以从dump文件中找到答案. Dump的看点 用dump文件来分析内存,到底我们需要关心哪些点呢? 内存 ...

  5. 使用python抓取数据之菜鸟爬虫1

    ''' Created on 2018-5-27 @author: yaoshuangqi ''' #本代码获取百度乐彩网站上的信息,只获取最近100期的双色球 import urllib.reque ...

  6. MVVM数据代理

    MVVM数据代理 function MVVM(options) { this.$options = options || {}; var data = this._data = this.$optio ...

  7. PHP用户输入数据进行过滤

    1.在表单中,input项,如果用户输入的是英文状态下的双引号或单引号,数据保存后.以后又在后台编辑的时候,<input value=" "这是带引号的值,因为引号导致问题& ...

  8. Swoole入门到实战打造高性能赛事直播平台(完整版)

    需要 的联系我,QQ:1844912514

  9. element vue 表格编辑

    https://xuliangzhan.github.io/vue-element-extends/#/editable/click1

  10. 【转载】利用window.performance.timing进行性能分析

    利用window.performance.timing进行性能分析   性能分析... window.performance.timing中相关属性语义: // .navigationStart 准备 ...