标签:direct 启动 views 缓存 内容 require 改变 ice 并且
一、docker的概念
1、什么是docker?
docker是一种容器,而容器就是将软件打包成标准化单元,以用于开发、交付和部署,所以docker:
2、为什么需要docker?
二、docker操作
1、docker安装
#1、卸载旧的的docker [root@bogon yum.repos.d]# yum remove docker \ > docker-client > docker-client-latest > docker-common > docker-latest > docker-latest-logrotate > docker-logrotate > docker-selinux > docker-engine-selinux > docker-engine #2、建立yum源安装库 [root@bogon yum.repos.d]# yum install -y yum-utils \ > device-mapper-persistent-data > lvm2 [root@bogon yum.repos.d]# yum-config-manager \ > --add-repo > https://download.docker.com/linux/centos/docker-ce.repo #3、安装docker社区版 [root@bogon ~]# yum install docker-ce #4、启动docker [root@bogon ~]# systemctl start docker #5、查看docker版本 [root@bogon ~]# docker version
查看系统中存在的yum源库:
[root@bogon ~]# cd /etc/yum.repos.d/ [root@bogon yum.repos.d]# ls CentOS-Base.repo CentOS-fasttrack.repo CentOS-Vault.repo local.repo CentOS-CR.repo CentOS-Media.repo epel.repo CentOS-Debuginfo.repo CentOS-Sources.repo epel-testing.repo
2、docker命令的使用
[root@bogon ~]# docker search centos
[root@bogon ~]# docker pull centos
[root@bogon ~]# docker image ls [root@bogon ~]# docker images
[root@bogon ~]# docker run centos
[root@bogon ~]# docker ps
[root@bogon ~]# docker ps -a
#如果镜像产生的容器还有记录的话,先删掉容器,再删对应的镜像 #1、删除容器记录 docker rm 容器id #2、删除镜像 docker rmi 镜像名(镜像id) #3、批量删除容器记录 docker rm `docker ps -aq`
docker run -it --rm centos bash docker run 就是运行容器的命令。 #参数 -it :-i 是交互式操作,-t是终端 -rm:容器退出后将其删除,也可以不指定参数,手动docker rm,使用-rm可以避免浪费空间。 centos :镜像文件 bash:指定用交互式的shell,因此需要bash命令
3、构建自定义镜像文件
自己下载的镜像文件是没有一些工具的,如何将下载的镜像文件假如一些工具,下次可以接着使用呢?比如在centos容器中安装pip,然后将这个容器做成镜像,以后就使用pip镜像可以用这个,是不是相对方便一些呢?
#1、进入交互式的centos容器中 [root@bogon ~]# docker run -it centos:7.3.1611 [root@43dab434ca37 /]# #2、在容器中安装pip工具
#安装setuptools
[root@43dab434ca37 /]# yum install -y python-setuptools
#安装pip
[root@43dab434ca37 /]# easy_install pip
#查看版本
[root@43dab434ca37 /]# pip -V
#3、安装好pip之后,exit退出容器
[root@43dab434ca37 /]# exit
#4、查看容器记录
[root@bogon ~]# docker ps -a
#5、提交容器创建新的镜像
[root@bogon ~]# docker commit 8f69c9dc428a centos_pip
#6、查看镜像
[root@bogon ~]# docker images
4、Dockerfile自定制镜像
之前使用的镜像是从docker hub上获取的然后进行改造的镜像,但是有些需求是无法满足的,此时可以通过Dockerfile来进行定制,docker 可以从Dockerfile中读取指令并自动构建镜像。Dockerfile 是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令 构建一层,因此每一条指令的内容,就是描述该层应当如何构建。
dockerfile 参数解释
Dockerfile
FROM centos #base image,如果有指定版本的base image使用 FROM centos:7.3.1161
LABEL maintainer=“xxx@xx.com" #
LABEL version="1.0"
LABEL description="This is description! #关于image的注释信息
#对于复杂的RUN命令,避免无用的分层,多条命令用反斜线换行,合成一条命令! RUN yum update && yum install -y vim Python-dev #反斜线换行 RUN yum install python-setuptools -y WORKDIR /root #相当于linux的cd命令,改变目录 WORKDIR /test #如果没有就自动创建 WORKDIR demo #再进入demo文件夹RUN pwd #打印结果应该是 /test/demo 尽量使用绝对路径
EXPOSE 8000 #暴露容器内部的端口号,以及宿主机的使用
CMD ["python","app.py"] #容器启动后默认执行的命令和参数
#把宿主机内的文件,添加到容器内 #添加文件到容器内,并且还有解压缩的功能 ADD and COPY ADD hello / #把本地文件添加到镜像中,本地的hello可执行文件拷贝到镜像的/目录 ADD test.tar.gz / #添加到根目录并解压 WORKDIR /root ADD hello test/ #进入/root/ 添加hello可执行命令到test目录下,也就是/root/test/hello 一个绝对路径 COPY hello test/ #等同于上述ADD效果 ADD与COPY - 优先使用COPY命令 -ADD除了COPY功能还有解压功能 添加远程文件/目录使用curl或wget ENV 变量名 变量值 #格式 ENV MYSQL_VERSION 5.6 #设置一个mysql常量 RUN yum install -y mysql-server=“${MYSQL_VERSION}”
5、docker hub的使用
上述已经创建自定义的镜像,如何将镜像上传到docker hub以便以后可以拉下来直接使用呢?
#1、在linux上进行登陆,输入帐户名和密码 [root@bogon ~]# docker login #2、注意要保证image的tag是账户名 格式:语法是: docker tag 镜像名 帐户名/镜像名名 [root@bogon ~]# docker tag centos_pip shenjianping0307/centos_pip #3、推送docker image到docker hub [root@bogon ~]# docker push shenjianping0307/centos_pip:latest #4、登陆自己的账号进行检查,是否推送成功 https://hub.docker.com/ #5、测试将本地的镜像删掉,从docker hub上拉取刚推送上去的镜像 #删除本地镜像 [root@bogon ~]# docker rmi shenjianping0307/centos_pip:latest #查看镜像 [root@bogon ~]# docker images #拉取镜像 [root@bogon ~]# docker pull shenjianping0307/centos_pip:latest #运行交互式镜像 [root@bogon ~]# docker run -it shenjianping0307/centos_pip
三、docker应用
1、dockerfile部署django应用(将django程序作为容器运行)
创建一个django项目docker_test,如下图所示为docker_test的目录结构:
[root@bogon docker_test]# tree . ├── app01 │ ├── admin.py │ ├── apps.py │ ├── __init__.py │ ├── migrations │ │ └── __init__.py │ ├── models.py │ ├── tests.py │ └── views.py ├── dockerfile ├── docker_test │ ├── __init__.py │ ├── __pycache__ │ │ ├── __init__.cpython-35.pyc │ │ └── settings.cpython-35.pyc │ ├── settings.py │ ├── urls.py │ └── wsgi.py ├── manage.py ├── requirements.txt └── templates 5 directories, 16 files
可以看到,知识在django的manage.py文件的同级,添加了dockerfile以及requirements.txt文件,dockerfile文件的内容为:
FROM python:3.5.2 #base image LABEL author="bright" #作者信息 ENV PYTHONUNBUFFERED 1 #输出不缓存 RUN mkdir /webapps #创建目录 COPY requirements.txt /webapps WORKDIR /webapps RUN pip install -r /webapps/requirements.txt ADD . /webapps/ CMD [ "python", "./manage.py", "runserver", "0.0.0.0:8080"]
requirements.txt文件为需要安装的包:
django==2.0
当上述完成后进行镜像生成:
[root@bogon docker_test]# docker build -t shenjianping0307/django_docker . #注意最后面是有一个点的
注意:执行生成镜像命令需要在dokkerfile这一级执行,否则找不到dockerfile文件
此时,可以查看生成的镜像:
[root@bogon docker_test]# docker images
运行镜像生成容器实例:
[root@bogon docker_test]# docker run -it --rm -p 8000:8080 --name django_test shenjianping0307/django_docker
注意:8000:8080表示宿主机的端口号映射到容器内的端口号
进行访问8000端口:
注意:项目中settings文件中
ALLOWED_HOSTS = [] #修改为 ALLOWED_HOSTS = ["*"]否则报错
这样项目的镜像做好后可以直接推送到docker hub,下次使用直接拉下来就可以使用了,注意先登陆,然后再推送。
[root@bogon /]# docker login #进行登陆
[root@bogon /]# docker push shenjianping0307/django_docker #进行推送
当然,也可以保存到本地:
[root@bogon /]# docker save shenjianping0307/django_docker > /temp/django_docker.tar.gz #导出镜像到本地
如果需要使用,在将其导入到镜像库:
#使用docker load从本地文件中导入到本地docker镜像库 [root@bogon temp]# docker load < django_docker.tar.gz #导入本地镜像到docker镜像库
2、利用docker容器搭建环境进行部署应用
[root@bogon ~]# docker pull centos:7.3.1161
docker run -it centos:7.3.1611
#安装必要工具 yum-utils 管理repository及扩展包的工具 [root@48a90994f9b7 /]# yum install yum-utils -y #安装缺失的软件依赖,使用下面的命令会自动处理 [root@48a90994f9b7 /]# yum-builddep python -y #安装wget [root@48a90994f9b7 /]# yum install wget -y #获取python包 [root@48a90994f9b7 /]# wget https://www.python.org/ftp/python/3.5.2/Python-3.5.2.tgz #解压到指定目录 [root@48a90994f9b7 /]# tar xvf Python-3.5.2.tgz -C /usr/local/ #在/usr/local下建立目录Python3 [root@48a90994f9b7 local]# mkdir Python3 #切换到已经解压的目录,配置安装目录、编译源码、执行源码安装 [root@48a90994f9b7 Python-3.5.2]# ./configure --prefix=/usr/local/Python3 #配置安装目录 [root@48a90994f9b7 Python-3.5.2]# make #编译 #注意在make时如果出现bash: make: command not found错误,执行 yum -y install gcc automake autoconf libtool make yum install gcc gcc-c++ [root@48a90994f9b7 Python-3.5.2]# make install#执行源码安装 #创建python3.5.2软连接 [root@48a90994f9b7 bin]# ln -s /usr/local/Python3/bin/python3 /usr/bin/python3
安装python时自带了pip但是版本较低,进行升级。
#创建pip软连接 [root@48a90994f9b7 bin]# ln -s /usr/local/Python3/bin/pip3 /usr/bin/pip3 #对pip升级 [root@48a90994f9b7 bin]# pip3 install -U pip #查看版本 [root@48a90994f9b7 bin]# pip3 -V
这个就是一个包含python3.5.2以及最新版本的pip的容器,现在给它生成一个镜像,以后开发环境就用它。
#退出容器 [root@48a90994f9b7 /]# exit #查看容器记录 [root@bogon temp2]# docker ps -a #生成镜像 [root@bogon temp2]# docker commit 48a90994f9b7 centos-with-python3
现在使用这个镜像来运行django项目
#交互式进入镜像 [root@bogon ~]# docker run -it centos-with-python3 #安装django模块 [root@17c5ac5c5ebe /]# pip3 install django==2.0 #新建一个目录用于存放django项目 [root@17c5ac5c5ebe /]# makedir webapps #进入目录创建项目 [root@17c5ac5c5ebe webapps]# python3 /usr/local/Python3/lib/python3.5/site-packages/django/bin/django-admin.py startproject mysite #注意:django-admin.py如果软连接会出错ImportError: No module named django.core
#生成项目的镜像
[root@bogon ~]# docker commit 17c5ac5c5ebe django_test
#运行项目镜像,主要进行端口映射,这里事先规定好了django的端口8080
[root@bogon ~]# docker run --name django_demo -itd -p 8900:8080 -v /webapps/mysite django_test:latest
#注意:--name 是生成容器的名字;-itd 输入输出终端,后台运行;-p host端口 端口映射;-v host路径 容器内路径(这里其实写什么目录没有什么影响,/webapps也是可行的,
主要看容器内的操作);最后是使用的镜像名
#进入容器内部,启动django程序
[root@bogon ~]# docker attach django_demo
[root@ee8ce815f137 /]# cd webapps/mysite/
[root@ee8ce815f137 mysite]# ls
db.sqlite3 manage.py mysite
[root@ee8ce815f137 mysite]# python3 manage.py runserver 0.0.0.0:8080 #启动
Performing system checks...
标签:direct 启动 views 缓存 内容 require 改变 ice 并且
原文地址:https://www.cnblogs.com/shenjianping/p/11126957.html