• Linux下Docker的安装及使用


    1.背景

    类似于电脑,要在朋友的电脑上跑你写的Java程序,就得检查他电脑有没有安装Java环境.

    类似的,要想在别的电脑上跑你写的Python程序,又得检查那台电脑有没有装python.

    如何让自己写的程序换到别的电脑上后,可以便捷的运行起来?

    将程序和程序的环境打包迁移,是一种解决方案.

    • 为啥不用虚拟机?

    虚拟机安装太麻烦,就好比一个完整的操作系统,启动起来很费时间.

    2.安装

    服务器版本:CentOS 8.2 64位

    2.1 安装yum-utils

    yum install -y yum-utils
    

    2.2 配置国内源

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

    2.3 解决problem with installed package podman-1.6.4-10.的报错

    yum erase podman buildah
    

    2.4 安装Docker

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

    2.5 查看Docker版本

    # 简单信息
    docker -v
    # 查看docker的版本号,包括客户端、服务端、依赖的Go等
    docker version
    # 查看系统(docker)层面信息,包括管理的images, containers数等
    docker info
    

    3.Docker服务相关

    3.1 启动

    # 启动
    systemctl start docker
    # 开机自启
    systemctl enable docker
    

    3.2 停止

    systemctl stop docker
    

    3.3 重启

    systemctl restart docker
    

    3.4 查看docker状态

    systemctl status docker
    

    4.仓库、镜像和容器

    类比win

    镜像: 程序安装包

    容器: 安装好的程序

    (镜像的)仓库: 放安装包的仓库.

    4.1 Docker容器三个主要概念

    • 镜像

      Docker镜像里包含了已打包的应用程序及其所依赖的环境。它包含应用程序可用的文件系统和其他元数据,如镜像运行时的可执行文件路径。

    • 镜像仓库

      Docker镜像仓库用于存放Docker镜像,以及促进不同人和不同电脑之间共享这些镜像。当编译镜像时,要么可以在编译它的电脑上运行,要么可以先上传镜像到一个镜像仓库,然后下载到另外一台电脑上并运行它。某些仓库是公开的,允许所有人从中拉取镜像,同时也有一些是私有的,仅部分人和机器可接入。

    • 容器

      Docker容器通常是一个Linux容器,它基于Docker镜像被创建。一个运行中的容器是一个运行在Docker主机上的进程,但它和主机,以及所有运行在主机上的其他进程都是隔离的。这个进程也是资源受限的,意味着它只能访问和使用分配给它的资源(CPU、内存等)。

    4.2 一个简单的流程

    4.2.1 首先开发者在开发环境机器上开发应用并制作镜像。

    Docker执行命令,构建镜像并存储在机器上。

    4.2.2 开发者发送上传镜像命令。

    Docker收到命令后,将本地镜像上传到镜像仓库。

    4.2.3 开发者向生产环境机器发送运行镜像命令。

    生产环境机器收到命令后,Docker会从镜像仓库拉取镜像到机器上,然后基于镜像运行容器。

    preview

    5.镜像相关

    类比win: 程序的安装包

    Docker镜像(image)详解

    5.1 查看镜像

    docker images
    

    5.2 搜索镜像

    docker search 镜像名称
    

    5.3 拉取镜像

    docker pull 镜像名称:版本号
    

    5.4 删除镜像

    docker rmi 镜像名称:版本号
    

    5.5 其他

    5.5.1 镜像信息

    vim /var/lib/docker/image/overlay2/repositories.json
    

    image-20210420095953865

    repositories.json文件中保存了一些基本信息

    image-20210420100033114

    6.容器相关

    类比win: 已经安装好的程序

    6.1 查看容器列表

    # 查看正在运行的容器
    docker ps
    # 查看所有容器
    docker ps -a
    

    6.2 创建容器

    容器创建后,在容器列表中即可看到该容器(相当于安装好程序)

    以后用后文的启、停、删就可以操作该容器了.

    # eg: 是换行的意思
    docker run -d -p 1337:1337 
            --network kong-net 
            --name konga 
            -e "NODE_ENV=production"  
            -e "DB_ADAPTER=postgres" 
            -e "DB_URI=postgresql://kong:kong@172.0.0.1:5432/konga" 
            pantsel/konga
    

    linux中-和--的区别?

    -后面一般跟简写,大多数是一个字母,如:

     ls  -l
    

    --后面一般跟长的完整名字,如:

     chkconfig  --add
    

    run参数

    • -rm

      在容器退出时自动清理容器内部的文件系统

      在Docker容器退出时,默认容器内部的文件系统仍然被保留,以方便调试并保留用户数据.

      但是,对于前台运行的容器,由于其只是在开发调试过程中短期运行,其用户数据并无保留的必要.

      启动时设置-rm选项,这样在容器退出时就能够自动清理容器内部的文件系统.

    • -i

      保持容器运行

    • -p

      端口映射

    • -e

      传递环境变量

    • -t

      为容器重新分配一个伪输入终端

    • -d

      以守护进程模式运行容器,退出后容器不会停止

    • -it

      创建一个交互式容器,推出后容器容器停止运行

    • -id

      创建一个守护容器;退出后容器不停止运行

    • –-name

      为创建的容器命名

    6.3 进入容器

    docker exec -it 容器名称 /bin/bash
    # eg:进入一个叫konga的容器
    docker exec -it konga /bin/bash
    
    # 在容器中执行了一个ping命令
    ping 127.0.0.1
    # 退出当前容器
    exit
    

    6.4 启动容器

    docker start 容器名称 
    

    6.5 停止容器

    docker stop 容器名称
    

    6.6 删除容器

    docker rm 容器名称
    
    #删除所有容器
    docker rm `docker ps -aq`
    

    6.7 查看容器详细信息

    docker inspect 容器名称
    

    6.8 其他

    6.8.1 容器文件位置

    cd /var/lib/docker/containers
    

    image-20210420095851147

    查看所有容器,其中的id:eb67258c80d1与上方文件夹对应

    docker ps -a
    
    # 显示
    CONTAINER ID   IMAGE     COMMAND                  CREATED      STATUS                  PORTS     NAMES
    eb67258c80d1   mongo     "docker-entrypoint.s…"   7 days ago   Exited (0) 6 days ago             mongo
    

    7.网络相关

    容器可以比拟做一个独立的系统环境,能配置自己网络,所以说容器里的localhost不一定等于宿主机的localhost

    网络模式

    • bridge:桥接docker(默认创建时,不指定网络驱动,将使用bridge模式)

    • none:不配置网络

    • host:和宿主机共享网络

      例如:当你在容器上使用80端口访问其他应用,使用的是宿主机的80端口.

    • container:容器网络连通(用的少,局限很大)

    Linux查看网络信息

    # if没有打错.
    # 这里面能看到docker相关的网络.
    ifconfig
    

    7.1 查看docker下的网络列表

    docker network ls
    

    7.2 查看单个网络详细信息

    docker network inspect networkname
    

    7.3 创建网络

    # 不指定网络驱动时,默认创建的是bridge网络.
    docker network create networkname
    

    7.4 删除网络

    docker network rm networkname
    

    8.日志相关

    docker logs [OPTIONS] CONTAINER
    
    # Options参数
    --details: 显示更多的信息
    --follow(-f): 跟踪实时日志
    --since string: 显示自某个timestamp之后的日志,或相对时间,如40m(即40分钟)
    --tail string: 从日志末尾显示多少行日志, 默认是all
    --timestamps(-t): 显示时间戳
    --until string: 显示自某个timestamp之前的日志,或相对时间,如40m(即40分钟
    

    示例

    # 查看容器mysql 最近30分钟的日志:
    docker logs --since 30m mysql
    
    # 查看容器mysql 某时间之后的日志:
    docker logs -t --since="2019-11-02T13:23:37" mysql
    
    #查看容器mysql 某时间段日志:
    docker logs -t --since="2019-11-02T13:23:37" --until "2019-11-03T12:23:37" mysql
    

    9.配置国内加速

    vim  /etc/docker/daemon.json
    
    # 镜像信息
    {
        "registry-mirrors": ["https://registry.docker-cn.com"],
        "live-restore": true
    }
    
  • 相关阅读:
    CSS3-给网页添加图片
    CSS3-margin,padding,border
    布局左固定右自适应
    Java-基础编程(螺旋矩阵&乘法表)
    Java IO流整理Rick
    Java-Eclipse插件开发学习笔记
    关于《程序语言-平台优越性》一文补充说明
    程序语言-平台优越性
    Understand RNN with TensorFlow in 7 Steps
    pandas mean 返回 inf
  • 原文地址:https://www.cnblogs.com/yang37/p/14464674.html
Copyright © 2020-2023  润新知