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,再拉取镜像,优先从私有仓库拉,没有在去国外
    
    
  • 相关阅读:
    Unix命令大全
    vs2008 与 IE8出现的兼容性问题
    Java 创建文件、文件夹以及临时文件
    如何修改Wamp中mysql默认空密码
    PAT 乙级真题 1003.数素数
    Tags support in htmlText flash as3
    DelphiXE4 FireMonkey 试玩记录,开发IOS应用 还是移植
    10 Great iphone App Review sites to Promote your Apps!
    HTML tags in textfield
    Delphi XE4 IOS 开发, "No eligible applications were found“
  • 原文地址:https://www.cnblogs.com/mqhpy/p/12838493.html
Copyright © 2011-2022 走看看