Docker的常规操作使用

docker 基本组成:
    docker主机:安装docker程序的程序 docker是直接安装在操作系统上的
    docker仓库:用来保存各种打包好的软件镜像 仓库分为公有仓库和私有仓库(类似maven)
    docker镜像:软件打包好的镜像。镜像存放在仓库中
    docker容器:镜像启动后的一个实例称之为容器 容器是独立运行的一个或者多个应用

docker command:

    centos:
        uname -r
        uname -a
        lscpu
        内存:
            free
            free -h

        磁盘:
            fdisk -l
        关闭防火墙:
            systemctl stop firewalld
            systemctl disable firewalld
        上传下载:
            yum -y install lrzsz
            1.上传
                鼠标拖拽
            2.下载
                a 下载一个文件
                    sz filename
                b 下载多个文件
                    sz filename1 filename2
                c 下载dir目录下的所有文件 不包含dir文件夹
                    sz dir/*
    docker
        前置条件:
            yum install -y yum-utils device-mapper-persistent-data lvm2
        添加源(国内镜像)
            yum-config-manager --add-repo http://mirrors.aliyun.com/docker-
            ce/linux/centos/docker-ce.repo
            yum makecache fast

        查看docker版本:
            yum list docker-ce --showduplicates | sort -r

        安装docker:
            安装最新版:推荐大家安装最新版本
            yum -y install docker-ce
            安装指定版本:
            语法规则:yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io
            yum -y install docker-ce-18.06.3.ce-3.el7 docker-ce-cli.x86_64
            yum install -y docker-ce-19.03.9-3.el7 docker-ce-cli-19.03.9-3.el7

        开启docker服务
            systemctl start docker
            systemctl status docker

        安装阿里云镜像服务器:
            mkdir -p /etc/docker
            tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://复制自己的加速器地址.mirror.aliyuncs.com"] }
            EOF
            systemctl daemon-reload
            systemctl restart docker

        设置docker自启动
            systemctl enable docker

        docker信息:
            docker -v
            docker version
            docker info

        分类:
            docker环境信息:
                docker 【info|version】
            容器生命周期管理:
                docker 【create|exec|run|start|stop|restart|kill|rm|pause|unpause】
            容器操作管理:
                docker 【ps|inspect|top|attach|wait|export|port|rename|stat】
            容器rootfs管理:
                docker 【commit|cp|diff】
            镜像仓库:
                docker 【login|pull|push|search】
            本地镜像管理:
                docker 【build|images|rmi|tag|save|import|lao】
                docker images
                docker image ls

            容器资源管理:
                docker 【vulume|network】
            系统日志信息:
                docker 【events|history|logs】


    docker:
        pull:
            docker pull repository:tag
            docker pull ubuntu:20.04
        images:
            docker images
            docker image ls
        save:
            docker save repository:tag -o repository:tage
                        o:output
            docker save 仓库源:标签 -o 仓库源别名:标签别名
            docker save ubuntu:20.04 -o ubuntu:20
            docker save ubuntu:20.04 > ubuntu:20.1
        load:
            docker load -i repository:tag
                        i:input
            docker load < repository:tag
        search:
            docker search tomcat
        inspect:
            docker inspect ubuntu:20.04
            docker inspect -f {{.Size}} ubuntu:20.04
                            f:filter
        history:
            一个镜像是由多个层组成的 可以使用history查看由多少层
            docker history ubuntu:20.04
        tag:
            标记本地镜像 将其归入某一仓库
            docker tag ubuntu:20.04 ubuntu:20.1
            类似快照
        rmi:
            docker rmi ubuntu:20.04
            docker image rm ubuntu:20.04
            docker rmi img_id

        run:
            docker 前端启动
                docker run -it --rm -p 8080:8080 tomcat:9.01
                ctl + c 退出运行        -p :指定端口:第一端口是宿主机端口 第二个是docker容器端口
                                                    第一个不能重复(端口冲突) 第二个不能修改
                                      -it:interactive
            docker 后端启动
                docker run itd -p 8080:8080 tomcat:9.01
                        -d : detach(分离) --rm 与 -d是不能同时使用的
        logs:
            日志
                docker logs -f name(tomcat)
                查看容器名字:
                    docker ps
                查看所有容器的名字:
                    docker ps -a


        rm:
            docker 删除容器
                docker rm name
                docker stop name
                docker rf -f name 强制删除

                docker ps -q 只显示正在运行的容器id
                docker ps -qa 显示所有容器的id
            停止运行所有的容器:
            docker stop $(docker ps -qa)
            停止运行正在运行的容器
            docker stop $(docker ps -q)
            删除所有的容器:
            dcoker rm $(docker ps -qa)
            删除所有的镜像
            docker rm $(dokcer images -q)

        查看所有的正在运行的容器:
            docker ps -a
            docker rm ${docker ps -qa}

        创建一个容器
            docker create -it --name tomcat -p 8080:8080 tomcat:9.01
            docker ps -a 查看创建的docker是已经创建的状态
            启动:
                docker start container_id

        进入容器:
            exec:
                先启动一个容器:
                    docker run -itd --name tomcat -p 8080:8080 tomcat:9.01
                    dcoekr exec -it tomcat /bin/bash

                    docekr exec -it taocmat sh
                    进入到内部之后 可以通过 cat /etc/issue 查看操作系统的内核版本

            inspect:
                docker inpsect image_id/container_id/container_name


            kill:
                docker kill container_id/container_name
                    杀掉正在运行中的容器

            docker 安装niginx:
                拉取镜像:
                docker pull nginx:1.19.3-alpine
                备份镜像:
                docker save nginx:1.19.3-alpine -o nginx.1.19.3.alpine.tar
                导入镜像:
                docker load -i nginx.1.19.3.alpine.tar
                运行镜像:
                docker run -itd --name nginx -p 80:80 nginx:1.19.3-alpine
                进入容器
                docker exec -it nginx sh
                查看html目录
                cd /usr/share/nginx/html
                配置文件目录
                cat /etc/nginx/nginx.conf

            docker  安装mysql:
                拉取镜像:
                    docker pull mysql:5.7.31
                备份镜像:
                    docekr save mysq:5.7.31 -o mysql.tar
                导入镜像:
                    docekr load -i mysql.tar
                运行镜像:
                    docker run -e 参数:
                        -e = --env 设置环境变量
                        例如:向my.cnf追加参数:
                            docker run -itd --name mysql --restart always --privileged=true -p 3306:3306
                            -e MYSQL_ROOT_PASSWORD=admin mysql:5.7.31 --character-set-server=utf8 --collation- server=utf8_general_ci
                privileged参数:
                    可以不受限制的访问自己的系统调用

                    容器内测试mysql:
                        doceker exec -it mysql bash
                        登陆mysql
                        mysql -u root -p
                        use mysql;
                        show databases;
                        exit;
            docker 安装zookeeper:
                拉取镜像:
                    docker pull zookeeper:3.6.2
                备份镜像:
                    docker save zookeeper:3.6.2 -o zookeeper.tar
                导入镜像:
                    docker load -i zookeeper.tar
                单机版:
                    docker run -itd --name zookeeper --restart always -p 2181:2181 zookeeper:3.6.2
                    dokcer exec -it zookeeper sh
                    cat /etc/issue
                    使用zooinsepctor查看
                    https://issues.apache.org/jira/secure/attachment/12436620/ZooInspector.zip
                    进入到build目录下
                    运行jar文件
                    java -jar zookeeper-dev-ZooInspector.jar

            docker 安装activermq:
                拉取镜像:
                    docker pull webcenter/activemq:5.14.3
                备份镜像:
                    docker save webcenter/activemq:5.14.3 -o acgtivemq.tar
                导入镜像
                    docker load -i activemq.tar
                单机版:
                    docker run -itd --name activmq --restart always -p 61616:61616 -p 8161:8161 webcenter/activemq:5.14.3
                    docker exec -it acivemq sh
                    cat /etc/issue

  docker 核心原理:
    云计算:
        第一层次:底层的硬件资源(cpu 硬盘 网卡等)
        第二层次:不需要关心硬件系统 操作系统装好 数据库装好 直接使用
        第三层次:直接使用产品
    对应的是laas paas saas
        Laas:infrastrure-as-a-service :基础设施即服务 例如阿里云
        Paas:platform-as-a-service:平台即服务 docker
        Saas:sofeware-as-a-service:软件即服务 offiece github等

    虚拟化:
        如果说现在需要一台centos mysql 临时组装的话 就有点浪费时间
        于是就有了各种软件平台 负责对资源的集中管理和快速调用

     如果对资源进行管理 第一步就是虚拟化 虚拟化是云计算的基础
     虚拟化就是一台物理机上 运行多台虚拟服务器 这种服务器机叫做虚拟机
     从 表面看 多台虚拟机是单独的服务器 ,但是他们都是共享物理机的物理资源 只是通过模拟计算机的硬件 来实现运行多台计算机系统的技术。
     物理机:宿主机
     虚拟机:客户机
        如何完成物理资源的虚拟化工作呢:hypervisor
        hypervisor不是软件 是一类软件的统称  hypervisor 也称为vmm virtual marchine monitor 虚拟机监视器
        它是运行在基础物理资源硬件之上的软件层 可以虚拟硬件资源

    docker网络:
        分为三种
            docker安装后会自动创建三种网络:
                bridge:(默认)
                host:
                none
                命令:
                    docker network ls
            理论部分:
                docker使用Linux的桥接网卡 在宿主机上虚拟出一个docker0的虚拟网桥 docker启动一个容器时 就会根据docker网桥的的网段分配给容器一个ip地址 称为container-ip
                同时docker网桥是每个容器的默认网关 docker网桥是宿主机虚拟出来的 并不是真实存在的网络设备 外部网络是无法寻址找到的 如果希望外部访问到 可以通过映射宿主机端口
                即在run容器的时候 通过-P或者-p来指定端口。
                使用docker info查看网络部分
                    network:  Network: bridge host ipvlan macvlan null overlay

            bridge网络:
                bridge的表现形式就是docker0的网路接口 容器默认都是通过docker0网络通信的。
                可以通过ip a命令查看
                查看网络模式:
                    docker network ls
                        查看biridge模式
                            docker network inspect bridge
                            当我们启动一个容器时,bridge里containers就会有多一个元素
                            同时也会多一部分网卡
                            但是当我们启动容器之后 停止移除之后 此容器的ip就会重新分配 ip地址不固定


                如果要指定一个网路模式 可以通过命令 --network host/bridge


            docker创建网络:
                docker network create -d(d:driver) 名称
                注意 默认是birdge模式
                    docker network create -d bridge my-bridge
                    删除网络:
                        docker network rm 网络名称

                    查看网络内容:
                        docker network inspect 网络名称
                        启动指定网络:
                            docker run --network mybridge

            lagou-network
            172.172.0.0/24: 24代表子码掩码是255.255.255.0
            172.172.0.0/16: 16 代表子码掩码


        docker 数据卷:
                原始数据copy:
                cp命令:
                    宿主机文件复制到容器:
                        docker cp [options] src_path container:des_path
                    容器文件夹复制到宿主机:
                        docker cp [options] container:src_path des_path
                数据卷:
                    可以将宿主机和容器进行直接的映射
                    需要通过run方式进行映射 如果使用create容器再指定 会很麻烦的

                    数据卷的三种类型:
                        宿主机数据卷:(推荐)
                        命名的数据卷:
                        匿名的数据卷:

                    数据卷挂载命令:
                        docker run -v /宿主机的绝对路径:容器内的目录 镜像名
                        通过 -v 容器内路径: ro rw 改变读写权限
                        ro:readonly 只读
                        rw:readwrite 可读可写

                        docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名
                        docker run -it -v /宿主机绝对路径目录:/容器内目录:rw 镜像名

                        ro的权限只能是宿主机访问容器

                docker挂在nexus3
                    https://hub.docker.com/r/sonatype/nexus3
                    拉取镜像:
                        docker pull sonatype/nexus3
                    备份镜像:
                        docker save sonatype/nexus3 -o nexus3
                    导入镜像:
                        docker load -i nexus3
                    运行镜像:
                        docker run -itd --name nexus3 sonatype/nexus3
                    进入镜像:
                        docker exec -it nexus3 sh
                    cd /nexus-data
                    cat admin.password
                    浏览器访问:
                        http://192.168.198.100:8081/

                        docker rm $(docker stop $(docker ps -aq))

               重新挂载:
                     docker run -itd -p 8081:8081 --name nexus3 -v /data/nexus3/:/nexus-data/ sonatype/nexus3:3.28.1
                docker logs -f nexus3
                报错信息如下:
                mkdir: cannot create directory '../sonatype-work/nexus3/log': Permission denied
                docker rm -f nexus3
                官方文档:授权

                chown -R 200 nexus3/
                docker run -d -p 8081:8081 --name nexus3 -v /data/nexus3/:/nexus-data/ sonatype/nexus3:3.28.1
                查看容器启动日志
                docker logs -f nexus3

                命名数据卷:
                    docker run -itd --name nginx -p 80:80 -v lagouedu-nginx:/etc/nginx nginx:1.19.3- alpine

                    查看数据卷:
                        docker volume ls


                    查看具体的数据卷名称:
                        查看lagouedu-nginx宿主机目录
                        docker volume inspect lagouedu-nginx
                        找到宿主机的目录进入
                匿名数据卷:
                    docker run -itd --name nginx -p 80:80 -v /etc/nginx nginx:1.19.3-alpine
                    docker volume ls
                    docker volume inspect dbd07daa4e40148b11....
                    cd /var/lib/docker/volumes/dbd07daa4e40148b11....

                清理数据卷:
                docekr volume prune
                docker voluem ls
                如果我们删除一个容器后 发现映射的数据卷缓存还在 可以使用删除命令进行清理 prune


                数据卷容器:
                    如果用户需要在多个容器之间共享一些持续更新的数据 这个时候就需要使用数据卷容器

                    命令:
                        docker run --volumes-from
                                                            nginx1
                                                            nginx2
                        宿主机目录       数据卷容器(假设是centos)
                                                            mysql1
                                                            mysql2

                    第一步:
                        将centos和宿主机进行关联
                            docker run -d --name data-volume -v /data/nginx:/usr/share/nginx/html -v /data/mysql:/var/lib/mysql centos:7.8.2003
                    第二步:
                        将nginx和mysql和数据卷容器进行关联
                            docker run -itd --name nginx01 -p 80:80 --volumes-from data-volume nginx:1.19.3- alpine
                            echo "lagouedu nginx" > /data/nginx/index.html
                            http://192.168.198.100

                            docker run -itd --name nginx02 -p 81:80 --volumes-from data-volume nginx:1.19.3- alpine
                            http://192.168.198.100:81

                            docker run -itd --name mysql01 --restart always --privileged=true -p 3306:3306 -e MYSQL_ROOT_PASSWORD=admin --volumes-from data-volume mysql:5.7.31
                            -- character-set-server=utf8 --collation-server=utf8_general_ci

                            docker run -itd --name mysql02 --restart always --privileged=true -p 3307:3306 -e MYSQL_ROOT_PASSWORD=admin --volumes-from data-volume mysql:5.7.31
                            -- character-set-server=utf8 --collation-server=utf8_general_ci

                docker-compose:
                    一个应用是多个微服务组成 因此 一个微服务就是一个容器 就需要多个容器一起执行 多个容器协同工作 compose就是容器的管理工具
                    compose可以简化容器的构建和运行
                    是为了定一个或多个容器运行和应用的工具
                    compose使用yaml来定义多个容器之间的关系。
                    一个docker-compose up就可以把所有的应用跑完

                    docker-compose的安装:
                        下载:
                            https://github.com/docker/compose

                        授权:
                            mv /data/docker-compose-Linux-x86_64 /usr/local/bin/docker-compose
                            cp /data/docker-compose-Linux-x86_64 /usr/local/bin/docker-compose
                            chmod +x /usr/local/bin/docker-compose
                            chmod 777 /usr/local/bin/docker-compose
                        docker-compose的安装版本:
                            docker-compose -v
                            docker-compose --version
                            docker-compose version
                    卸载docker-compose:
                        rm -rf /usr/local/bin/docker-compose
                        reboot

                        docker-compose默认使用docker-compose.yml 也可以通过使用-f参数指定具体文件
                        docker-compose包含四个一级key:
                            version:并非指的是compose或者docker引擎的版本
                            services:定义不同的应用服务
                            networks:指引网络服务
                            volumes:创建卷


               安装docker私服:
                官方私服地址:
                    https://hub.docker.com/_/registry
                拉取镜像:
                    docker pull registry:2.7.1
                备份镜像:
                    docker save registry:2.7.1 -o registry.2.7.1.tar
                加载镜像:
                    docker load -i registry.2.7.1.tar
                运行镜像:
                    docker run -itd -p 5000:5000 --name registry --restart=always registry:2.7.1

                添加私服地址:
                    编辑配置文件
                    vi /etc/docker/daemon.json
                    增加仓库配置信息
                    { "insecure-registries":["192.168.198.101:5000"] }
                    重启docker:
                        systemctl daemon-reload
                        systemctl restart docker

                    查看docker是否添加:
                        docker info

                    浏览器测试:
                        http://192.168.198.101:5000/v2/_catalog


                    上传镜像:
                        doceker tag nginx:1.2 192.1.68.2:5000/nginx:v1
                        docker push 192.1.68.2:5000/nginx:v1

                    浏览器测试:
                        http://192.168.198.101:5000/v2/nginx/tags/list


                    企业私服:
                        harbor官网地址: https://goharbor.io/ github
                        官网地址: https://github.com/goharbor/harbor
                        官方帮助文档: https://github.com/goharbor/harbor/blob/v1.9.4/docs/installation_guide.md

                        验证docker-compose
                            docker-compose -v

                        开发环境使用的http 但是生产使用的是https
                            1.解压软件
                                cd /data
                                tar zxf harbor-offline-installer-v1.9.4.tgz
                            2.进入目录:
                                cd harbor
                            3.修改配置文件
                                vi harbor.yml
                                3.1修改私服镜像地址 hostname: 192.168.198.101
                                3.2修改镜像地址访问端口号 port: 5000
                                3.3harbor管理员登录系统密码 harbor_admin_password: Harbor12345
                                3.4修改harbor映射卷目录 data_volume: /data/harbor
                            4.安装harbor
                                4.1执行启动脚本,经过下述3个步骤后,成功安装harbor私服 ./install.sh
                                4.2准备安装环境:检查docker版本和docker-compose版本
                                4.3加载harbor需要的镜像
                                4.4准备编译环境
                                4.5启动harbor。通过docker-compose方式启动服务
                                4.6google浏览器访问harbor私服 http://192.168.198.101:5000 username: admin password: Harbor12345

                            5.配置私服:
                                vi /etc/docker/daemon.json
                                "insecure-registries":["192.168.198.101:5000"]
                                重启docker服务:
                                systemctl daemon-reload
                                systemctl restart docker

                            新建项目:
                                在harbor中新建公共项目:
                                laogouedu
                            登陆私服:
                                docker login -u admin -p Harbor12345 192.168.198.101:5000
                            退出:
                                docker logout 192.168.198.101:5000

                            上传nginx:
                                docker tag mariadb:10.5.2 192.168.198.101:5000/lagouedu/nginx:1.19.3-alpine
                                docker push 192.168.198.101:5000/lagouedu/nginx:1.19.3-alpine
                                docker pull 192.168.198.101:5000/lagouedu/mariadb:10.5.2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值