zoukankan      html  css  js  c++  java
  • Docker 安装及命令详解

    docker 安装

    内核优化

    sudo tee /etc/sysctl.conf <<-'EOF'
    # 原文:闫世成的博客园 https://www.cnblogs.com/yanshicheng/
    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1
    net.ipv4.ip_forward = 1
    vm.swappiness=0
    kernel.pid_max=4194303
    vm.max_map_count=262144
    fs.file-max=1048576
    net.ipv4.tcp_syncookies = 1
    net.ipv4.tcp_syn_retries = 1
    #net.ipv4.tcp_tw_recycle = 1
    net.ipv4.tcp_tw_reuse = 1
    net.ipv4.tcp_fin_timeout = 1
    net.ipv4.tcp_keepalive_time = 1200
    net.ipv4.ip_local_port_range = 10000 65535
    net.ipv4.tcp_max_syn_backlog = 16384
    net.ipv4.tcp_max_tw_buckets = 36000
    net.ipv4.route.gc_timeout = 100
    net.ipv4.tcp_syn_retries = 1
    net.ipv4.tcp_synack_retries = 1
    net.netfilter.nf_conntrack_max=2097152
    net.core.somaxconn = 16384
    net.core.netdev_max_backlog = 16384
    net.ipv4.tcp_max_orphans = 16384
    net.ipv4.tcp_rmem = 4096 4096 16777216
    net.ipv4.tcp_wmem = 4096 4096 16777216
    net.ipv4.tcp_mem = 786432 2097152 3145728
    #kernel.pty.max = 4
    EOF
    

    资源限制调优

    文件路径:/etc/security/limits.conf

    sudo tee /etc/security/limits.conf <<-'EOF'
    # 原文:闫世成的博客园 https://www.cnblogs.com/yanshicheng/
    root    soft    nofile    1048576
    root    hard    nofile    1048576
    root    soft    nproc     1048576
    root    hard    nproc     1048576 
    root    soft    stack     10240
    root    hard    stack     32768
    root    soft    memlock   unlimited
    root    hard    memlock   unlimited
    root    soft    core      unlimited
    root    hard    core      unlimited
    root    soft    msgqueue  8192000
    root    hard    msgqueue  8192000
    
    *    soft    nofile    1048576
    *    hard    nofile    1048576
    *    soft    nproc     1048576
    *    hard    nproc     1048576 
    *    soft    stack     10240
    *    hard    stack     32768
    *    soft    memlock   unlimited
    *    hard    memlock   unlimited
    *    soft    core      unlimited
    *    hard    core      unlimited
    *    soft    msgqueue  8192000
    *    hard    msgqueue  8192000
    EOF
    

    关闭 swap 分区

    root@ops103:~#  sed -i 's@\(.*swap.*\)@#\1@g' /etc/fstab
    root@ops103:~# sudo swapoff -a
    root@ops103:~# free -h
                  total        used        free      shared  buff/cache   available
    Mem:          975Mi       181Mi       128Mi       1.0Mi       665Mi       705Mi
    Swap:            0B          0B          0B
    

    在线安装

    阿里云源:https://developer.aliyun.com/mirror/docker-ce
    乌班图安装示例

    # step 1: 安装必要的一些系统工具
    sudo apt-get update
    sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
    # step 2: 安装GPG证书
    curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
    # Step 3: 写入软件源信息
    sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
    # Step 4: 更新并安装Docker-CE
    sudo apt-get -y update
    sudo apt-get -y install docker-ce
    
    # 安装指定版本的Docker-CE:
    # Step 1: 查找Docker-CE的版本:
    # apt-cache madison docker-ce
    #   docker-ce | 17.03.1~ce-0~ubuntu-xenial | https://mirrors.aliyun.com/docker-ce/linux/ubuntu xenial/stable amd64 Packages
    #   docker-ce | 17.03.0~ce-0~ubuntu-xenial | https://mirrors.aliyun.com/docker-ce/linux/ubuntu xenial/stable amd64 Packages
    # Step 2: 安装指定版本的Docker-CE: (VERSION例如上面的17.03.1~ce-0~ubuntu-xenial)
    # sudo apt-get -y install docker-ce=[VERSION]
    

    配置加速

    sudo tee /etc/docker/daemon.json <<-'EOF'
    {
        "registry-mirrors": [
            "http://hub-mirror.c.163.com",
            "https://v16stybc.mirror.aliyuncs.com"
        ],
        "insecure-registries": [
            "harbor.superops.cc"
        ],
        "experimental": false,
        "debug": false,
        "features": {
            "buildkit": true
        },
        "exec-opts": ["native.cgroupdriver=systemd"],
        "max-concurrent-downloads": 20,
        "log-driver": "json-file",
        "log-level": "warn",
        "log-opts": {
            "max-size": "100m",
            "max-file": "3"
        },
        "data-root": "/data/docker",
        "builder": {
            "gc": {
                "enabled": true,
                "defaultKeepStorage": "20GB"
            }
        }
    }
    EOF
    

    源码安装

    下载路径:https://mirrors.aliyun.com/docker-ce/linux/static/stable/x86_64/
    1. 解压
    2. 拷贝文件到 /usr/bin/
    3. 准备 containerd.service 文件至 /lib/systemd/system/containerd.service 可在在线安装拷贝相同版本文件
    4. 准备 docker.service 文件至 /lib/systemd/system/docker.service 可在在线安装拷贝相同版本文件
    5. 准备 docker.socket 文件至 /lib/systemd/system/docker.socket 可在在线安装拷贝相同版本文件

    启动

    root@ops104:~# systemctl enable --now docker
    Synchronizing state of docker.service with SysV service script with /lib/systemd/systemd-sysv-install.
    Executing: /lib/systemd/systemd-sysv-install enable docker
    root@ops104:~# 
    root@ops104:~# systemctl status docker
    ● docker.service - Docker Application Container Engine
         Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
         Active: active (running) since Wed 2021-12-29 15:05:30 UTC; 13min ago
    TriggeredBy: ● docker.socket
           Docs: https://docs.docker.com
       Main PID: 30861 (dockerd)
          Tasks: 7
         Memory: 37.6M
         CGroup: /system.slice/docker.service
                 └─30861 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
    

    docker警告WARING:No swap limit support 处理

    编辑文件:/etc/default/grub
    GRUB_CMDLINE_LINUX=配置项,原有的内容切记不要删除,在双引号内添加cgroup_enable=memory swapaccount=1,与原来的内容之间用空格分隔。或者执行下面sed命令

    sed -i 's@\(^GRUB_CMDLINE_LINUX=.*\)"$@\1 cgroup_enable=memory swapaccount=1"@g' /etc/default/grub
    
    # 更新grub
    sudo update-grub
    # 重启
    reboot
    # docker info 检查
    docker info
    ······
     Experimental: false
     Insecure Registries:
      127.0.0.0/8
     Registry Mirrors:
      http://hub-mirror.c.163.com/
     Live Restore Enabled: false
    

    docker 命令讲解

    镜像相关

    # 下载镜像
    docker pull nginx
    
    # 上传镜像
    docker push xx/nginx
    
    # 搜索镜像
    docker search nginx
    
    # 查看镜像
    docker image ls 
    
    # 删除镜像
    docker image rm 镜像ID
    
    # 导出镜像
    docker save ngixn:latest -o nginx_latest.tar.gz
    
    # 指定导入名称
    docker import  nginx_latest.tar.gz superops.cc/nginx:v4  
    # 导入镜像
    docker load  -i nginx_latest.tar.gz
    
    # 镜像打标签
    docker tag ngixn:latest harbor.superops.cc/ngixn:latest
    
    # 查看指定镜像的创建历史
    docker image history harbor.superops.cc/ngixn:latest
    
    # 获取镜像元数据信息
    docker image inspect nginx
    
    # 清理镜像
    docker image prune
    

    运行容器相关

    参数

    • -a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
    • -d: 后台运行容器,并返回容器ID;
    • -i: 以交互模式运行容器,通常与 -t 同时使用;
    • -P: 随机端口映射,容器内部端口随机映射到主机的端口
    • -p: 指定端口映射,格式为:主机(宿主)端口:容器端口
    • -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
    • --name="nginx-lb": 为容器指定一个名称;
    • --dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
    • --dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;
    • -h "mars": 指定容器的hostname;
    • -e username="ritchie": 设置环境变量;
    • --env-file=[]: 从指定文件读入环境变量;
    • --cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定CPU运行;
    • -m :设置容器使用内存最大值;
    • --net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;
    • --link=[]: 添加链接到另一个容器;
    • --expose=[]: 开放一个端口或一组端口;
    • --volume , -v: 绑定一个卷
    • --restart, 指定重启策略,
      • no,默认策略,在容器退出时不重启容器
      • on-failure,在容器非正常退出时(退出状态非0),才会重启容器
      • on-failure:3,在容器非正常退出时重启容器,最多重启3次
      • always,在容器退出时总是重启容器
      • unless-stopped,在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器
    # 运行 Mysql 示例
    docker run  -d  --restart=always  -p 3306:3306 --name mysql -v ~/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456  mysql:5.6
    

    进入容器

    地址:https://www.cnblogs.com/yanshicheng/p/9452545.html

    容器的其他操作

    # 创建容器但不运行
    docke container create ....
    
    # 进入容器
    docker container attach 容器ID
    docker container exec -it 容器ID 
    
    # 将容器提交为镜像
    docker container commit -a "yanshicheng xx@vv.com"  -m "日志信息" -p  容器ID harbor.superops.cc/ngixn:v0.1
    
    # 文件拷贝 容器 -> 宿主机
    docker container cp 容器ID:/etc/nginx/nginx.conf /opt/
    
    # 文件拷贝  宿主机 ->  容器
    docker container cp /opt/nginx.conf  容器ID:/etc/nginx/nginx.conf 
    
    # 查看容器和镜像有哪些变化
    docker diff 容器ID
    
    # 查看事件
    docker events
    
    # 容器暂停
    docker container pause 容器ID 
    
    # 取消暂停
    docker container unpause 容器ID 
    
    # 停止
    docker container stop 容器ID 
    
    # 启动
    docker container start 容器ID 
    
    # 重启容器
    docker container restart 容器ID 
    
    # 查看映射端口
    docker container port 容器ID 
    
    # 查看容器
    docker ps 
    docker ps -aq 
    docker ps -aq status=exited
    docker rm -fv `docker ps -aq status=exited`
    
    # 查看 容器状态
    docker container top  容器ID
    
    # 动态查看容器资源消耗情况
    docker container stats 容器ID
    
    # 命令可以用于阻塞一个或多个 Docker容器 直到容器停止,然后打印退出代码。
    docker container wait 容器ID
    
    # 查看容器日志
    docker container logs -f 容器ID 
    
    # 保存容器为 tar 文件
    docker container export -o mysql-`date +%Y%m%d`.tar 2a78c64dd80
    
    # 获取容器元数据
    docker container inspect 容器ID
    

    作者:闫世成

    出处:http://cnblogs.com/yanshicheng

    联系:yans121@sina.com

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。如有问题或建议,请联系上述邮箱,非常感谢。
  • 相关阅读:
    MRF能量优化
    Django:model中的ForeignKey理解
    Django:常见的orm操作
    Django:在模板中获取当前url信息
    Django:haystack全文检索详细教程
    Django:全文检索功能可参考博客
    看电影学英语
    Markdown中怎么上传图片
    Mosquitto的安装、配置、测试
    Django:评论文章后局部刷新评论区
  • 原文地址:https://www.cnblogs.com/yanshicheng/p/15746537.html
Copyright © 2011-2022 走看看