• docker容器技术


    1.docker简介

    1.docker架构图             镜像  容器 仓库

    2.镜像 容器 仓库

    Docker镜像就是一个只读的模板,镜像可以用来创建容器,一个镜像可以创建多个容器。类似于(类和对象的关系)

     

    ssh root@39.101.184.220
    """
    1)docker就是Linux上及其轻量的虚拟机
    
    2)虚拟机是存在宿主系统中,通过镜像给宿主系统拓展子系统的(一个镜像理论上可以做n个子系统)
    
    3)两个特别重要的概念
        image:镜像
        container:容器(子系统)
        
    4)工作方式:
        i)在服务器系统下载docker(为服务器安装虚拟机,服务器系统就是宿主系统)
        ii)用docker去下载对应需求的镜像:镜像操作
        iii)通过镜像制造容器(装子系统):容器操作
        
    
    5)优势
        i)超级轻量级,docker安装的容器体积可以按kB度量
        ii)集群部署,docker可以通过一个镜像制造出多个一模一样的容器
        iii)便捷管理所有镜像与容器(命令行操作)
        
    6)镜像和容器特点
        一般一个镜像中只包含一种软件:比如mysql镜像,创建的容器中只有mysql环境;redis镜像,创建的容器中只有redis环境
        注:一个镜像中有多个环境的需要自己制作镜像
    """
    
    docker-ce : 免费(使用最多)
    docker-ee :收费

     2.docker安装

    # centos7 安装docker
    1 安装依赖
    sudo yum install -y yum-utils device-mapper-persistent-data lvm2
    2 设置docker yum源为阿里云
    sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
      
    3 安装
    sudo yum install docker-ce -y
    4.配置阿里云加速器
    cd /etc/docker
    daemon.json 文件
    vim daemon.json
    加入阿里云加速器地址 72idtxd8随便填
    { "registry-mirrors": ["https://72idtxd8.mirror.aliyuncs.com"] }
    保存后,重启docker拉取镜像的速度嘎嘎的

    3.启动docker

    systemctl  start  docker
    systemctl  status  docker
    systemctl stop docker
    systemctl restart docker

    4.拉取镜像测试 

    docker image pull  helloword

    docker 安装mysql redis

    1)安装
    >: docker image pull mysql:5.7
        
    2)创建容器:root根用户的密码MYSQL_ROOT_PASSWORD采用的是root
    命令解释: -p3306:3306 外部访问宿主机的3306端口映射到容器的3306端口
    >: docker container run -itd -p3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql:5.7 注:本地测试 >: mysql -hIP -P端口 -uroot -p密码 >: mysql -h 39.99.192.127 -P 3306 -u root -p >: root >: create database luffy default charset=utf8; >: grant all privileges on luffy.* to 'luffy'@'%' identified by 'Luffy123?'; >: grant all privileges on luffy.* to 'luffy'@'localhost' identified by 'Luffy123?'; >: flush privileges;

    redis
    docker image pull redis:4.09
    docker container run -itd -p6379:6379 redis:4.0.9
    解释: 前面为宿主机端口,后面为容器端口
    docker container run -itd -p6380:6379 redis:4.0.9
    redis-cli -h 192.168.1.105 -p 6379

    5.镜像操作

    1)列出镜像
    >: docker image ls
    
    2)拉取镜像
    >: docker [image] pull 镜像名:版本
    eg: docker image pull hello-world:latest    # 最后一个版本
    
    3)删除镜像
    如果有容器了,可以强制删除镜像。不推荐这么做
    >: docker image rm 镜像ID
    >: docker image rm 镜像名字:镜像版本  # 通过名字删除  
    docker image rm centos:centos7

    6.容器操作

    基本思路:

    拉取镜像  docker image pull redis ==>run容器 docker container run  -itd  -p6379:6379 redis:4.09==> 

     进入容器  docker exec 参数 容器it bash    修改配置

    docker container run -itd -p3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql:5.7
    docker exec --help      # 查看参数的含义
    
    1)创建容器    参数记住 itd 即可
    >: docker run [选项参数] 镜像名 [命令]
    创建容器命令:docker run
    -i:表示运行容器
    -t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。
    --name :为创建的容器命名。容器名字不能重
    -v:表示目录映射关系(前者是宿主机目录,后者是容器的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
    -d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器)。
    -p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射
    
    # 演示
    #基于哪个镜像跑容器:centos:centos7   如果写成centos表示跑最新的 
    #如果没有这个镜像呢?去远程拉,拉下来再跑,远程没有就报错
    
    # 1.容器要运行(跑完进入了容器)
    docker run -it --name=mycentos7 centos:centos7 /bin/bash
    /bin/bash:进入容器,并开一个终端
    
    bash:进入内层终端
    exit: 退出一层
    
     # 2.以守护进程形式跑(跑完没有进入容器)
    docker run -di  --name=mycentos2_2 centos:centos7
    
    
    2)查看所有容器:-a就是--all代表全部展示
    >: docker container ls -a    
    >: docker ps [-a]
    
    3) 容器的启动与停止
    docker stop 容器id/名字
    docker start 容器id/名字
    docker restart 容器id/名字
    
    4)kill掉一个已经在运行的容器
    >: docker kill 容器id
    
    5)删除容器
    停止后才能删除
    >: docker  rm 容器id
    
    6)进入容器
        1.exec(使用最多)
        2.attach
        3.ssh连接(容器要启动ssh服务22端口没有服务在监听)
    >: docker  exec 参数 容器id bash
    eg: docker exec -it mycentos7 bash
    eg: docker exec -it 685e1 bash          ************
    eg: docker exec mycentos2_2 ls  # 在mycentos2_2的容器中执行ls,并打印结果
    7)退出容器
    >: exit

    7. 目录映射  

    把docker容器的数据映射到宿主机保持同步,防止容器删除导致数据丢失
    或者修改Django代码,git拉取到宿主机目录,重启容器即可
    docker run -di --name=mycentos2_3 -v /root/data:/home/data centos:centos7 名字 宿主机/root/test映射到容器 /home/data 版本

    8.容器之间交互的两种方式

    1.可以直接通过容器IP交互
    2.可以都把端口号映射到宿主机,通过宿主机交互

    9.文件拷贝

    # 文件拷贝
    # 从宿主机copy到容器内部
    docker cp untitled3.tar mycentos2_2:/home
     # 从容器内部copy出来 
    docker cp mycentos2_2:/home/untitled3.tar ./

    10.查看容器信息

    docker inspect 容器名字/容器id # 查看容器详细信息
    # 查看ip地址
    docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器id/名字

    11.迁移与备份

    # 安装Python容器
    docker run -di --name=mydjango python:3.6
      
    # 安装django环境
    pip install django==1.11.9
    apt-get update
    apt-get install vim 
    
    # 把容器打包成镜像
    docker commit 容器名字 镜像名字
    docker commit mydjango mydjango_i
    
    # 基于镜像再跑起容器
    docker run -di --name=mydjango2 mydjango_i
    
    # 把镜像打成一个tar包,压缩一下(在当前目有个mydjango.tar)
    docker  save -o 压缩包名字.tar mydjango_i
    
    # copy这个压缩包到任意的机器上(装了docker)
    # 把压缩包,恢复成镜像
    docker load -i 压缩包名字.tar
    
    容器里装了python3.6 mysql,django, uwsgi ,redis 项目在里面---》镜像--》容器
    
    
    
    10个容器
    django+uwsgi    mysql   redis    一个一个起:docker-compose
    100台机器,10w容器 k8s

    12.dockerfile编写

    Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像,用来构建镜像的
    获取镜像的三种方式: # docker pull # 通过容器
    ---》打包成镜像--》压缩--》拿到任何位置 # 通过Dockerfile构建镜像 1、对于开发人员:可以为开发团队提供一个完全一致的开发环境; 2、对于测试人员:可以直接拿开发时所构建的镜像或者通过Dockerfile文件构建一个新的镜像开始工作了; 3、对于运维人员:在部署时,可以实现应用的无缝移植。

    dockerfile常用命令    vim 

    命令    作用
    FROM image_name:tag    定义了使用哪个基础镜像启动构建流程  # FROM 镜像名:版本
    MAINTAINER user_name    声明镜像的创建者
    ENV key value    设置环境变量 (可以写多条)
    (核心)RUN command    是Dockerfile的核心部分(可以写多条)
        eg:写要执行的命令(centos上装一个python3.6,原来在linux上装python,如何操作,就用命令一行一行写出来)
            RUN wget http://www..../python.tar.gz
            RUN tar -cvf python.tar.gz
            RUN cd python
            RUN make && make install
            RUN pip3 install django==1.11.9
    ADD source_dir/file dest_dir/file    将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后自动解压
    COPY source_dir/file dest_dir/file    和ADD相似,但是如果有压缩文件并不能解压
    WORKDIR path_dir    设置工作目录(上面操作的命令都是在这个目录,docker exec 进去,就在当前设置的路径下,之前是在根路径下)
    CMD [命令]    容器一运行,就会执行命令
    # ADD和COPY的区别?一个会解压,一个默认不会解压

    基于python3.6构建dockerfile镜像

    # 写一个Dockerfile,基于python3.6 搭建运行环境:django,drf,uwsgi
    # 名字必须交 Dockerfile ,当你构建的时候,会在当前路径下找这个文件,自动构建
    vim Dockerfile
    
    FROM python:3.6
    MAINTAINER lqz
    ADD ./django_test.tar /home
    RUN pip install -r /home/django_test/requirement.txt -i https://pypi.doubanio.com/simple
    CMD ["/bin/bash"]
    
    
    # 基于docker file构建镜像
    docker build -t='django1.11.9'   # django1.11.9就是构建完之后的镜像名字
    构建完之后就有一个django1.11.9的镜像
    # 基于该镜像构建容器
    docker run -di --name=myproject -p 8080:8080 django1.11.9
        
    # docker logs myproject   查看报错信息
  • 相关阅读:
    返回一个整数数组中最大子数组的和 1
    软件工程第一周开课博客
    体温上报系统总结
    Android 布局中如何使控件居中
    Android:Unable to find explicit activity class报错
    Android Studio 线性布局
    相对布局
    HTML5 video视频
    阅读笔记——《人月神话》
    体温汇报系统界面
  • 原文地址:https://www.cnblogs.com/bigbox/p/12849756.html
Copyright © 2020-2023  润新知