Docker踩坑实录
提示:
/ /中的内容均为本人瞎扯,无视即可。
中文文档: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.txtdockerfile中可以定制的方面有很多,使用的时候查看官方文档。
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 tag 将 ubuntu: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编辑文件;