docker详情及dockerfile nginx uwsgi 部署Djang项目
nginx介绍
nginx安装及目录介绍
安装
yum install nginx
nginx -v 查看版本
service nginx stop 关闭
service nginx start 启动
目录
配置文件目录 cd /etc/nginx/
log日志目录 cd /var/log/nginx/
默认首页目录 cd /usr/share/nginx/html/
使用/配置
vim nginx.conf
远程连接
创建一个nginx文件夹 用vscode打开之后
借助插件 远程连接
ctrl+shift+p 搜索sftp
docker
开启
docker service start
systemctl restart docker.service
停止
docker service stop
docker 官网安装
卸载旧版本
较旧的Docker版本称为docker
或docker-engine
。如果已安装这些程序,请卸载它们以及相关的依赖项。
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
安装yum-utils
软件包(提供yum-config-manager
实用程序)并设置稳定的存储库。
sudo yum install -y yum-utils
社区版本
sudo yum install docker-ce docker-ce-cli containerd.io
企业版本
sudo yum install docker-ee docker-ee-cli containerd.io
docker镜像资源
查看容器
docker ps
查看所有镜像
docker images
删除镜像
docker imi 名称
镜像资源重命名
docker tag 名称/版本 新名称/新版本
打包
docker save -o 镜像资源.tar 镜像资源
导入镜像资源
docker load -i 镜像资源.tar
历史
docker image history 镜像
搜索
docker serach 镜像
拉取
docker pull 镜像
docker 容器
运行容器
docker run -it --name 容器名 镜像资源 /bin/bash
查看正在运行的容器
docker container ls
docker ps
查看所有容器包括已经停止的
docker container ls --all
docker ps -a
退出当前的容器
exit
守护进程的方式运行容器不占用当前终端
docker run -dit --name 容器名 镜像资源 /bin/bash
进入后台正在运行的容器 - 退出后不停止运行
docker exec -it 容器名 /bin/bash
退出
ctri + c \ exit
停止和启动容器
docker stop/start 容器名
删除容器
docker rm 名称
删除一个正在运行的容器/强制删除
docker rm -f 容器名
对容器的详情查看
docker container 容器名
状态信息内容
docker container stats 容器名
容器打包成一个新的镜像资源
docker commit 容器名 镜像资源
部署的时候要先确定部署到那个系统上 完了 要把部署的系统的镜像资源拉取到本地
docker pull centos
运行
docker run -it --name 名字 centos /bin/bash
进入容器之后先要更新环境
yum update
在容器里面 安装过环境依赖之后项目代码也在里面 现在就要给他压缩成镜像资源
docker commit 容器名 镜像资源名
线上部署先将镜像资源打包成一个压缩包文件
docker save -o 镜像资源.tar
完了再把这个压缩包上传到远程服务器上,到了服务器上把这个镜像资源导入
docker load -i 镜像资源.tar 解压完就在服务器上生成了一个镜像资源
在以守护进程的方式启动这个镜像资源
docker run -dit --name 名 --network=host 镜像资源/bin/bash
进入容器
docker exec -it 名 /bin/bash
进入项目目录完了启动
如 python3 manages.py runserver
启动之后ip地址是127.0.0.1:8000 /docker容器运行的这个服务 /外网访问不到/只能在虚拟机上的浏览器访问
公网ip 绑定
python3 manages.py runserver 公网ip
dockerfile 镜像打包的一个工具
- 作用:docker部署的流程 以文件的形式写下来,去执行这个文件,代替我们实现docker部署操作
FROM 基于什么镜像
WORKDIR 指定镜像运行在哪个路径下
COPY 将宿主机的文件拷贝到镜像中去 ADD
RUN 运行shell语句
CMD 指定整个镜像启动运行的脚本 ENTRYPOINT
----------------------------
#启动运行基本系统
FROM unbutun
#安装环境
ADD ./requirements.txt /home
WORKDIR /home
RUN apt-get update && apt-get install python3-pip -y && pip3 install -r requirements.txt
# 导入项目文件
ADD ./项目名称 /home/项目名称
WORKDIR /home/项目名称
# 指定对外开放端口
EXPOSE 8001
# 运行项目
ENTRYPOINT uwsgi --ini uwsgi.ini
dockerfile 演示 - 自动化运维
创建一个文件夹
mkdir 文件夹
cd 到这个 文件中
打开文件 vim docerfile
在这个文件中写入你的脚本
------
#启动运行镜像资源
FROM unbutun
#安装环境
ADD ./requirements.txt /home
WORKDIR /home
RUN apt-get update && apt-get install python3-pip -y && pip3 install -r requirements.txt
# 导入项目文件
ADD ./项目名称 /home/项目名称
WORKDIR /home/项目名称
# 指定对外开放端口
EXPOSE 8001
# 运行项目
ENTRYPOINT uwsgi --ini uwsgi.ini
------
构建镜像
docker build -t 名 . --你写一个点 他就知道你要从当前目录去找dockerfile 文件 执行里面的命令
执行完这个之后就会有这个镜像资源
docker build -t 名 . --你写一个点 他就知道你要从当前目录去找dockerfile 文件 执行里面的命令
add和copy属性的使用
ADD - 解压后的 (直接帮你解压了)
COPY - 整个压缩包添加进来 (压缩包添加)
run和env的使用
RUN - 在启动的容器中执行安装指令
ENV - 指定变量
workdir的使用
指定工作目录。用 WORKDIR 指定的工作目录,会在构建镜像的每一层中都存在。(WORKDIR 指定的工作目录,必须是提前创建好的)。
docker build 构建镜像过程中的,每一个 RUN 命令都是新建的一层。只有通过 WORKDIR 创建的目录才会一直存在。
expose和entrypoint
EXPOSE
仅仅只是声明端口。
作用:
帮助镜像使用者理解这个镜像服务的守护端口,以方便配置映射。
在运行时使用随机端口映射时,也就是 docker run -P 时,会自动随机映射 EXPOSE 的端口。
ENTRYPOINT
类似于 CMD 指令,但其不会被 docker run 的命令行参数指定的指令所覆盖,而且这些命令行参数会被当作参数送给 ENTRYPOINT 指令指定的程序。
但是, 如果运行 docker run 时使用了 --entrypoint 选项,将覆盖 CMD 指令指定的程序。
优点:在执行 docker run 的时候可以指定 ENTRYPOINT 运行所需的参数。
注意:如果 Dockerfile 中如果存在多个 ENTRYPOINT 指令,仅最后一个生效
部署过程
- 构建dockerfilevim
#启动运行基本系统
FROM centos:7
#安装环境
ADD ./requirements.txt /home
WORKDIR /home
RUN yum -y update && yum install python36 -y && yum install python3-pip -y && yum install -y pcre-devel openssl-devel && yum install -y python36-devel && yum install -y gcc && yum install -y gcc-c++ && pip3 install -i https://pypi.douban.com/simple/ --upgrade pip && pip3 install uWSGI==2.0.19.1 && pip3 install -i https://pypi.doubanio.com/simple/ -r requirements.txt
# 导入项目文件
ADD ./yulinapp /home/yulinapp
WORKDIR /home/yulinapp
# 指定对外开放端口
EXPOSE 8001
# 运行项目
ENTRYPOINT uwsgi --ini /home/yulinapp/uwsgi.ini
ENTRYPOINT uwsgi --ini /home/yulinapp/uwsgi.ini --镜像里面uwsgi.ini绝对路径
-
把项目代码从桌面拉取到服务器上
我用的是xshell的xftp命令put
-
配置uwsgi
[uwsgi] #使用nginx连接时使用,Django程序所在服务器地址 #socket=0.0.0.0:8002 #直接做web服务器使用,Django程序所在服务器地址 http=192.168.88.128:8003 #项目目录 chdir=/home/industrial_infomation_api #项目中wsgi.py文件的目录,相对于项目自录 wsgi-file=industrial_infomation_api/wsgi.py #进程数 processes=4 #线程数 threads=2 #uwsgi服务器的角色 master=True #存放进程编号的文件 pidfile=uwsgi. pid #用户 uid=root gid=root
安装依赖出现的问题
yum 安装的时候,别人会问你是否安装
所有yum的时候,都加上-y
解决方法
主要是yum update 改成yum -y updat
yum 安装的时候,别人会问你是否安装
所有yum的时候,都加上-y
这个没有-y ,所有卡在那个地方了
yum的要加,pip的不用加啊
下来就是uwsgi安装不上的问题
yum install -y pcre-devel openssl-devel
yum install -y python36-devel
yum install -y gcc
yum install -y gcc-c++
安装完依赖会形成一个新的镜像启动这个镜像
docker run -dit -p 8001:8001 镜像
docker run -dit -p (也可以加ip地址)8001:8001 --name 容器名 镜像名
docker run -P --name televr televr:v1 使用-P的时候,这时候就用上了之前Dockfile配置的需要暴露的端口,宿主机端口同样也是随机分配的
-p 小写是手动映射
-P 大写的是自动映射也就是随机分配端口
大佬公司镜像
dockerfile端口和uwsgi端口还有docker run端口
docker run 主机端口:容器端口(dockerfile 抛出的端口)
nginx 监听的是容器端口
uwsgi_pass = uwsgi配置文件的ip:端口
/etc/nginx/uwsgi_params
给nginx配置一个9000端口 注意这里的localhost指的是我们容器的ip
docker run --name nginx -p 80:80 -v /opt/tngx232/conf/nginx.conf:/etc/nginx/nginx.conf -v
/home/docker-nginx/log:/var/log/nginx -v
/home/docker-nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf -d nginx
docker国内镜像源
# 创建或修改 /etc/docker/daemon.json 文件,修改为如下形式
{
"registry-mirrors" : [
"https://registry.docker-cn.com",
"https://docker.mirrors.ustc.edu.cn",
"http://hub-mirror.c.163.com",
"https://cr.console.aliyun.com/"
]
}
# 重启docker服务使配置生效
$ systemctl restart docker.service
————————————————
Xshell连接虚拟机
没有ifconfig
执行命令安装
yum search ifconfig
yum install net-tools.x86_64
输入你的虚拟机用户名和密码就行了
docker run --name nginxx -p 80:80 -v /home/docker-nginx/nginx.conf:/etc/nginx/nginx.conf -v /home/docker-nginx/log:/var/log/nginx -v /home/docker-nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf -d nginx
#启动运行基本系统
FROM centos:7
#安装环境
ADD ./requirements.txt /home
WORKDIR /home
RUN yum -y update
&& yum install python36 -y
&& yum install python3-pip -y
&& yum install -y pcre-devel openssl-devel
&& yum install -y python36-devel
&& yum install -y gcc
&& yum install -y gcc-c++
&& pip3 install -i https://pypi.douban.com/simple/ --upgrade pip
&& pip3 install uWSGI==2.0.19.1 && pip3 install -i https://pypi.doubanio.com/simple/ -r requirements.txt
# 导入项目文件
ADD ./industrial_infomation_api /home/industrial_infomation_api
WORKDIR /home/industrial_infomation_api
# 指定对外开放端口
EXPOSE 8001
# 运行项目
ENTRYPOINT uwsgi --ini /home/industrial_infomation_api/uwsgi.ini
docker 工具
更新
sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
命令
docker run -d -p 8088:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer
docker上启动nginx,并配置修改nginx的配置文件,nginx配置文件挂载目录操作 https://www.cnblogs.com/zgboy/p/14663154.html