zoukankan      html  css  js  c++  java
  • docker

    docker安装

    1.安装docker所需的软件

    yum install -y yum-utils device-mapper-persistent-data lvm2
    

    2.添加docker源

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

    3.安装docker,这里安装的是docker-ce,版本为17+,不加ce的话安装的是13版本。

    yum -y install docker-ce

    4.关闭selinux并启动并测试

    systemctl start docker
    docker run hello-world
    

    使用docker中国官方镜像加速

    [root@localhost ~]# vim /etc/docker/daemon.json
    {
      "registry-mirrors": ["https://registry.docker-cn.com"]
    }    

    使用阿里镜像加速器:https://cr.console.aliyun.com/cn-hangzhou/mirrors,获取自己的加速器地址

    sudo mkdir -p /etc/docker
    sudo tee /etc/docker/daemon.json <<-'EOF'
    {
      "registry-mirrors": ["https://r5pbevix.mirror.aliyuncs.com"]
    }
    EOF
    sudo systemctl daemon-reload
    sudo systemctl restart docker

    使用刀云加速

    curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io

    容器的生命周期

    1.检查本地是否存在镜像,如果不存在从远端从库拉取
    2.利用镜像启动容器
    3.分配一个文件系统,并在只读的镜像层外挂一层可写层
    4.从宿主机配置的网桥接口中桥接一个虚拟接口到容器
    5.从地址池配置一个ip给容器
    6.执行用户指定的命令
    7.执行完毕容器终止

    镜像管理相关命令

    docker image
      ls:列出镜像列表
      build:通过dockerfile创建镜像
      history:查看镜像历史
      inspect:显示一个或多个镜像详细信息
      pull:从镜像仓库拉取镜像
      push:推送镜像到镜像仓库
      rm:移除一个镜像或多个镜像
      prune:移除未使用的镜像。没有被标记或被任何容器使用的
      tag:给镜像打标签
      export:导出容器文件系统到tar归档
      import:导入容器文件系统,--input
      save:保存一个或多个镜像到tar归档文件,docker save 2f4qfsa4 > xxxx.tar
      load:加载镜像,docker load < xxxx.tar
    docker images
      --no-trunc:查看完整的imagesID
      -a:查看所有的镜像
      -q:只返回id列   

    容器运行常用选项

    docker container run
      -h:设置容器主机名,就是hostname
      -i:交互式
      -t:分配一个伪终端
      -d:在后台运行,itd为常用选项
      -e key=value:设置环境变量
       --rm:退出后删除容器
      -p:发布容器端口到宿主机
        HostPort:containerPort 指定端口映射
        ip:hostPort:containerPort 指定ip端口映射
        ip::containerPort 指定ip随机端口映射
        hostPort:containerPort:tcp 指定协议
             -p HostPort:containerPort -p HostPort:containerPort:多次指定端口
      -P:容器端口随机映射到宿主机
      --name:设置容器名字
      --ip:指定容器ip,只能用于自定义网络
      --link:
      --network:指定容器所在网络
      --mount:挂载宿主机分区到容器
      --restart:no|always|no-failure容器退出后是否重新启动容器,默认no
      -m:容器可以使用的最大内存量
      --memory-swap:允许交换到磁盘的内存量
      --cpus:限制容器可以使用多少cpu资源,1代表1个cpu,1.5代表一个半 
      --oom-kill-disable:后面不加参数,禁用自动杀掉容器功能 
    
    #创建1核512M的centos镜像
    docker run -itd --name cent --cpus 1 --memory 512m --memory-swap 600m centos 
    #映射nginx端口
    docker run -itd --name nginx -p 88:80 nginx 

    容器管理常用命令

    docker
      ps:查看容器列表,-a查看全部
      container ls:列出容器
      inspect:显示容器详细信息,-f {{ .State.PID }}可以指定内容
      exec:在容器中运行命令,如果进入容器docker exec -it 容器名 sh
      commit:将容器构建成镜像,-a:指定作者,-m:指定附加信息,-p:创建镜像时暂停容器
      cp:拷贝文件,docker cp 本地文件 容器名:/保存路径 ,同样可以把容器中的文件拷贝到本地,类似于scp命令
      logs:查看容器日志,-f持续输出
      port:列出指定容器的端口映射
      stats:显示容器资源使用情况
      top:显示容器运行的进程
      update:更新容器配置,cpu,内存
      stop/start/restart:停止/启动/重启容器
      rm:删除容器  
    快速停止所有容器:docker kill `docker ps -a -q`
    快速删除所有容器:docker rm `docker ps -a -q`    

     数据卷常用命令

    docker volume
      create:创建一个卷,卷存在于/var/lib/docker/volumes下(要写的数据在_data下)
      inspect:查看卷详细信息
      ls:查看卷列表
      prune:移除没有被使用过的卷
      rm:删除数据卷
    #1.创建带有数据卷的容器,volume方式(建议方式)
    #(如果没有指定卷名,自动创建)
    docker run -itd --name=nginx-test --mount src=容器卷名称,dst=容器内路径 nginx
    #2.将宿主机的目录或文件映射到容器内,bind方式 
    #(如果如果源文件或目录不存在会报错)
    #(如果目标为非空目录,目录内容将被隐藏)
    docker run -itd --name=nginx-test --mount type=bind,src=宿主机路径,dst=容器内路径 nginx
    
    #其他
    #docker run --name test1 -d -v /SOURCE:/DEST:rw centos:将本机的/SOURCE目录以读写方式(ro只读)挂载到docker容器的/DEST目录
    
    #docker run --name test2 -d --volumes-from test1 centos:直接使用test1的数据卷   

     自定义网络

    #手动创建动docker网络,不需要考虑ip地址规划,让docker自己解决
    docker network create 网络名称
    
    #docker五种网络模式
    -net=XXX:与默认的bridge原理一样,网络内具有DNS解析
    -net=bridge:默认网络,通过宿主机docker0网桥通信
    -net=host:容器与宿主机共用一个ip,除了网络其他都是隔离的
    #下面不常用
    -net=none:不为容器进行网络配置
    -net=container:容器名称/容器ID:与指定容器使用同一个ip,container关键字
    
    
    #创建容器时指定网络
    [root@localhost ~]# docker network create test
    [root@localhost ~]# docker run -itd --name=db --net=test centos

     dockerfile 

    docker build -t 仓库/镜像名:标签  -f dockerfile .
      -t:指定制作的镜像名称
      -f:指定dockerfile
      .:指定路径
      --no-cache:不使用缓存
    
    FROM:必须为首行,基于哪个镜像构建
    MAINTAINER:作者
    RUN:后面接命令,在构建镜像时候要执行的命令
    ENV:设定环境变量,格式为ENV  <key>  <value>
    ADD:复制文件到哪,源文件应放置和dockerfile同目录下,具有解压tar功能
    COPY:单纯的复制,没有解压
    USER:指定当前用户
    WORKDIR:设置当前工作目录
    VOLUME:设置卷,通常在创建时候再指定
    EXPOSE:设置对外开放的端口
    CMD:构建镜像完成之后才会执行的命令,后面接命令,只有最后出现的CMD才生效,同时会被docker run最后传递的命令覆盖
    ENTRYPOINT:同CMD,但是不会被覆盖。  

    示例:编译安装nginx

    FROM centos:7
    MAINTAINER www.ctnrs.com
    RUN yum install -y gcc gcc-c++ make 
        openssl-devel pcre-devel gd-devel 
        iproute net-tools telnet wget curl && 
        yum clean all && 
        rm -rf /var/cache/yum/*
    RUN wget http://nginx.org/download/nginx-1.15.5.tar.gz && 
        tar zxf nginx-1.15.5.tar.gz && 
        cd nginx-1.15.5 && 
        ./configure --prefix=/usr/local/nginx 
        --with-http_ssl_module 
        --with-http_stub_status_module && 
        make -j 4 && make install && 
        rm -rf /usr/local/nginx/html/* && 
        echo "ok" >> /usr/local/nginx/html/status.html && 
        cd / && rm -rf nginx-1.15.5* && 
        ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
    
    ENV PATH $PATH:/usr/local/nginx/sbin
    COPY nginx.conf /usr/local/nginx/conf/nginx.conf
    WORKDIR /usr/local/nginx
    EXPOSE 80
    CMD ["nginx", "-g", "daemon off;"]  

    私有仓库镜像

    1.下载仓库镜像registry
    [root@registry ~]# docker pull registry
    2.创建镜像容器,加载数据卷并暴露端口
    [root@registry ~]# docker run -itd --mount type=bind,src=/docker,dst=/var/lib/registry --name=registry -p 5000:5000 registry
    3.在配置文件中添加信任仓库,并重启docker(仓库这里有个逗号)
    [root@node ~]# vim /etc/docker/daemon.json 
    {
      "registry-mirrors": [ "https://registry.docker-cn.com"],
      "insecure-registries": [ "自己镜像仓库ip:5000"]
    }
    4.为已有任意镜像打标签,不指定版本为latest
    [root@node ~]# docker tag nginx 192.168.183.130:5000/nginx:v2
    5.推送镜像至仓库
    [root@node ~]# docker push 192.168.183.130:5000/nginx:v2
    6.列出镜像仓库中的镜像
    [root@node ~]# curl  http://192.168.183.130:5000/v2/_catalog
    {"repositories":["nginx"]}
    7.查看指定镜像版本号
    [root@node ~]# curl  http://192.168.183.130:5000/v2/nginx/tags/list
    {"name":"nginx","tags":["v2"]}
    8.从私有仓库拉取镜像
    [root@node ~]# docker pull 192.168.183.130:5000/nginx:v2  

     Harbor

    harbor镜像仓库的下载地址:https://github.com/goharbor/harbor/releases
    docker-compose下载地址:https://github.com/docker/compose/releases
    1.下载压缩包后解压
    tar zxvf harbor-offline-installer-v1.5.1.tgz 
    2.下载docker-compose并给予执行权限
    curl -L https://github.com/docker/compose/releases/download/1.24.0-rc1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
    
    chmod +x /usr/local/bin/docker-compose
    3.将目录切换至harbor配置文件内
    cd harbor
    4.编辑harbor.cfg配置文件
    hostname=当前主机地址
    harbor_admin_password=123456
    5.执行准备操作并安装
    ./prepare
    ./install.sh
    7.添加镜像仓库为可信任
    vi /etc/docker/daemon.json
    {"insecure-registries":["当前主机地址"]}
    systemctl restart docker
    6.通过docker-compose启动和关闭harbor
    docker-compose up -d:在后台启动harbor
    docker-compose down:停止并删掉harbor相关容器
    7.在浏览器中输入本机地址即可打开harbor
    8.在往harbor镜像仓库中推送镜像前,需要先给镜像打标签,可在图形化界面查看打标签方法

    docker-compose:根据docker-compose的yml文件
      start:开启
      stop:关闭
      up -d :建立组件并运行在后台
      down:关闭组件并删除

    打标签

    docker tag IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]
    
    #例:
    docker tag ubuntu:latest 127.0.0.1:5000/ubuntu:latest

    推镜像

    docker push 127.0.0.1:5000/ubuntu:latest

    构建镜像

    docker  commit  [选项]  容器名称  镜像名称
      -a="":指定镜像作者
      -m="":指定携带信息
      -p:提交时暂停容器

    [root@localhost ~]# docker commit -a="author" -m="message" -p red testredhat

    遇到的错误

    1.docker无法启动,提示selinux问题

    可以直接关掉selinux,也可以修改下面的内容
    [root@master k8s]# vi /etc/sysconfig/docker
    OPTIONS='--selinux-enabled=false  

    2.创建volume卷后,启动容器使用--mount命令,发现没有此命令

    使用docker -v命令可以查看docker的版本号,有些命令是在新版本中才有的,如果安装docker时,装的是低版本需要卸载后,重新安装17+版本
    

    3.oci错误,管道错误

    原因可能是系统中需要的依赖软件版本太低,需要使用yum upgrade -y命令升级依赖软件,不要使用yum update,这个会把系统内核版本也升上去。
    

    4.docker自定义网络,容器内无法通信

    在确认自定义网络没有错误的前提下,可能镜像有问题,换个镜像尝试下
    

    5.docker登陆harbor时提示https错误

    1.在要登录的机器上查找docker启动配置文件
    [root@bogon ~]# find / -name docker.service
    2.编辑这个文件,添加--insecureregistry=harbor主机ip地址
    [Service]
    Type=notify
    ExecStart=/usr/bin/dockerd -H fd:// -containerd=/run/containerd/containerd.sock --insecureregistry=192.168.183.131
    ExecReload=/bin/kill -s HUP $MAINPID
    TimeoutSec=0
    RestartSec=2
    Restart=always
    3.保存退出后,重启服务,再登陆就可以了
    [root@bogon ~]systemctl daemon-reload
    [root@bogon ~]systemctl restart docker
    4.查看进程可以看到已经加上了刚才的选项
    [root@bogon ~]# ps aux | grep docker
    root 17547 0.1 2.9 479908 54592 ? Ssl 11:11 0:00 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --insecure-registry=192.168.183.131
    root 18154 0.0 0.0 112724 988 pts/0 S+ 11:19 0:00 grep --color=auto docker
    

    6.更改docker存储文件的位置

    # 先停止docker
    systemctl stop docker
    
    # 编辑docker的启动配置,在启动命令后面加上--graph并指定存储位置
    vim /usr/lib/systemd/system/docker.service  
    ExecStart=/usr/bin/dockerd --graph /new-path/docker 
    
    # 保存退出后,重载systemd配置
    systemctl daemon-reload
    
    # 启动docker即可
    systemctl start docker
    

      

      

      

      

      

      

      

      

    初学linux,每学到一点东西就写一点,如有不对的地方,恳请包涵!
  • 相关阅读:
    JQuery计算当前Dom结构在浏览器窗口中被显示方法(懒加载原理)
    图片png24格式在IE6下半透明解决办法
    CSS方式支持IE6的fixed样式
    ecshop模板首页或列表页显示商品简单描述
    ecshop静态、 ecshop伪静态、ecshop伪静态设置详细方法、ECSHOP静态化方法
    批量清除ecshop全部商品的精品 新品和热销属性的方法
    ecshop商品页显示累计销售量,ecshop显示商品销售总数量的方法
    常用JQuery插件整理、前端适用
    ecshop销售排行榜显示销售 销量的商品的件数方法
    Ecshop IIS Rewrite伪静态规则
  • 原文地址:https://www.cnblogs.com/forlive/p/9493996.html
Copyright © 2011-2022 走看看