DockerFile案例

1.Docker项目案例

  需求说明:  编写Dockerfile文件构建镜像,来实现镜像创建容器时使用uwsgi启动美多商城项目

流程分析:

① docker环境部署: 使用docker镜像启动一个容器即可,由于我们需要在外部看到容器内效果,所以需要暴露端口信息
② 项目环境部署: 项目依赖模块环境:包括uwsgi+django等模块 
③ 项目部署: uwsgi配置:主要是uwsgi.ini
④ 测试: 宿主机测试


 

2. 项目手动部署步骤

方案实施:

① docker环境配置

# 1.1 查看docker镜像
docker images python3:v0.1
# 1.2 宿主机准备文件
mkdir -p /data/docker/image && cd /data/docker/image
cp -a /data/meiduo/meiduo_mall .
# 1.3 启动docker容器:容器名称叫meiduo
docker run -it --network=host --name=meiduo -v /data/meiduo/meiduo_mall/:/data/meiduo/meiduo_mall/ python3:v0.1

② 项目环境部署

# 2.1 容器中安装美多商城项目的依赖模块
docker exec -it meiduo
apt-get update
apt-get install libmysqlclient-dev -y
cd /data/meiduo/meiduo_mall/
pip3 install -r requirements.txt
cd scripts
pip3 install fdfs_client-py-master.zip
cd ..
rm -rf ~/.cache/pip/

③django项目部署

a. uwsgi配置文件编辑(uwsgi.ini)

[uwsgi]
# uwsgi配合nginx服务器使用,使用server指定服务器ip:port
socket=0.0.0.0:8001
# 项目目录
chdir=/data/meiduo/meiduo_mall/
# 项目中wsgi.py文件的路径,相对于项目目录
wsgi-file=meiduo_mall/wsgi.py
# 工作进程数
processes=4
# 工作进程中的线程数
threads=2
# uwsgi服务器的角色
master=True
# 存放主进程编号的文件
pidfile=uwsgi.pid
# 日志文件,因为uwsgi可以脱离终端在后台运行,日志看不见,以前的runserver是依赖终端的
daemonize=uwsgi.log
# 指定项目依赖的虚拟环境 
# virtualenv=/Users/smart/.virtualenvs/meiduo  该行注释掉原因如下
将美多商城项目下的uwsgi.ini文件进行如下修改:
1. 将virtualenv配置项注释:容器系统中直接安装的python3环境,没有使用到虚拟环境。

b. uwsgi 启动项目:

uwsgi --ini uwsgi.ini

④ 修改nginx配置文件meiduo.conf: (nginx配置文件位置在/etc/nginx/conf.d文件夹下)

# vi /etc/nginx/conf.d/meiduo.conf
server {
    listen 80;
    server_name www.meiduo.site;

    location =/ {
        root /data/meiduo/front_page/;
        index index.html;
        try_files $uri $uri/ =404;
    }

    location ~ \.html$ {
        root /data/meiduo/front_page/;
    }

    location /static {
        alias /data/meiduo/front_page/;
    }

    location / {
        include uwsgi_params;
        uwsgi_pass 192.168.19.130:8001;
    }
}

⑤ 访问www.meiduo.site, 进行登录测试

 

3. Dockerfile构建镜像 实现项目部署

① 环境分析

1. 增加项目文件,使用ADD或者COPY指令
    后端项目代码
2. 安装软件,使用RUN指令
    安装模块
3. 项目端口,使用EXPOSE指令
    需要暴露8001和8002端口即可
4. 容器运行,使用ENTRYPOINT

② 方案实践

a. 进入宿主机目录:

cd /data/docker/image

b. Dockerfile内容

# ① 基础镜像
FROM python3:v0.1

# ② 作者信息
LABEL maintainer=smartli.smartli_it@163.com

# ③ 执行操作
RUN apt-get update
RUN apt-get install libmysqlclient-dev -y
ADD ./meiduo_mall/ /data/meiduo/meiduo_mall/
WORKDIR /data/meiduo/meiduo_mall/
RUN pip3 install -r requirements.txt
WORKDIR scripts/
RUN pip3 install fdfs_client-py-master.zip
WORKDIR ../
RUN rm -rf ~/.cache/pip/

EXPOSE 8001 8002

# ④ 入口指令
ENTRYPOINT uwsgi --ini uwsgi.ini

编写Dockerfile时,需要对uwsgi.ini的配置文件再进行修改:
1. 将daemonize配置项注释:容器运行后必须有一个程序在前台运行,否则容器运行后马上会退出。

 c 构建指定镜像

docker build -t meiduo:v0.1 .

③ 效果查看

运行镜像:

docker run --network=host --name=web-01 -d meiduo:v0.1

查看8001端口

netstat -tnulp | grep 8001

访问www.meiduo.site,进行登录测试

 

上一篇:Github上42.4K的JAVA跑动起来


下一篇:MyBatic中,参数如何在SQL中获取