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
docker自定制镜像的更多相关文章
- Docker Dockerfile 定制镜像(转)
转自: https://yeasy.gitbooks.io/docker_practice/ 及 https://blog.csdn.net/wo18237095579/article/details ...
- 【Docker自定制镜像之Dockerfile】
镜像的定制,就是定制每一层所添加的配置.文件,如果可以把每一层修改.安装.构建.操作的命令都写入到一个脚本中,用脚本来构建.定制镜像,这个脚本就是Dockerfile Dockerfile是一个文本文 ...
- Docker Dockerfile 定制镜像
使用 Dockerfile 定制镜像 镜像的定制实际上就是定制每一层所添加的配置.文件.如果我们可以把每一层修改.安装.构建.操作的命令都写入一个脚本,用这个脚本来构建.定制镜像,那么无法重复的问题 ...
- Docker - 定制镜像
Dockerfile Docker Hub拥有大量高质的官方镜像:可直接使用的服务类镜像.语言应用镜像.基础操作系统镜像等,满足绝大部分需求. 此外,可以通过定制镜像的方式来满足实际使用中的特定需求. ...
- Docker入门之--定制镜像
1. 首先定制一个Web 服务器为例 1.1 启动镜像 执行下面命令 docker run --name webserver -d -p 80:80 nginx 1.2 查看容器和镜像状态 然后执行下 ...
- docker之常用命令、自定制镜像、公(私)仓库的上传和下载
一.docker命令 1.参数和命令汇总 1. 参数 Options: --config=~/.docker Location of client config files #客户端配置文件的位置 - ...
- Docker学习笔记三 Dockerfile 指令 定制镜像
本文地址:https://www.cnblogs.com/veinyin/p/10412079.html 镜像是分层存储的,每一层都是独立存在的,修改当前层并不会修改其依赖的上一层,删除某一层也只是 ...
- Docker定制镜像
定制镜像 除了使用定制好的镜像外,我们也可以通过定制实现符合自己环境的镜像. 在docker里面通过build方法来生成镜像,在生成镜像之前,我们需要一个Dockerfile脚本,脚本中包含的是一条一 ...
- Docker上定制CentOS7镜像
原文:Docker上定制CentOS7镜像 前言: 环境:centos7.5 64 位 正文: 第一步:下载centos7镜像 docker pull centos 第二步:建立centos7的容器 ...
随机推荐
- DataPipeline |《Apache Kafka实战》作者胡夕:Apache Kafka监控与调优
胡夕 <Apache Kafka实战>作者,北航计算机硕士毕业,现任某互金公司计算平台总监,曾就职于IBM.搜狗.微博等公司.国内活跃的Kafka代码贡献者. 前言 虽然目前Apache ...
- mysql 高级
Sql优化: 1.SELECT语句中避免使用 *, 尽量根据业务需求按字段进行查询 举例:如果表中有个字段用的是clob或者是blob这种大数据字段的话, 他们的查询应该根据业务需要来进行指定字段的查 ...
- Vue.js04:vue样式-通过属性绑定方式为元素设置class类样式
<!-- 传统写法 --> <h1 class="red thin">这是一个h1标签</h1> <!-- 第一种使用方式,直接传递一个数 ...
- DEDECMS 漏洞修复方案
目录 DEDECMS支付模块注入漏洞 漏洞文件: /include/payment/alipay.php 漏洞描述: 对输入参数$_GET['out_trade_no']未进行严格过滤 修复方案: 对 ...
- 进行Spark,Kafka针对Kerberos相关配置
1. 提交任务的命令 spark-submit \--class <classname> \--master yarn \--deploy-mode client \--executor- ...
- CDH集成Kafka,两种方式:离线、在线
1.离线 先下载相应版本的kafka http://archive.cloudera.com/kafka/parcels/ 然后放置相应目录,如下图: 然后直接添加组件即可 2.在线 配置相应的kaf ...
- servlet中 java.lang.ClassNotFoundException: com.mysql.jdbc.Driver异常
解决方法:将mysql-connector-java-xxx-bin.jar包,复制到项目下WebContent/WEB-INF/lib目录下,刷新重启tomcat运行即可.
- Jsp监听器
监听器: 监听器就是对内置对象的状态或者属性变化进行监听,并且做出反应的特殊的servlet,在web.xml文件中对监听器进行的配置. 内置对象有两种状态变化:产生.销毁,就是当产生内置对象的时候能 ...
- VS2019 实用操作
本文列出了在编写程序过程中的几个非常实用的操作方式,通过这些操作方式,可以在一定程度上减少重复操作.提高编码效率.改善编程体验. 列模式操作 列操作是一项很常用且实用的功能,可以一次性修改不同的行. ...
- [转帖] Linux 时间参数
Linux下文件的三个时间参数 https://blog.csdn.net/GGxiaobai/article/details/53609478 想用touch修改创建时间呢 发现不知道怎么修改来着. ...