服务docker化

一、单独使用docker container部署

1.首先我们开始编写dockerfile, 我可以通过dockerfile生成image,在生成container

FROM python:3.6 # 源镜像

ENV DJANGO_DEBUG=True # 设置环境变量, 项目中为了安全一些关键的配置项没有卸载settings中,而是通过环境变量获取的

ENV PYTHONIOENCODING=utf-8 

env TZ='Asia/Shanghai'  # env和ENV是同一个

run mkdir /logs  # 创建logs日志文件夹

WORKDIR /code  # 创建项目的文件夹

ADD project /code #  将项目project拷贝到image中code文件夹

RUN pip install  -r requirements/deploy.txt # run安装python依赖包

EXPOSE 8000 # 指定开发端口

ENV NAME iam  # 设置环境变量

CMD python manage.py runserver 0.0.0.0:8000 # 运行服务

2.在写好dockerfile文件之后,我们就可以构建image了

docker build -t pr1 .

这样我们就构建一个名为pr镜像, 使用docker images就可在镜像列表中查看了


图一

然后我就可以跑个容器了,我将这个container命名为pr

docker run -d -p 0.0.0.0:8007:8000 --name=pr1 pre


图一

我可是看看服务有没有启动, 打开http://localhost:8007/admin/查看后台是否正常


图二

使用docker log 可以查看运行情况

docker log 93ccfe3094e90078606542f6e0e603b14e728a2575a9d4c3072c0769765ac274

同时我们可以使用docker exec 进入容器


图四

同时我们查看了python运行的进程

二、使用docker-compose编排工具

1.我们仍需要Dockerfile, 在Dockerfile所在的新增docker-compose.yml, 内容也挺简单

version: '3'

services:

web:

    build: .

ports:

    -"5002:8000"

    network_mode: "bridge"

然后我们使用

docker-compose build

这里会生成一个以当前文件夹为前缀的image

图五

接下来我们使用

docker-compose up -d

图六

我们看一下启动的容器


图六.1

在访问以下后台

图七

这里要说一下遇到的坑:

1.一开始并未加入network_mode模式,导致每次build之后会产生一个新的network局域网


图八

而数据库在bridge这个局域网中,导致无法访问数据库

我们先来看一下生成局域网的信息,使用docker network inspect命令


图九

这个所在ip段是“172.22”, 然后我们在看看数据库所在容器的IP段bridge


图十

由于太长我截取了部分,这个局域网说在IP段是“172.17”, 同时也能看出这个containers中包含了我们生成pr_docker_web_1容器

还要说的是bridge是自动生成局域网

我们在文件里写bridge是‘ network_mode: "bridge"’是网络模式, 为容器选择什么样的网络模式,下面是官网的说明

图十一

你可能感兴趣的:(服务docker化)