• docker基础


    一、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、镜像加速

    #进入配置文件
    [root@bogon ~]# vim /etc/docker/daemon.json 
    
    #在daemon.json文件中加入下面的内容
    {"registry-mirrors": ["http://regisrty.docker-cn.com"]}

    #如果有多个加速,可以加入多个
    {"registry-mirrors": ["http://95822026.m.daocloud.io","http://regisrty.docker-cn.com"]}

    3、docker命令的使用

    • 获取docker镜像
    [root@bogon ~]# docker search centos
    • 下载docker镜像
    [root@bogon ~]# docker pull centos
    • 查看docker存在的镜像
    [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命令

     4、构建自定义镜像文件

      自己下载的镜像文件是没有一些工具的,如何将下载的镜像文件假如一些工具,下次可以接着使用呢?比如在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

    5、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}”  

    6、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容器搭建环境进行部署应用

    • 获取基础的系统镜像centos
    [root@bogon ~]# docker pull centos:7.3.1161
    • 进入交互式的容器中
    docker run -it centos:7.3.1611 
    • 安装python
    #安装必要工具 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
    • 对pip升级

    安装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项目

    现在使用这个镜像来运行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...

    • 访问django项目

  • 相关阅读:
    Java基本数据类型的包装类
    Java数据类型基础
    Xscan安装
    Notepad++配置HexEditor插件
    [WP]XCTF-re2-cpp-is-awesome
    [WP]XCTF-tt3441810
    [WP]XCTF-re1-100
    [WP]XCTF-Mysterious
    [WP]xctf-parallel-comparator-200
    [WP]XCTF-elrond32
  • 原文地址:https://www.cnblogs.com/shenjianping/p/11126957.html
Copyright © 2020-2023  润新知