提示:

/ /中的内容均为本人瞎扯,无视即可。

官方文档:https://docs.docker.com/

中文文档:https://yeasy.gitbook.io/docker_practice/

零、常用命令

#查看已创建的镜像
sudo docker images
#启动
systemctl start docker
#查看docker运行状态
systemctl status docker
#登录
docker login
#拉取镜像 docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]
docker pull python:3.8-slim

一、本地打包Django应用

1.dockerfile

例如我要部署一个Django程序,先生成这个项目的requirements.txt,在项目的根目录执行

#那个点的意思是当前目录
pipreqs . --encoding=utf-8

在项目根目录下新建文件:dockerfile

FROM python:3.8-slim-buster
WORKDIR /app
COPY . .
RUN pip3 install -r requirements.txt

dockerfile中可以定制的方面有很多,使用的时候查看官方文档。

2.国内镜像加速

阿里云镜像获取地址:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

编辑daemon.json,添加一行:

"registry-mirrors":["阿里云提供的加速地址"];

重启docker服务即可

3.创建和运行

/ 这个过程报错的概率还蛮大的,一步一步根据提示&谷歌改就好了。/

创建:

docker build -f dockerfile路径 . -t 镜像名

创建并运行,此命名将该容器映射到本地80端口:

#docker run -it -d -p 80:8000 --name mysite django_docker_img:v1
docker run -it -d -p 80:8000 --name 容器名 镜像名

mysite是容器名,django_docker_img:v1是镜像名

-t:让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上

-i:让容器的标准输入保持打开

-p:这是将容器中的某一个端口映射到本地主机上,前一个数字是本地主机上的端口,后面的才是容器上的端口。

-d:让容器在后台运行(--detached),这样容器的输出就不会显示在终端了。

可以用docker ps查看运行情况。

进入容器内部:

docker exec -it mysite bash

会发现此刻处于Dockerfile中设置的工作目录,该目录下内容即为项目文件内容。输入exit即可退出。

然后进去用python3 manage.py runserver 0.0.0.0:8000运行Django项目即可,如果有数据库记得迁移。这里如果不用0.0.0.0:8000启动,而是用默认的127.0.0.1:8000,本地主机是访问不了的。

/ 感动!!!!! /

二、在Ubuntu上使用NGINX+uwsgi+Django

0.私有仓库的配置

你可以使用官方 registry 镜像来运行。

docker run -d -p 5000:5000 --restart=always --name registry registry

这将使用官方的 registry 镜像来启动私有仓库。默认情况下,仓库会被创建在容器的 /var/lib/registry 目录下。

创建好私有仓库之后,就可以使用 docker tag 来标记一个镜像,然后推送它到仓库。例如私有仓库地址为 127.0.0.1:5000

先在本机查看已有的镜像。

使用 docker tagubuntu:latest 这个镜像标记为 127.0.0.1:5000/ubuntu:latest

格式为 docker tag IMAGE[:TAG] [REGISTRY_HOST[:REGISTRY_PORT]/]REPOSITORY[:TAG]

使用 docker push 上传标记的镜像。

curl 查看仓库中的镜像。

curl 127.0.0.1:5000/v2/_catalog

这里可以看到 {"repositories":["python"]},表明镜像已经被成功上传了。

1.安装

环境为Ubuntu20.04

安装docker略过,自行查看https://docs.docker.com/engine/install/ubuntu/

安装完后记得修改加速地址:

sudo vim /etc/docker/daemon.json

加入:(阿里云镜像获取地址:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

{"registry-mirrors": ["阿里云加速地址"]}

保存退出,重启docker:

sudo systemctl reload docker
sudo systemctl restart docker

如果重启docker服务时遇到 docker.service is not active,cannot reload问题需要重启ubuntu系统。

sudo docker info

使用命令之后在最后几行出现以下信息代表配置成功:

Registry Mirrors:
  https://xxxx.mirror.aliyuncs.com/

完成后可以尝试运行一下sudo docker run hello-world看看docker是否安装成功。

2.Python+uwsgi

这里nginx单独一个容器,uwsgi+django为一个容器。

先生成requirements.txt。

先拉取镜像:

docker pull ubuntu:20.04

创建容器并运行:

docker run -it -d --name myubuntu ubuntu:20.04

其中history为镜像名字。

把Django的程序文件拷贝到容器:

docker cp /home/docker/history/ myubuntu:/home/

用如下命令进入容器:

docker exec -it myubuntu bash

给pip和apt换源:

pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

然后安装requirements和django:

pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install uwsgi -i https://pypi.tuna.tsinghua.edu.cn/simple

我安装uwsgi的时候报错:Exception: you need a C compiler to build uWSGI

查资料得知需要安装python-dev,于是:

apt-get update
apt-get install python-dev

进度:

创建了Python3.8容器,但是无法安装uwsgi;另外无法用vi编辑文件;

tags: none

Add a new comment.