【☆☆阿里云学习三☆☆】django部署、docker安装、docker镜像仓库、Jenkins在docker中安装、web服务使用docker部署
一、django项目在阿里云部署时遇到的问题
1、错误信息:Invalid HTTP_HOST header: ‘xxx.xx.xxx.xxx:8000’. You may need to add ‘xxx.xx’ to ALLOWED_HOSTS
解决办法: 修改创建项目时生成的setting.py文件,将ALLOWED_HOSTS = []改为ALLOWED_HOSTS = ['*']
2、报错信息:TemplateDoesNotExist
解决办法,参考:https://blog.csdn.net/wjy397/article/details/48976137,原因是无法找到tempates文件夹,且要主要文件夹的名称大小写,虽然本地运行没问题;
3、日志记录的时间和linux系统时间不一致
Django在配置文件settings.py 中 默认配置 UTC世界标准时间,修改为:TIME_ZONE = 'Asia/Shanghai'
========上面是很久之前记录的,没有使用docker部署,直接git拉取项目,然后命令启动项目的=========
二、docker安装
参考来源:https://www.runoob.com/docker/ubuntu-docker-install.html
其他参考:https://www.huaweicloud.com/zhishi/arc-3376452.html
1、安装
我自己阿里云linux服务器的安装方式,一条命令安装完成就可以直接使用docker了
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
aws安装docker命令:apt install docker.io
2、常用docker命令
(1)docker images 查看镜像
docker rmi <镜像id> 删除镜像
docker rmi REPOSITORY:TAG 删除tag
(2)docker ps 查看运行中的容器
docker ps -a 查看所有的容器
docker rm -f <容器 ID> 删除容器
(3)docker stop <容器 ID> 停止容器
docker start <容器 ID> 启动已经停止的容器
docker restart <容器 ID> 重启容器
(4)docker run -itd ubuntu:15.10 /bin/bash 创建一个新的容器,并运行一个命令 --name 容器名 :给新建的容器命名
-i: 交互式操作。
-t: 终端。
-d:后台运行
ubuntu: ubuntu 镜像。
/bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash
在使用 -d 参数时,容器启动后会进入后台。此时想要进入容器,可以通过以下指令进入
docker exec -it <容器 ID> /bin/bash 使用exec不会在exit退出容器时导致容器停止
(5) 创建命令
docker build -t 镜像名称:镜像tag . 这里的.就是Dockerfile文件所在的目录(1、如果代码没改动,运行该命令后实际还是原来的镜像;2、如果使用了已有的镜像名称和TAG,那么原来的镜像名称和tag会置为none)
(6)创建TAG(镜像来源的id也可以是已有的镜像名称:TAG表示,如果不加tag,则会默认为镜像名称:latest)
docker tag 镜像来源的id 创建的镜像名称:tag名称
(7)dockfile文件示例
Dockerfile文件是一个把项目打包成镜像的过程,示例如下
# 基于镜像基础 FROM python:3.6-slim-stretch RUN apt-get update # 创建目录 RUN mkdir -p /opt/data-qa/qa-mock # 复制指令,从上下文目录中文件复制到指定路径,这里的表示当前路径的内容复制到上面创建出来的目录 COPY . /opt/data-qa/qa-mock # 工作目录 WORKDIR /opt/data-qa/qa-mock # 安装qa-mock目录下requirements的依赖包 RUN pip install -r requirements.txt # 申明使用的端口 EXPOSE 9000
三、关于docker镜像仓库
默认仓库地址是 docker.io/library/
这个是docker官方的镜像地址,可能还需要注册啊啥啥啥的,而且服务器地址在海外。
这里我们可以使用阿里云自带的容器镜像服务,在服务控制台页面搜索'容器镜像服务'即可,跟着步骤来,创建密码什么的;
创建完镜像仓库后,查看镜像仓库的基本信息,然后再这个页面你就可以看到操作教程,包括登录啊,docker tag啊,docker pull啊,docker push啊,等等
尝试过修改默认地址,试了好久没成功。所以使用阿里云的镜像时,一定要按下面的命令来(带上了镜像地址),否则会指向docker的默认地址去了。
为了方便,我们还可以在docker build的时候镜像名就加上地址,还有tag v1,比如下面web服务可以这么写(如果不写:v1,则会默认tag为latest)
docker build -t 阿里云仓库地址/空间/web-demo:v1 .

三、Jenkins在docker中安装
Jenkins官网文档:http://www.jenkins.io/zh/doc/book/installing/#%E5%9C%A8docker%E4%B8%AD%E4%B8%8B%E8%BD%BD%E5%B9%B6%E8%BF%90%E8%A1%8Cjenkins
参考文档:https://www.cnblogs.com/fuzongle/p/12834080.html
docker快速安装jenkins命令,命令解释见Jenkins官网文档(注意--rm 在停掉后容器会删除, 但是数据不会丢失)
docker run \ -u root \ --rm \ -d \ -p 8080:8080 \ -p 50000:50000 \ -v jenkins-data:/var/jenkins_home \ -v /var/run/docker.sock:/var/run/docker.sock \ jenkinsci/blueocean
安装完之后,通过查看日志的命令查看后面登录时需要的密码,密码在日志中的两组星号中间
docker logs 项目名或PID
然后可以在公网使用域名+端口进行访问jenkins了,登录密码就是上一步获取的,用户名默认是admin
如果是要修改端口,要么删除容器重建,要么改配置,参考:https://www.cnblogs.com/sucretan2010/p/11406608.html
2022-01-01 因为Jenkins部署在容器中,导致不能执行宿主机的命令,so还是把Jenkins装回宿主机中吧
1、jdk依赖安装
apt-get install java-1.8.0-openjdk-devel
# 第二次安装上面那条命令装不了了。。。 # 其中第二条指令可能会出错。不要担心,只要执行完第三条后就会成功 # 按提示敲入回车 add-apt-repository ppa:webupd8team/java sudo apt update #更新库缓存 sudo apt install openjdk-9-jdk #安装jdk sudo apt -f install #修复依赖与覆盖问题,完成安装
2、jenkins安装(这这里的默认工作目录在/usr/lib/jenkins/)
sudo apt-get update sudo apt-get install jenkins
如果报错,则执行如下命令
wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add - sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list' sudo apt-get update sudo apt-get install jenkins
再不行则执行下面命令
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 最后面这里应该是报错时出现的一个串码key sudo apt-get update sudo apt-get install jenkins
参考:https://www.cnblogs.com/adnny/p/13570513.html
安装时若有如下报错


进入cd /etc/init.d目录执行jenkins start后发现 java版本问题,翻阅别人博客发现,Jenkins 不久前刚宣布:“从 6 月 28 日发布的 Jenkins 2.357 和即将发布的 9 月 LTS 版本开始,Jenkins 最低需要 Java 11”。至此,基本可以肯定就是版本问题了
卸载安装jdk:apt-get remove openjdk-8-jre-headless sudo apt install openjdk-11-jdk
卸载安装Jenkins:sudo apt-get remove jenkins apt-get install jenkins
3、修改默认的8080端口(下面命令中2个文件的8080修改为你想设置的端口,然后加载配置,重启服务)
vi /etc/init.d/jenkins vi /etc/default/jenkins systemctl daemon-reload systemctl restart jenkins
4、查看你的登录密码,第一次登录会有提示密码保存在哪个位置
cat /var/lib/jenkins/secrets/initialAdminPassword
四、web服务使用docker部署
参考:https://www.cnblogs.com/zouzou-busy/p/11838524.html
1、环境准备
服务器环境需要有nginx ,上一篇文章有写
docker需要有nginx镜像
docker pull nginx
git有安装和配置github仓库,上一篇文章有写
2、打包镜像,最后面的 . 表是当前目录,web-demo表示镜像名称(项目本地编译好,然后通过git上传到平台,最后服务器根据git拉取项目文件。注意ignore文件去掉dist,因为我们不可能在服务器中编译)
docker build -t web-demo .
3、docker启动命令,有参考上面的jenkins,接name后面的是容器名称,最后面的是镜像名称
docker run -u root --rm -d -p 2222:80 --name web-demo web-demo

浙公网安备 33010602011771号