• docker


    1. 什么是Docker

    讲得很好的视频链接:https://www.bilibili.com/video/BV1ug411j71W?p=28

    Docker是基于Go语言实现的云开源项目。

    Docker的主要目标是“Build,Ship and Run Any App , Anywhere”,也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的APP(可以是一个WEB应用或数据库应用等等)及其运行环境能够做到“一次封装,到处运行”。

    虚拟机:就是在你的操作系统里面,装一个软件,然后通过这个软件,再模拟一台甚至多台“子电脑”出来。虚拟机属于虚拟化技术。而Docker这样的容器技术,也是虚拟化技术,属于轻量级的虚拟化。

    Docker 就是在Linux的基础上发展过来的。将应用运行在Docker 容器上面,而 Docker 容器在任何操作系统上都是一致的,这就实现了跨平台、跨服务器。只需要一次配置好环境,换到别的机子上就可以一键部署好,大大简化了操作。





    2. Docker安装

    Docker 要求运行在 CentOS 7 以上,要求系统为64位、系统内核版本为 3.10 以上。

    ### 查看自己的内核
    [root@lihao ~]# uname -r
    3.10.0-1062.12.1.el7.x86_64
    

    2.1 安装gcc相关环境

    yum -y install gcc-c++
    

    2.2 安装docker所需软件包

    yum install -y yum-utils
    

    2.3 设置镜像仓库

    yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    

    2.4 更新yum软件包索引

    yum makecache fast
    
    #如果出现 failure: repodata/repomd.xml from mirrors.aliyun.com_docker-: [Errno 256] No
    
    #请看该网址:https://blog.csdn.net/nyasm/article/details/116704921
    

    2.5 安装Docker CE(CE是免费版)

    yum install docker-ce docker-ce-cli containerd.io
    

    2.6 Docker启动/停止/重启/开机启动/查看状态

    systemctl start docker  # 启动docker
    systemctl stop docker  # 停止docker
    systemctl restart docker  # 重启docker
    systemctl status docker  # 查看docker状态
    systemctl enable docker  # 开机启动
    

    2.7 测试Docker

    docker version    #查看docker版本
    

    2.8 配置阿里云镜像加速(加速下载镜像,否则默认会去dockerhub网站下载镜像,速度会比较慢)

    1、介绍:https://www.aliyun.com/product/acr
    2、注册一个属于自己的阿里云账户(可复用淘宝账号)
    3、进入管理控制台设置密码,开通
    4、查看镜像加速器自己的
    

    2.8 配置镜像加速

    # sudo mkdir -p /etc/docker
    
    # cd /etc/docker
    
    # vim daemon.json
    {
     "registry-mirrors": ["https://qiyb9988.mirror.aliyuncs.com"]
    }
    
    # sudo systemctl daemon-reload
    
    # sudo systemctl restart docker
    



    3. Docker必知概念

    3.1 什么是镜像(image)

    Docker 镜像就是一个只读的模板。

    镜像可以用来创建 Docker 容器,一个镜像可以创建很多容器。 就好似 Java 中的 类和对象,类就是镜像,容器就是对象!

    3.2 什么是容器(container)

    Docker 利用容器独立运行的一个或一组应用。

    容器是用镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的,保证安全的平台。

    可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。

    3.3 什么是仓库(repository)

    仓库 是集中存放镜像文件的场所。





    4. Docker常用命令

    4.1 帮助命令

    docker version  # 显示 Docker 版本信息。
    docker info     # 显示 Docker 系统信息,包括镜像和容器数。。
    docker --help   # 帮助
    

    4.2 镜像命令

    #1. 列出本地主机上的镜像
    [root@kuangshen ~]# docker images
    REPOSITORY     TAG         IMAGE ID           CREATED             SIZE
    hello-world     latest       bf756fb1ae65     4 months ago        13.3kB
    
    # 上述内容解释:
    REPOSITORY  镜像的仓库源
    TAG     镜像的标签
    IMAGE ID   镜像的ID
    CREATED   镜像创建时间
    SIZE     镜像大小
    
    # 同一个仓库源可以有多个 TAG,代表这个仓库源的不同版本,我们使用REPOSITORY:TAG 定义不同
    的镜像,如果你不定义镜像的标签版本,docker将默认使用 lastest 镜像!
    
    # 可选项
    -a:    列出本地所有镜像
    -q:    只显示镜像id
    --digests: 显示镜像的摘要信息
    
    ===================
    #2. 搜索镜像
    # docker search 某个镜像的名称  对应DockerHub仓库(网址:https://registry.hub.docker.com/)中的镜像
    # docker search 某个镜像的名称-----> 相当于就是在DockerHub仓库网址中在搜索栏搜索某个镜像在页面上展示的结果一样
    
    [root@kuangshen ~]# docker search mysql
    NAME    DESCRIPTION                                    STARS(点赞)    OFFICIAL(是否官方)   
    mysql   MySQL is a widely used, open-source relation…  9484           [OK]        
    
    # 可选项
    --filter=stars=50 : 列出收藏数不小于指定值的镜像。
    
    ===================
    #3. 下载镜像
    # docker pull 镜像名称
    # 若不指定tag,默认是latest(最新)
    [root@kuangshen ~]# docker pull mysql
    
    # docker pull 镜像名称:版本
    [root@kuangshen ~]# docker pull mysql:5.7
    
    ===================
    #4. 删除镜像
    # 删除镜像 -f 表示强制【若不加 -f 也可以删除,但是如果该镜像正在运行,会提示因为正在运行,所以不可删除】
    docker rmi -f 镜像id                     # 删除单个
    docker rmi -f 镜像名:tag 镜像名:tag      # 删除多个空格隔开
    docker rmi -f $(docker images -qa)      # 删除全部
    

    4.2 容器命令

    有镜像才能创建容器,我们这里使用 centos 的镜像来测试,就是虚拟一个 centos !

    docker pull centos
    
    #1. 新建容器并启动(需要你有镜像)
    docker run [OPTIONS] IMAGE [COMMAND][ARG...]   # 新建容器并启动
    # OPTIONS常用参数说明
    --name="Name"        # 给容器指定一个名字
    -d                   # 后台方式运行容器,并返回容器的id!
    -i                   # 以交互模式运行容器,通过和 -t 一起使用
    -t                   # 给容器重新分配一个伪终端,通常和 -i 一起使用【即:容器启动后会进入其内部命令行】
    -P                   # 随机端口映射(大写)
    -p                   # 指定端口映射(小结),一般可以有四种写法
    
            ip:hostPort:containerPort
            ip::containerPort
            hostPort:containerPort (常用)
            containerPort
            # 如:docker run -d --name tomcat1 -p 8088(主机[对外]):8080(容器) tomcat
    
    # 测试
    [root@kuangshen ~]# docker images
    REPOSITORY     TAG         IMAGE ID         CREATED         SIZE
    centos       latest       470671670cac     3 months ago  237MB
    
    # 使用centos进行用交互模式启动容器[即:你一启动容器,就进入容器,并处于交互模式],在容器内执行/bin/bash命令!
    # /bin/bash的作用是表示载入容器后运行bash ,docker中必须要保持一个进程的运行,要不然整个容器启动后就会马上kill。
    [root@kuangshen ~]# docker run -it centos /bin/bash
    
    # 使用centos进行用守护模式启动容器,会返回容器id,不会进入容器,它是以守护式方式在运行容器
    [root@kuangshen ~]# docker run centos 
    
    ===================
    #2. 退出容器
    [root@dc8f24dd06d0 /]# exit # 使用 exit 退出容器
    
    ===================
    #3. 退出容器[不让其停止运行]
    ctrl+P+Q   # 容器不停止退出  注意按键顺序 P按了之后再按Q
    
    ===================
    #4. 列举出正在运行的容器
    docker ps [OPTIONS]  # 列举出正在运行的容器
    
    # 常用参数说明
    -a    # 列出当前所有正在运行的容器 + 历史运行过的容器
    -l    # 显示最近创建的容器
    -n=?   # 显示最近n个创建的容器
    -q    # 静默模式,只显示容器编号
    
    ===================
    #5. 启动停止容器
    docker start (容器id or 容器名)     # 启动容器
    docker restart (容器id or 容器名)    # 重启容器
    docker stop (容器id or 容器名)     # 停止容器     # 停止所有容器docker stop $(docker ps -a -q)
    docker kill (容器id or 容器名)     # 强制停止容器
    
    ===================
    #6. 删除容器   -f 强制
    docker rm 容器id                  # 删除指定容器
    docker rm -f $(docker ps -a -q)  # 删除所有容器
    docker ps -a -q|xargs docker rm  # 删除所有容器
    
    4.2.1 补充CentOS中开放防火墙端口
    firewall-cmd --list-ports  # 查看已开放的端口号
    
    firewall-cmd --zone=public --add-port=8080/tcp --permanent  # 开放端口
    
    firewall-cmd --permanent --zone=public --remove-port=8080/tcp  # 关闭端口
    
    systemctl start/stop/disable/enable firewalld  # 开启/关闭/禁用/启用防火墙
    
    systemctl status firewalld  # 查看防火墙状态
    
    netstat -naop|grep 端口号  # 查看端口占用情况
    

    4.3 其他命令

    #1. 查看日志
    docker logs -f -t --tail 容器id
    
    # --since 指定输出日志开始时间,即只输出指定日期后的日志
    # -t 显示时间戳 
    # -f 打印最新的日志
    # --tail 数字 显示多少条!
    [root@kuangshen ~]# docker logs -tf --tail 10 c8530dbbe3b4
    2020-05-11T08:46:40.656901941Z kuangshen
    2020-05-11T08:46:41.658765018Z kuangshen
    2020-05-11T08:46:42.661015375Z kuangshen
    
    ===================
    #2. 查看容器中运行的进程
    docker top 容器id
    
    # 测试
    [root@kuangshen ~]# docker top c8530dbbe3b4
    UID   PID   PPID     C   STIME   TTY  TIME       CMD
    root   27437  27421  0   16:43    ?    00:00:00  /bin/sh -c ....
    
    ===================
    #3. 查看容器/镜像的元数据(详细信息)
    docker inspect 容器id
    
    ===================
    #4. 进入正在运行的容器
    docker exec -it 容器id /bin/bash  #-it:在容器中打开新的终端,并且可以启动新的进程【/bin/bash不能少】
    
    或者
    
    docker attach 容器id              #直接进入容器启动命令的终端,不会启动新的进程
    
    
    ===================
    #5. 文件复制[从容器内拷贝文件到主机上,该命令一定要在宿主机执行]
    docker cp 容器id:容器内路径 目的主机路径
    
    # 从主机上拷贝文件到容器内
    docker cp 目的主机路径 容器id:容器内路径
    
    # 测试
    # 容器内执行,创建一个文件测试
    [root@c8530dbbe3b4 /]# cd /home
    [root@c8530dbbe3b4 home]# touch f1
    [root@c8530dbbe3b4 home]# ls
    f1
    [root@c8530dbbe3b4 home]# exit
    exit
    # linux复制查看,是否复制成功
    [root@kuangshen ~]# docker cp c8530dbbe3b4:/home/f1 /home
    [root@kuangshen ~]# cd /home
    [root@kuangshen home]# ls
    f1
    



    5. 容器数据卷

    数据卷:Docker容器产生的数据,如果不通过docker commit生成新的镜像,让数据作为镜像的一部分保存下来,那么当容器删除后,该数据也就没了。

    作用1:为了能保存数据在docker中,我们就要用到数据卷技术,简单来说,数据卷就好比redis中的持久化性质一样。

    作用2:数据卷可以在容器之间共享和重用,比如你要启动多个项目集群,但是每个都用一些公共的数据需要修改,那么就可以将这些数据作为数据卷放在宿主机上。通过修改宿主机上的数据从而达到修改各个容器的数据。【在容器里面,通常大部分容器并没有vim命令。如果遇到需要频繁修改的文件,只有在宿主机改了再复制粘贴到容器里面。就很麻烦,而且如果多个容器都要改某个文件,也很麻烦】

    实现:将宿主机的目录与容器内的目录进行映射,这样我们就可以通过修改宿主机某个目录的文件从而去影响容器,而且这个操作是双向绑定的,对容器内的操作也会影响宿主机。

    当容器被删除时,宿主机的内容也不会被删除。多个容器挂载同一个目录,当其中一个容器被删除,其他容器也不会受影响。

    5.1 方式一:直接使用数据卷

    # 命令
    docker run -it -v 宿主机绝对路径目录:容器内目录 镜像名/镜像id
    
    # 测试
    [root@kuangshen ~]# docker run -it -v /home/ceshi:/home centos /bin/bash(可不要、bin/bash)
    

    5.1 方式二:不用学




    6. Docker Compose

    Docker Compose:可以轻松,高效的管理容器,它是一个用于定义和运行多容器Docker的应用程序工具。

    它允许用户通过一个单独的docker-compose.yml模板文件(YML格式)来定义一组相关联的应用容器为一个项目。

    6.1 Docker Compose安装与卸载

    #1. github官网搜索 Docker compose 找到下载好的二进制文件
    
  • 相关阅读:
    【杭电】[2035]人见人爱A^B
    【杭电】[2014]青年歌手大奖赛_评委会打分
    【杭电】[2014]青年歌手大奖赛_评委会打分
    【杭电】[2018]母牛的故事
    【杭电】[2018]母牛的故事
    SQL 01: 数据库表的三种关系
    History : The Age of the Samurai(11851868)
    History : Pictures of History 2
    JQuery 07 事件2
    JQuery 07 事件1
  • 原文地址:https://www.cnblogs.com/itlihao/p/15965652.html
Copyright © 2020-2023  润新知