Docker实战-构建Apache+wsgi+Django镜像

使用commit构建Apache+wsgi+Django镜像

**docker commit :**从容器创建一个新的镜像

运行一个基础镜像

1
docker run -dit centos:6.8 bash
  • -d: 后台运行容器,并返回容器ID;
  • -i: 以交互模式运行容器,通常与 -t 同时使用;
  • -P: 随机端口映射,容器内部端口随机映射到主机的高端口
  • -p: 指定端口映射,格式为:主机(宿主)端口:容器端口
  • -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
  • docker exec :在运行的容器中执行命令

通过 docker ps -a 命令查看已经在运行的容器,然后使用容器 ID在容器中开启一个交互模式的终端

1
docker exec -it 7ef9388bbf2b /bin/bash

交互模式进入容器:

1
2
docker run -it 镜像名 bash
docker exec -it 容器id bash

安装需要的软件包以及模块

安装pip源

yum updata

yum -y install epel-release

编辑文件的每一个[epel]的第三行去掉注释,第四行注释掉,完成效果如下

1
vi /etc/yum.repos.d/epel.repo 
1
2
3
4
5
6
7
8
[epel]
name=Extra Packages for Enterprise Linux 6 - $basearch
baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch
#mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearch
failovermethod=priority
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6

安装环境软件

yum –enablerepo=epel install -y python-pip

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple django==1.6.2

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple djangorestframework==2.3.14

yum install -y gcc libffi-devel python-devel openssl-devel

yum install -y mysql-devel python-devel python-setuptools

pip install MySQL-python


安装apache

1
yum -y install httpd*  --安装apache
1
rpm -qa | grep httpd     --查看安装的http包

查看apache是否启动

1
2
3
4
5
6
7
8
9
10
1.查看端口

首先要知道apache的端口,比如说80端口;
查看端口是否被开启和监听
netstat -an | grep :80

2.查看进程
ps -ef |grep httpd
ps -aux | grep httpd
如果看到许多(一般是45个)输出就说明对了。

启动Apache网站检查

1
2
3
service httpd start            --启动Apache网站  
service httpd stop --停止Apache网站
service httpd restart --重启Apache网站

安装python2.7的mod_wsgi

1
pip install mod_wsgi

配置apache加载wsgi模块

使用mod_wsgi-express install-module查询mod_wsgi.so的路径,输出如下:

1
2
3
[root@95d28530ae06 conf.d]# mod_wsgi-express install-module
LoadModule wsgi_module "/usr/lib64/httpd/modules/mod_wsgi-py26.so"
WSGIPythonHome "/usr"

在Apache模块配置目录/etc/httpd/conf.d/创建一个mod_wsgi.conf配置文件,加入上面的内容

1
2
3
4
vi mod_wsgi.conf

LoadModule wsgi_module "/usr/lib64/httpd/modules/mod_wsgi-py26.so"
WSGIPythonHome "/usr"

重启Apache服务

1
service httpd restart 

设置开机启动Apache

先用查询apache和mysql服务是否存在,不存在则需要手动添加

1
chkconfig --list

设置httpd 在运行级别为2、3、4、5情况都为开启状态

1
chkconfig --level 2345 httpd on

重启Apache服务

1
service httpd restart 

生成新镜像

本地需要的程序都准备完成后使用commit生成新的镜像

1
docker commit -m "Apache/2.2.15-mod_wsgi-py26-Django1.6.2" -a li 95d28530ae06 centos/apache-wsgi-django:1.0

**docker commit :**从容器创建一个新的镜像。

语法 docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

OPTIONS说明:

  • **-a :**提交的镜像作者;
  • **-c :**使用Dockerfile指令来创建镜像;
  • **-m :**提交时的说明文字;
  • **-p :**在commit时,将容器暂停。

docker save : 将指定镜像保存成 tar 归档文件。

将镜像 centos/apache-wsgi-django:1.0 生成 centos/apache-wsgi-django.tar 文档

1
docker save -o centos/apache-wsgi-django.tar centos/apache-wsgi-django:1.0

语法:docker save [OPTIONS] IMAGE [IMAGE…]

OPTIONS 说明:

  • **-o :**输出到的文件。

将项目文件导入容器并赋予执行权限(可选部分)

为方便批量部署可以把项目文件导入容器,然后再构建镜像。优点:方便批量部署。缺点:项目环境不可重复使用

将主机的项目文件目录拷贝到容器目录

1
2
docker cp ./ 95d28530ae06:/var/www/html
docker cp ./testprj.conf 95d28530ae06:/etc/httpd/conf.d

赋予权限:执行某个容器的某条命令,但又不想进入容器内,编写脚本文件

vi start.sh

1
2
3
#!/bin/bash
DOCKER_ID=95d28530ae06
sudo docker exec -it $DOCKER_ID /bin/bash -c 'chcon -R -t httpd_user_content_t /var/www/html && chmod -R 777 /var/www/html && service httpd restart'

Docker实战-构建Apache+wsgi+Django镜像
http://www.keker.top/2019/09/15/tools/docker/Docker实战-Apache-wsgi-Django镜像/
作者
Keker
发布于
2019年9月15日
许可协议