docker 使用

 docker
   前言:
     Docker是基于Go 语言 并遵从Apache2.0协议开源,
     Docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到
   任何流行的 Linux 机器上,也可以实现虚拟化.

-docker:是一个开源的应用容器引擎 c/s 架构程序 优点: 1.更快速的交付和部署 2.更高效的虚拟化 3.更轻松的迁移和扩展 4.更简单的管理
docker安装: 安装前的准备:
-1. yum 包更新到最新: sudo yum update -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 安装:sudo yum install docker-ce 查看docker版本: docker -v 设置ustc的镜像: 编辑该文件: vi /etc/docker/daemon.json 在该文件中输入如下内容: {"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]} 启动docker: systemctl start docker 停止docker: systemctl stop docker 重启docker: systemctl restart docker 查看docker状态: systemctl status docker 开机启动: systemctl enable docker 查看docker概要信息: docker info 查看docker文档: docker --help 容器与虚拟机的区别: 容器:是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统; 虚拟机:则是在硬件层面实现。 -重点: -镜像(image):镜像当做容器的源代码 -镜像操作: 查看镜像: docker images 搜索镜像: docker search 镜像名称 拉取镜像: docker pull 镜像名称 eg: docker pull centos:7 删除镜像: docker rmi 镜像ID 删除所有镜像: docker rmi `docker images -q` -容器(container):一个一个的操作系统 -容器操作: 查看正在运行的容器: docker ps 查看所有容器: docker -a 查看最后一次运行的容器: docker ps -l 查看停止的容器: docker ps -f status=exited 停止容器: docker stop 容器名称(或者容器ID) 启动容器: docker start 容器名称(或者容器ID) 退出当前容器: exit 文件拷贝:(考进去) docker cp 需要拷贝的文件或目录 容器名称:容器目录 (考出来) docker cp 容器名称:容器目录 需要拷贝的文件或目录 目录挂载: 创建容器 添加-v参数 后边为 宿主机目录:容器目录
           匿名挂载:-v映射时只写了容器内的路径,没写容器外的路径
            具名挂载:-v 卷名:容器内路径
            指定路径挂载: -v /本地路径:容器内路径
            eg:docker run -di -v /usr/local/myhtml:/usr/local/myhtml --name=mycentos3 centos:7
                查看容器IP地址: docker inspect 容器名称(容器ID) 
                                docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称(容器ID)
                删除容器: docker rm 容器名称(容器ID)
                创建容器: docker run
                    交互式创建: docker run -it  --name=容器名称 镜像名称:标签 /bin/bash
                    守护式创建: docker run -di --name=容器名称 镜像名称:标签
                        登录守护式容器方式: docker exec -it 容器名称 (或者容器ID)  /bin/bash
                    
                    注:创建容器常用参数说明:
                        -i:表示运行容器
                        -t:表示容器启动后会进入其命令行  
                        --name :为创建的容器命名
                        -d:在run后面加上-d参数,则会创建一个守护式容器在后台运行
                        -p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口
                        -v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。
            注:两者兼得关系   就好比  类(镜像) --> 对象(容器)  

docker 数据卷:
    让容器间数据共享:
        docker容器中产生的数据,同步到本地
    卷技术:目录的挂载,将我们容器内的目录,挂载到linux上面
    目的:容器的持久化和同步操作

    数据卷容器: volume-from 实现容器间的数据共享
        
        
    结论: 
        容器之间配置信息的传递,数据卷容器的生命周期一直持续到没有容器为止
        但是一旦你持久化到了本地,这个时候,本地的数据是不会删除的 
    
    dockerfile命令:
        CMD与ENTRYPOINT区别:
            cmd:指定这个容器启动的时候运行命令,只有最后一个生效,可被替代
            entpypoint:指定这个容器启动的时候运行命令,可以追加命令
            
            
docker网络:
    docker0:docker自带的路由  不支持容器名 进行访问
    docker中的所有网络接口都是虚拟的,虚拟的转发效率高
    只要容器已删除,对应的网桥一对就没了
    docker0:默认域名不能访问,要link打通    
        
--link: (新手使用) 不建议使用
    场景:容器1 跟 容器2 连接
    正向可以ping通过,反向不行
    本质:在hosts配置中增加了配置
    
自定义网络:docker已经帮我们维护好了对应的关系 (推荐使用)
    查看所有网络: docker network ls
    bridge: 桥接docker(默认)
    none: 不配配置网络
    host: 和宿主机共享网络
    containe: 容器间 网络连接 (局限大)

     
    --driver bridge
    --subnet 192.168.0.0/16
    --getway 192.168.0.1
    
    eg:docker network create 上面三参数
        
        
    优点: 
        redis:不同集群使用不用网络,保证集群是安全和健康的
        mysql:不同集群使用不用网络,保证集群是安全和健
        
        
网络连接:
    1.容器跟网络连接  docker network connect
        联通后将 容器名 放到了 网络下
        一个容器两个ip      
docker实例:
        
    安装Nginx: 拉取镜像:docker pull nginx 创建容器:docker run
-di --name=mynginx -p 80:80 nginx 安装mysql: 拉取镜像:docker pull centos/mysql-57-centos7 创建容器:docker run -di --name=mysql -p 33306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql 注:-p 代表端口映射,格式为 宿主机映射端口:容器运行端口 -e 代表添加环境变量 MYSQL_ROOT_PASSWORD 是root用户的登陆密码 远程登录mysql 连接宿主机的IP ,指定端口为33306 安装redis:
       1>   拉取镜像:docker pull redis   创建容器:docker run
-di --name=myredis -p 6379:6379 redis

       2>1.拉取镜像 docker pull redis
        2.创建conf与data文件夹
        3.在充分中创建 redis.conf,内部写入
            bind 0.0.0.0 #绑定地址
            daemonize NO
            protected-mode no #允许远程连接
            requirepass 123456 #密码
        4.docker run -p 6379:6379 --name=myredis
           -v /home/test/redis/conf/redis.conf:/etc/redis/redis.conf
           -v /home/test/redis/data:/data -d redis:alpine3.11 redis-server /etc/redis/redis.conf
           --appendonly yes # 默认持久化方式
高级使用:
       
     迁移与备份:
-1.容器保存为镜像: docker commit mynginx mynginx_i -2.镜像备份(tar文件): docker save -o mynginx.tar mynginx_i -3.恢复与迁移: -1.删除掉mynginx_img镜像 -2.docker load -i mynginx.tar Dockerfile: 定义:是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像(本质:dockerfile能生成镜像)
          注: 文件名必须叫dockerfile
1、对于开发人员:可以为开发团队提供一个完全一致的开发环境; 2、对于测试人员:可以直接拿开发时所构建的镜像或者通过Dockerfile文件构建一个新的镜像开始工作了; 3、对于运维人员:在部署时,可以实现应用的无缝移植
       命令:
         FROM image_name:tag               :定义了使用哪个基础镜像启动构建流程
         MAINTAINER user_name              :声明镜像的创建者
         ENV key value                     :设置环境变量 (可以写多条)
         RUN command                       :是Dockerfile的核心部分(可以写多条)
         eg:
           
         WORKDIR path_dir           :设置工作目录          ADD source_dir
/file dest_dir/file :将宿主机的文件复制到容器内
                                 注:如果是压缩文件,会在复制后自动解压
         COPY source_dir
/file dest_dir/file :和ADD相似,但是如果有压缩文件并不能解压
  

            使用脚本创建镜像:
                -1.创建目录: mkdir –p /usr/local/dockerdjango
                -2.创建文件Dockerfile: vi Dockerfile
                -3.相关配置
                    #依赖镜像名称和ID
                    FROM python:3.6
                    #指定镜像创建者信息
                    MAINTAINER TEST
                    #切换工作目录
                    WORKDIR /usr
                    RUN mkdir  /usr/local/mydocker
                    RUN pip install django==1.11.9
                    ENV PATH $JAVA_HOME/bin:$PATH
                -4.执行命令构建镜像: docker build -t='django1.11.9' .
                    注: 空格yu.不能省略
                -5.查看镜像是否建立完成: docker images
                
        docker私有库:
            搭建与配置:
                -1.拉取私有仓库镜像: docker pull registry
                -2.启动私有仓库容器: docker run -di --name=registry -p 5000:5000 registry
                -3.查看是否成功:
                    打开http://192.168.1.12:5000/v2/_catalog看到{"repositories":[]} 表示私有仓库搭建成功并且内容为空
                -4.修改daemon.json
                    vi /etc/docker/daemon.json 下 添加 {"insecure-registries":["192.168.1.12:5000"]} 
                    保存,退出  让 docker信任私有仓库地址
                -5.重启docker 服务  systemctl restart docker
                
            镜像上传私有库:
                -1.标记此镜像为私有仓库的镜像
                    docker tag django2.0 192.168.1.12:5000/django2.0
                -2.再次启动私服容器: docker start registry
                -3.上传标记的镜像: docker push 192.168.1.12:5000/django2.0
原文地址:https://www.cnblogs.com/wyf20190411-/p/13720593.html