zoukankan      html  css  js  c++  java
  • docker

    1 docker 介绍

    # 1  虚拟化---》虚拟机,硬件虚拟化
    # 2 docker:centos系统--》大约90m
    # 3 开源项目,诞生于2013----》17年以后--》两年多的时间
    # 4 基于go语言实现的---》docker ce:免费的  docker ee:收费
    # 5 轻量级的操作系统虚拟化解决方案
    # 6 Docker 的基础是 Linux 容器(LXC)等技术
    # 7 用户操作 Docker 的容器就像操作一个快速轻量级的虚拟机一样简单
    # 8 django写了个项目,
    	-部署到服务器---》代码放到服务器--》服务器装python环境(版本)--》django环境(版本)--》mysql(版本)
      -docker部署--》项目做成docker镜像-----》放到服务器---》拉起镜像(容器)---》项目就运行了
      
    # 9 虚拟机--》python,mysql,redis,nginx---》虚拟机的大文件,直接copy到新机器上,用虚拟机的软件打开---》跑起来---》就是你之前装好的操作系统
    
    # 10 跟传统虚拟机的比较
    # 11 都用同样的docker环境开发:不涉及到版本问题
    
    # 12 解决的问题
    	-保证程序运行环境的一致性;
    	-降低配置开发环境、生产环境的复杂度和成本;
    	-实现程序的快速部署和分发
      
    # 13 docker 是一个c/s架构软件(客户端,服务端)
    # 14 docker客户端通过restful跟服务端做交互
    # 15 服务端:容器,镜像,数据卷,网络
    
    # 16 客服端,服务端,仓库(放了一堆镜像):当客户端发一条命令(拉取redis镜像)---》服务端守护进程接收---》去仓库拿redis镜像,放到服务端本地
    
    
    # 学docker:就是学一堆命令
    

    image-20200328161437278

    3 centos安装docker

    # 1  centos7以上
    # 2 安装步骤
      -1 sudo yum update # 更新yum源
      -2 sudo yum install -y yum-utils device-mapper-persistent-data lvm2 # 安装一些依赖包
      -3 sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 把源设置为阿里云,安装比较快
      -4 sudo yum install docker-ce  # 安装docker-ce
      -5 docker -v    # 查看客户端版本
    
      -6 docker version  # 客户端和服务端的版本,看不到服务端的版本(服务端没有启动)
    
      -7 systemctl start docker # 服务端启动
    # 3 版本问题:
    	老版本:之前没有分docker ce 和docker ee ,17之前是老版本
      新版本:17以后,新版本(操作都不太一样)
      
    

    2 容器和镜像

    # 1 类和对象的关系:类可以产生对象,而且可以产生多个对象
    # 2 镜像和容器:一个镜像可以运行出多个容器,运行起来的容器:当成虚拟机:centos7+redis
    # 3 如果拉取了一个redis镜像:相当于一个linux操作系统上面安装了redis软件
    # 4 真正的执行,容器在运行(操作系统+软件)
    # 5 镜像:一堆文件,必须要运行起来,成为容器
    

    3 加速配置

    # 拉取镜像,是从远程拉的,在国外,速度非常慢,换成国内的镜像:清华,阿里。。。
    # 一开始没有:daemon.json 
    vi /etc/docker/daemon.json 
    # 设置成七牛源(如果启动不了,没有严格按照josn格式,排查一下即可)
    {
    "registry-mirrors": ["https://reg-mirror.qiniu.com"]
    }
    
    # 重启docker服务
    systemctl restart docker 
    
    systemctl stop docker  # 停止docker服务
    systemctl start docker # 启动docker服务
    
    systemctl status docker # 查看docker状态
    systemctl enable docker # 设置成开机启动
    docker info  # 查看docker 概要信息
    

    4 镜像操作

    #1  镜像查找
    docker search 镜像名字
    https://hub.docker.com/
    NAME   DESCRIPTION     STARS    OFFICIAL 
    镜像名字   描述          start数   是否是官方
    # 2 镜像查看(***)
    docker images  # 查看本地镜像
    REPOSITORY   TAG      IMAGE ID         CREATED             SIZE
    redis       latest    f0453552d7f2    2 weeks ago         98.2MB
    python      3.6       1daf62e8cab5    4 weeks ago         914MB
    
    # 3 镜像下载pull(****)
    docker pull centos:版本号
    docker pull centos # 表示下载最新的,等同于docker pull centos:latest
    docker pull centos:7
    docker pull centos:centos6.6
    
    # 镜像删除
    docker rmi 镜像名字/id号
    
    # 一次性删除所有镜像
    docker rmi `docker images -q`  # 这个不要用
    
    docker images -q # 过滤出所有id号
    

    5 容器操作

    # 创建并启动(创建(create)  启动(start))
    docker run 
    创建容器命令:docker run
    -i:表示运行容器
    -d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器)。
    -t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。
    --name :为创建的容器命名。
    -v:数据卷:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
    -p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射
    
    docker run -it --name=mycentos centos:7
       #接下来操作的是mycentos这个容器
       #可以安装软件,它就是一个centos7
       # 你之前拉取的redis的镜像:linux+redis软件
    	 # exit 退出,容器也就停止了
    docker run -di --name=mycentos2 centos:7
    	# docker run -d -i --name=mycentos2 centos:7	
    	# 每个容器都用自己的id号:b1eeace155b54e467dfcbc42bb2fa5b580db5463f230a3eae1b27b74de4c597
    
     docker run -d -i --name=mycentos3 centos:6.5  # 如果本地没有最新的centos镜像,先去拉,然后创建并允许
      
      
     # 启动一个redis容器
    docker run -di --name=myredis -p 6379:6379 redis
      # 把本机的reids停掉
      # 端口映射,6378 6379
      
    # 用docker 允许一个服务(装一个软件),变得异常简单
    	-linux安装redis(源码下载,解压,make & make insall)
        
    # 进入容器内部操作
    # 在容器上执行ps -a
    docker exec 85768eb78045 ps -a
    docker exec -it 85768eb78045 /bin/bash  # 当做进入到容器
    # Python容器
    docker exec -it 11f702f88de6 python
    
    # 以后,进入容器(相当于)
    docker exec -it 11f702f88de6 /bin/bash
    
    # attach:连到第一个进程上
    docker attach 11f702f88de6
    
    # ssh连接(容器安装ssh服务)
    
    #  容器删除
    docker rm 容器id/容器名字
    
    
    
    ##### 总结:
    docker run:创建并运行         
    docker exec:容器执行命令(通常用来:进入容器) docker exec -it 容器id/容器名字 /bin/bash
    
    
    #  文件拷贝
    # 从宿主机copy文件到容器
    docker cp 1.txt centos7:/home  # 把当前路径下的1.txt拷贝到容器的/home
    # 从容器copy文件到宿主机
    docker cp centos7:/home/1.txt 1.txt  # 把容器home路径下的1.txt拷贝到当前路径下
        
    # 查看容器  (查看正在运行,查看所有)
    查看正在运行的容器
    docker ps
    查看所有容器
    docker ps –a
    查看最后一次运行的容器
    docker ps –l
    查看停止的容器
    docker ps -f status=exited
    

    image-20200330114934159

    一个容器中有多个软件(一般情况下,不要在一个容器里装多个服务)

    mysql redis python

    centos---》装python--》装mysql--》装redis

    redis容器---》装python--》装mysql

    6 网络和数据卷

    # 1 目录挂载(数据卷) 把宿主机的目录映射到容器  宿主机test文件夹映射到容器内部
    docker run -di --name=mycentos -v /root/test:/home centos:7
    # 2 端口映射(网络)
    docker run -di --name=myredis -p 6378:6379 redis
      
    # 都可以跟多个
    
    # 查看容器信息
    
    docker inspect 容器名称(容器ID) 
    docker inspect --format='{{.NetworkSettings.IPAddress}}' mysql
    

    7 应用部署

    # docker中部署服务(redis,mysql,nginx)
    # 安装mysql
    # 1 拉一个镜像
    docker pull mysql:5.7
    # 2 运行起容器来
    docker run -di --name=mysql -p 33306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
    

    8 备份迁移

    # 容器保存为镜像
    #            容器名字   镜像名字
    docker commit centos7 my_image_centos7
    # 把镜像打包成一个压缩文件
    #把my_image_centos7镜像压缩到centos_my.tar中
    docker  save -o centos_my.tar my_image_centos7
    # 把压缩文件恢复成镜像
    docker load -i centos_my.tar
    
    

    9 dockerfile

    # Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像
    # 文件文件名必须叫 Dockerfile
    
    FROM python:3.6
    MAINTAINER lqz
    RUN pip install django==1.11.9  -i https://pypi.doubanio.com/simple
    RUN mkdir /home/lqz
    
    WORKDIR /home
    
    
    
    #如果从码云上拉下文件包含dockerfile,要切到文件中,执行
    docker build -t  别名:版本   #构建出镜像,
    
    docker build -t'django_img' .   # 构建出django_img 镜像
    
    
    
    
    #指定基础镜像
    FROM centos:7
    
    #指定维护者
    MAINTAINER Alvin alvincy@qq.com
    
    
    RUN mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
    
    RUN curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
    
    RUN yum makecache
    
    RUN yum update -y
    
    RUN yum install python3 -y
    
    RUN pip3 install django
    
    COPY docker /root/docker
    
    WORKDIR /root/docker
    
    EXPOSE 8080
    
    CMD ["python3", "manage.py", "runserver", "0.0.0.0:8080"]
    
    

    10 私有仓库

    # 公司自己的镜像,放到私有仓库(公司内部,张三,李四,都可以使用私有仓库的镜像)
    # 私有仓库本质就是一个web项目(linux+registry(用其他语言写的一个web服务))
    
    # 1 docker pull registry   拉取registry镜像
    # 2 docker run -di --name=registry -p 5000:5000 registry  运行容器
    # 3 浏览器访问:http://175.24.103.108:5000/v2/_catalog  返回空
    #修改daemon.json
    
    vi /etc/docker/daemon.json
    
    "insecure-registries":["175.24.103.108:5000"]
      
    # 4 重启docker 服务(所有容器都是停止状态)
    systemctl restart docker
    
    # 5 启动registry容器
    docker start registry
    
    # 6 标记镜像
    docker tag django_img 175.24.103.108:5000/django_img
    
    # 7 上传镜像(私有仓库)
    docker push 175.24.103.108:5000/django_img
      
    #8  再从浏览器访问http://175.24.103.108:5000/v2/_catalog
    能看到刚刚上传的镜像
    
    # 以后只要同时配置了daemon.json,再拉取镜像,优先从私有仓库拉,没有在去国外
    
    
  • 相关阅读:
    【Leetcode周赛】从contest-81开始。(一般是10个contest写一篇文章)
    【LeetCode】抽样 sampling(共4题)
    【LeetCode】拓扑排序 topological-sort(共5题)
    【LeetCode】几何学 geometry(共2题)
    【读书笔记】C/C++程序员面试秘籍
    【读书笔记】程序员面试笔记
    【sql】牛客网练习题 (共 61 题)
    HDU 6119 小小粉丝度度熊 双指针
    2017多校第7场 HDU 6128 Inverse of sum 推公式或者二次剩余
    2017多校第7场 HDU 6121 Build a tree K叉树,思维
  • 原文地址:https://www.cnblogs.com/mqhpy/p/12838493.html
Copyright © 2011-2022 走看看