Docker+Github+Jenkins实现django项目自动化容器部署
一、目标服务器Docker的安装
以Centos7.6安装为例
1、配置阿里的docker-ce仓库
[root@instance-j69t4n5q ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
2、查看可选择的docker-ce版本
[root@instance-j69t4n5q ~]# yum list docker-ce --showduplicates|sort -r
3、安装指定版本docker
[root@instance-j69t4n5q bin]# yum -y install docker-ce-18.06.3.ce
4、常用命令
1)启动、关闭、重启DOCKER
systemctl enable docker (开启服务)
systemctl start docker (启动服务) systemctl stop docker (关动服务)
systemctl daemon-reload
systemctl restart docker.service (重启)
2)查看版本:docker version
查看详细信息:docker info

3)附:其它可能常用到的命令
拉取docker镜像:docker pull image_name
Docker Hub 上去下载某个镜像: docker pull centos:latest
运行docker镜像:docker run 名称
查看docker存在的镜像: docker images
查看哪 些容器正在运行: docker ps (docker ps -a 查看所有容器无论是否运行)
查看container_id:docker container ls -a
启动docker内的镜像
docker start container_name/container_id
docker restart container_name/container_id
docker stop container_name/container_id
删除镜像
docker ps
docker stop container_name/container_id //停止该docker
docker rm container_name/container_id //删除docker容器(docker container ls -a查看ID)
docker rmi image_name //删除镜像 (docker images查看ID)
docker默认保存目录:var/lib/docker/
进入容器 docker exec -it 容器ID bash
本地向DOCKER内传输文件:docker cp test.html 7033a9d7f7a1:/usr/share/nginx/html
(文件名 DOCKER ID 目标目录)
二、建立dockerfile
在django项目下新建dockerfile文件和docker-compose.yml文件,输入以下内容
Dockerfile文件内容:
# 从仓库拉取 带有 python 3.7 的 Alpine Linux 环境
FROM python:3.7-alpine
# 作者信息
LABEL "author"="fc"
LABEL "blog"="https://www.7dy.cn/"
LABEL "E-mail"="xx@qq.com"
# 构建参数,工作目录
ARG work_dir=/www/blog
RUN mkdir -p ${work_dir}
WORKDIR ${work_dir}
# 构建参数,pip源
ARG pip_url=https://pypi.douban.com/simple
ARG pip_host=pypi.douban.com
# 更新 pip 到最新
RUN pip install pip -U -i ${pip_url}
# 将当前目录复制到容器的工作目录
ADD . /${work_dir}
# 安装alpine依赖, system update\ mysqlclient\ system lib\ Pillow\ bash
RUN apk update \
&& apk add --virtual mysqlclient-build gcc python3-dev musl-dev \
&& apk add --no-cache mariadb-dev \
&& apk add --virtual system-build linux-headers libffi-dev \
&& apk add --no-cache jpeg-dev zlib-dev freetype-dev lcms2-dev openjpeg-dev tiff-dev tk-dev tcl-dev \
&& apk add --no-cache bash bash-doc bash-completion \
&& pip install pip -U \
&& pip install -r ${work_dir}/requirements.txt -i ${pip_url} --trusted-host ${pip_host}
# 在Alpine上,pip将从源代码构建需要依赖包来install,如mysqlclient需要gcc和musl-dev,因此需要将apk del *-build推迟到安装Python模块之后
RUN apk del mysqlclient-build \
&& apk del system-build
docker-compose.yml文件内容,以下的DB密码改为自己的
version: "3"
services:
app:
restart: always
build: . # '点'代表当前目录
command: "python3 manage.py runserver 0.0.0.0:8002"
volumes: # 挂载当前本地目录至容器/www/blog上
- .:/www/blog
ports:
- "8002:8002"
depends_on: # 表示DB容器启动后才会运行
- db
db:
image: mysql:5.7
volumes: # 挂载本地目录至容器上
- "./mysql:/var/lib/mysql"
ports:
- "3306:3306"
restart: always
environment: # 定义环境变量MYSQL的ROOT密码和数据库名称
- MYSQL_ROOT_PASSWORD=密码
- MYSQL_DATABASE=blog
注意以上密码处还需要自己更新下
最后目录结构如下

三、GITHUB的代码发布
1、注册GITHUB账号
进入 https://github.com注册账号
2、创建库
注册成功后,点击页面右上角头像个人选项,下拉项选择Your repositories进入以下界面,New创建一个
输入库名,及选择代码公开还是私密,创建完成

3、客户端的安装与使用
1、进入下载客户端
windowns http://msysgit.github.io/
MACOS http://code.google.com/p/git-osx-installer/downloads/list?can=3
按提示默认安装即可
2、配置GIT
1)打开进入git bash 首先在本地创建ssh key,
输入命令:ssh-keygen -t rsa -C "your_email@youremail.com"
按提示默认回车下一步即可
成功的话会在~/下生成.ssh文件夹,进去,打开id_rsa.pub,复制里面的key
2)打开你GitHub的设置界面,找到SSH and GPG keys这个选项之后,在网页右上角有一个添加新的SSH keys 点击

3)测试,输入 ssh -T git@github.com
如果是第一次的会提示是否continue,输入yes就会看到:You've successfully authenticated, but GitHub does not provide shell access 。这就表示已成功连上github
4)接下来我们要做的就是把本地仓库传到github上去,在此之前还需要设置username和email,因为github每次commit都会记录他们。
$ git config --global user.name "your name"
$ git config --global user.email "your_email@youremail.com"
5)进入要上传的仓库目录,右键git bash,添加远程地址:
$ git remote add origin git@github.com:yourName/yourRepo.git
后面的yourName和yourRepo表示你再github的用户名和刚才新建的仓库,加完之后进入.git,打开config,这里会多出一个remote "origin"内容,这就是刚才添加的远程地址,也可以直接修改config来配置远程地址。
如果以上报:fatal: not a git repository (or any of the parent directories): .git,则运行以下
创建新文件夹,打开,然后执行 git init 以创建新的 git 仓库。
6)上传代码
上传:git add .
暂存修改的文档:git commit -m "代码提交"
传至服务器:git push origin master
查看状态:git status
4、上传成功后,可以看到最近文件,如下显示

四、手工部署
1、在服务器安装Docker-Compose
Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排
首先下载docker-compose
curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.4/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
给执行权限 chmod +x /usr/local/bin/docker-compose
最后查看版本:docker-compose version

2、进入服务器建立相关目录
mkdir /web/blog/www
3、git下载代码至www目录下
进入www目录,执行以下
基础配置
$git config --global user.name "fcemails"
$git config --global user.email "fcemails@163.com"
初始化配置
$git init
$git remote add origin https://github.com/fcemails/fcblog.git
克隆下载代码
$git clone https://github.com/fcemails/fcblog.git
以后每次更新代码
$git pull https://github.com/fcemails/fcblog.git
完成后可看到下载后的代码目录

4、使用Docker-Compose启动项目
执行docker-compose up等待部署docker项目

停止项目:docker-compose down
后台运行项目:docker-compose up -d
5、完成后输入http://IP:8002,如能显示页面则正常
如安装过程中docker下载失败,可配置加速(强烈建议配置)
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://2frolikr.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
五、利用Jenkins实现发布及代码的更新
待整理更新