docker自定制镜像

概述

很多情况下我们需要自定制镜像,如果自定制过程中需要下载配置很多包,而且这些包之间还有依赖关系,那么如果我们手动去操作的话就会很麻烦,正确的做法是把操作的命令封装到一个文件里,然后直接执行这个文件就行了,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

原文地址:https://www.cnblogs.com/zzliu/p/10685142.html