vlambda博客
学习文章列表

[学习交流] Docker 小结

成都黑马线下开班时间:

                java37期基础班:2020.6.15

                java38期基础班:2020.7.10

                java39期基础班:2020.7.30

                前端10期基础班:2020.7.15


报名六月基础班进班学员还可以抽奖哦,笔记本电脑等你带回家!

一、docker的基本概念
1、应用容器:
    概念:容器就是存放东西的地方、应用容器就是存储软件的地方
          比如:我们可以 把centos。tomcat、jdk 按照到容器上
                容器可以模拟出一台迷你的小型计算机一样,帮我们运行这些软件
2、容器和虚拟机的区别
    共同点:都是利用虚拟机化的技术,提供软件的独立运行环境。
    虚拟机技术:完全的虚拟化出一台计算机(硬件),安装操作系统,安装并运行软件
    容器技术:也是一种虚拟化技术,但是它不会虚化硬件和操作内核,它会共用宿主机的OS内核和硬件
    
    容器的优点:启动快、体积小、性能高、迁移方便
    虚拟机优点:隔离性强
3、什么是docker 
    docker 是一个开源的、c/s架构的应用容器引擎。是管理容器的一个软件平台,我们可以使用docker将软件
    放入容器中,并且可以通过docker来控制容器的启动 停止 创建  删除
    
    docker 的优点
    
    1) 安装部署非常快、体积小、性能高
    2) 能够让开发 测试 生产的环境保持一致
    3) 缩短软件部署生命周期
    4) 和微服务项目非常搭!!
二、docker的安装和启动
        安装:参照资源内视频
        检查: 
            docker -v       //简单的查看版本信息
            docker version  // 查看版本详细信息
            docker info     // 查看docker 的概要信息
        启动:
            
            systemctl status docker  // docker的状态
            
            systemctl start docker   // 启动docker
            
            systemctl stop docker    // 停止docker
            
            systemctl restart docker  // 重启docker
    
            systemctl enable docker   // 开机运行docker
三、docker的组件
        镜像(image)
        镜像的本质是一些特殊文件,提供了容器运行时所必须的资源
        
        容器(container)
        容器是根据镜像创建出来的可运行实例,可以通过docker命令控制 它的创建 启动 停止 销毁 
        
        注册中心(registry)
        存储镜像的地方,像我们maven中使用中央仓库。
        中央仓库是存储jar包的
        注册中心是存储镜像的
        
            公有:比如:官方提供的注册中心 DockerHub (默认)
                            
            私有:比如:企业内部搭建的私人服务器注册中心
        
四、docker的基本操作
        image 镜像的操作
            1)查看镜像
                // 查看所有镜像
                docker images
                
                REPOSITORY   仓库       
                TAG          标签         
                IMAGE ID     镜像ID
                
                
                // 查询出所有镜像  只显示ID
                docker images -q
                
            2)搜索镜像
                            
                docker search 关键字的名称
                // 去注册中心 搜索名字中 包含centos的所有镜像
                docker search centos
            3)拉取镜像
                        // http://docker.io/ centos:latest
                docker pull 注册中心/仓库名:标签
                
                        // 使用默认的注册中心 
                docker pull 仓库名:标签
                
                        // 默认下载 最新版本
                docker pull 仓库名
                
                
            4)删除镜像
                docker rmi 镜像的名称:标签
                docker rmi 镜像的ID
                
                //全部删除
                docker rmi `docker images -q`
        container 容器操作
            1)查看容器
                // 查看运行中的容器
                docker ps
                // 查看所有容器
                docker ps -a
                
            2)*创建容器
                docker run [选项] 镜像:标记 [命令] 
                常用选项:
                    -i : 代表容器创建完毕后,会直接运行
                    --name : 给容器起名称
                    -d : 让容器在后台运行(守护式容器)
                    -t : 启动容器后,进入到容器内部  (交互式容器)
                    
                    -v : 设置宿主机和容器的目录映射
                    -p : 设置宿主机和容器的端口映射 
                
                交互式容器:
                    // 创建  立即运行 进入容器内部
                    docker run  -it  --name=mycentos  centos  /bin/bash
                    
                    
                    // 进入到容器内部之后 通过exit命令退出
                    exit 
                    
                    当我们使用exit退出脚本之后,容器会关闭
                守护式容器:
                    docker run -id --name=mycentos2 centos
                    
                    // 使用这个命令会立即进入到mycentos2容器中 
                    docker exec -it mycentos2 /bin/bash
                    
                    // 守护式容器  调用exit时, 不会关闭容器
                
                    
            3)停止、启动、删除
                
                // 停止容器
                docker stop 容器名称或容器ID
                // 启动容器 
                docker start 容器名称或容器ID
                // 删除容器 不能删除启动的容器
                docker rm 容器名称或容器ID
                // 强制删除
                docker rm -f 容器名称或容器ID
                // 重启容器
                docker restart 容器名称或容器I
                // 容器的暂停与恢复
                docker pause 容器名称或容器ID
                docker unpause 容器名称或容器ID
        
            4) 文件拷贝
                // 将宿主机的文件 拷贝到 容器 的容器目录
                docker cp 宿主文件目录 容器名称:容器目录
                
                // 容器中的文件 拷贝到 宿主机的目录上边
                docker cp 容器名称:容器目录 宿主文件目录 
                
                
            5)创建容器目录挂载
                docker run  -id -v 宿主机的目录:容器的目录地址  --name=容器名字  镜像:标签
    
                
            6)删除容器
                docker rm 容器的名称或容器的ID
                    
                        // 强制删除
                docker rm -f 容器的名称或容器的ID
                
                
                // 删除全部容器
                docker rm `docker ps -a -q`

五、实战应用部署
    
    mysql的部署:
        步骤:
            1) 搜索镜像
                docker search mysql
            2) 拉取镜像
                docker pull centos/mysql-57-centos7
            3) 创建并运行容器 
                docker run -id --name=mysql2 -p 9001:3306 -e MYSQL_ROOT_PASSWORD=123456 centos/mysql-57-centos7 
            4) 管理容器
                docker stop mysql2
                docker start mysql2 
    tomcat的部署
        步骤:
            1) 搜索镜像
                docker search tomcat
            2) 拉取镜像
                docker pull tomcat
            3) 创建并运行容器 
                // 创建容器                                    设置目录挂载   
                docker run -id --name=mytomcat -p 9003:8080 -v /usr/local/mytomcat:/usr/local/tomcat/webapps tomcat
            4) 管理容器
                // 我们只需要把要部署的项目 放到虚拟机的/usr/local/mytomcat目录下 就完成了部署
    
    nginx的部署
        步骤:
            1) 搜索镜像
                docker search nginx
            2) 拉取镜像
                docker pull nginx
            3) 创建并运行容器 
                // 创建容器                                    设置目录挂载   
                docker run -id --name=mynginx -p 9004:80 nginx
            4) 管理容器
                // 我们只需要把要部署的项目 放到虚拟机的/usr/share/nginx/html目录下 就完成了部署    
                
                // 将准备好的静态页面 上传到linux服务器
                docker cp ./shop mynginx:/usr/share/nginx/html
    
    redis的部署
        步骤:
            1) 搜索镜像
                docker search redis
            2) 拉取镜像
                docker pull redis
            3) 创建并运行容器 
                // 创建容器                                    设置目录挂载   
                docker run -id --name=myredis -p 9005:6379 redis
            4) 管理容器
                
六、 备份与迁移 
        将容器保存为新的镜像
        docker commit 容器的名称 仓库名称:标记
        
        镜像的备份
        docker save -o 文件名称.tar 仓库名称:标记
        
        镜像的加载
        docker load -i 文件名称.tar
        
        
七、通过Dockerfile构建镜像
        概念:Dockerfile是一个脚本文件,我们可以在这个脚本文件里面定义构建镜像的命令和参数
               通过执行这个脚本文件,可以构建一个新的镜像
               
        小练习:使用Dockerfile脚本文件,在centos镜像的基础上 安装jdk在打包新镜像
        
                1. 1.8jdk上传到服务器
                2. 使用mkdir 创建 centosjdk 并进入
                3. vi创建Dockerfile并进入编辑页面
                4. 编辑如下命令:
                    # 设置基础镜像
                    FROM centos
                    # 创建者名称
                    MAINTAINER Mr.chen
                    # 设置工作目录,用户进入到容器时,会直接进入这个目录
                    WORKDIR /usr
                    
                    # 创建存放java文件的目录
                    RUN mkdir /usr/local/java
                    
                    # 将宿主机的安装包 拷贝到容器
                    ADD jdk-8u161-linux-x64.tar.gz /usr/local/java
                    
                    # 配置环境变量
                    ENV JAVA_HOME /usr/local/java/jdk1.8.0_161
                    ENV JRE_HOME $JAVA_HOME/jre
                    ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
                    ENV PATH $JAVA_HOME/bin:$PATH
                
                5. 构建的命令
                    docker build -t 镜像名称 文件夹目录地址

八、搭建私有的registry注册中心
        概念:是存储镜像仓库的地方,我们可以在注册中心下载需要的镜像,也可以把镜像推送到注册中心
        
        搭建私有注册中心
            1. 下载注册中心服务的镜像
                    docker pull registry
            2. 创建注册中心容器 启动 
                    docker run -id -p 5000:5000 --name=myregistry registry
            3. 检查注册中心有没有搭建成功
                    http://192.168.18.131:5000/v2/_catalog
        
        上传镜像到注册中心
            1. 设置docker信任注册中心的地址
                vi /etc/docker/daemon.json
                
                "insecure-registries":["192.168.18.131:5000"]
            2. 重启docker 重启 注册中心 
                systemctl restart docker 
                docker start myregistry
            3. 将要上传的镜像,更改一下tag,代表这个镜像是要上传私人注册中心
                docker tag centosjdk8 注册中心/仓库名:标记
                docker tag centosjdk8 192.168.18.128:5000/centosjdk8:1.0.0
            4. 上传镜像到注册中心
                docker push 192.168.18.128:5000/centosjdk8:1.0.0
                
            5. 检查注册中心有没有推送成功
                http://192.168.18.131:5000/v2/_catalog
                刷新网址,仓库列表有没有我们上传的镜像