由于项目部署的现场环境通常为离线环境,因此需要将项目打包为docker文件,便于部署。
1. docker安装yum install docker -y
设置自启动
systemctl start docker systemctl enable docker2. 制作包含中文语言环境和python3服务的基础centos镜像
此处采用dockerfile文件进行制作,首先拉取一个原始的centos7镜像。
docker pull docker.io/centos:7
编写dockerfile文件的内容。
# 指定 *** 作的镜像 FROM docker.io/centos:7 # 安装ssh服务 RUN yum install -y openssh-server RUN yum install -y passwd RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_ecdsa_key RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_ed25519_key RUN echo "123456" | passwd --stdin root # 系统密码,可自行更改 ADD run.sh /run.sh EXPOSE 22 CMD ["/run.sh"] # 安装centos的yum源 RUN yum -y install epel-release RUN yum repolist RUN yum -y install vim wget gcc make libffi-devel zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel python3-devel # 指定语言,防止中文日志乱码 RUN yum -y update && yum install kde-l10n-Chinese -y && yum reinstall glibc-common -y && localedef -c -f UTF-8 -i zh_CN zh_CN.UTF-8 && echo 'LANG="zh_CN.UTF-8"' > /etc/locale.conf && source /etc/locale.conf ENV LC_ALL=zh_CN.UTF-8 LANG=zh_CN.UTF-8 # 安装python 3.6.8 WORKDIR /opt/install RUN wget https://www.python.org/ftp/python/3.6.8/Python-3.6.8.tgz # 解压 RUN tar -zxvf Python-3.6.8.tgz WORKDIR Python-3.6.8 RUN ./configure RUN make&&make install RUN python3 -m pip install --upgrade pip # 设置/opt为进入容器的默认位置 WORKDIR /opt
run.sh文件的内容如下,与dockerfile处于同一目录下:
#! /bin/bash /usr/sbin/sshd -D
创建镜像
docker build -t ch_centos:0 .3. 更新centos的sqlite3版本
一个很离谱的问题:centos7自带的sqlite3版本是3.7,然而启动django时sqlite3版本要求>=3.8,因此第2节中的基础镜像在打包django服务时会报错。
- 首先创建基于ch_centos:0生成的容器,并进入容器
docker run -tid --name base --privileged=true -t ch_centos:0 /usr/sbin/init docker exec -it base /bin/bash
- 更新sqlite3版本
# 下载源码 # 本人习惯把安装包下载/opt/install的目录下 cd install wget https://www.sqlite.org/2019/sqlite-autoconf-3290000.tar.gz # 编译 tar zxvf sqlite-autoconf-3290000.tar.gz cd sqlite-autoconf-3290000/ ./configure --prefix=/usr/local make && make install # 替换系统低版本 sqlite3 mv /usr/bin/sqlite3 /usr/bin/sqlite3_old ln -s /usr/local/bin/sqlite3 /usr/bin/sqlite3 echo "/usr/local/lib" > /etc/ld.so.conf.d/sqlite3.conf ldconfig # 查看系统环境中的sqlite3版本 sqlite3 -version # 查看python3中的sqlite3版本,二者一致即可 python3 import sqlite3 sqlite3.sqlite_version
在进入python3中检查sqlite3时,出现了另一个问题,python3运行出现警告“UserWarning:Could not import the lzma module .Your installed Python is incomplete.”
补充lzma的安装,首先下载相关安装包
yum install xz-devel -y yum install python-backports-lzma -y pip3 install backports.lzma
cd到python3的依赖包目录下,修改lzma.py
cd /usr/local/lib/python3.6 ls vim lzma.py
修改内容如下:
try: from _lzma import * from _lzma import _encode_filter_properties, _decode_filter_properties except importError: from backports.lzma import * from backports.lzma import _encode_filter_properties, _decode_filter_properties
上述 *** 作完成后,退出镜像,将base容器制作为新镜像,至此,一个基础的镜像已经完成。后续项目的打包可以在该镜像下进行具体项目文件的更新。
exit docker commit base ch_centos:1
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)