• docker学习笔记


    部署安装docker-ce社区版

    1.安装阿里源
    wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
    
    wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
    
    2.安装依赖包和一些小工具
    yum install -y bash-completion vim lrzsz wget expect net-tools nc nmap tree dos2unix htop iftop iotop unzip telnet sl psmisc nethogs glances bc ntpdate openldap-devel
    
    3.关闭防护墙
    systemctl stop firewalld
    systemctl disable firewalld
    
    4.关闭selinux
    sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
    
    ##关闭swap
    swapoff -a  # 临时
    sed -ri 's/.*swap.*/#&/' /etc/fstab    # 永久
    
    
    5.uname -r 查看内核必须是3.1版本以上
    
    6.修改内核参数,开启内核转发功能
    
    cat <<EOF > /etc/sysctl.d/docker.conf
    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1
    net.ipv4.conf.default.rp_filter = 0
    net.ipv4.conf.all.rp_filter = 0
    net.ipv4.ip_forward=1
    EOF
    
    重新加载配置
    sysctl -p /etc/sysctl.d/docker.conf
    
    报错
    sysctl: cannot stat /proc/sys/net/bridge/bridge-nf-call-ip6tables: No such file or directory
    sysctl: cannot stat /proc/sys/net/bridge/bridge-nf-call-iptables: No such file or directory
    
    先执行modprobe br_netfilter
    
    在重新加载内核配置
    sysctl -p /etc/sysctl.d/docker.conf
    
    
    7.安装Docker-CE社区版
    下载docker-ce对应的源
    
    curl -o /etc/yum.repos.d/docker-ce.repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
    重新加载yum缓存
     yum clean all && yum makecache
     
     安装docker-ce社区20版本
     yum install docker-ce-20.10.6 -y
     
     
    8.添加源加速器
    mkdir -p /etc/docker
    touch /etc/docker/daemon.json
    vi  /etc/docker/daemon.json
    
    
    {
     "registry-mirrors" : [
     "https://8xpk5wnt.mirror.aliyuncs.com"
     ]
    }
    
    
    
    9.加载配置启动docker
    
    systemctl daemon-reload
    systemctl enable docker 
    systemctl restart docker
    
    10.查看是否安装完成
    # docker version
    
    显示:如下表示成功ץ
    Client: Docker Engine - Community
     Version:           20.10.12
     API version:       1.41
     Go version:        go1.16.12
     Git commit:        e91ed57
     Built:             Mon Dec 13 11:45:41 2021
     OS/Arch:           linux/amd64
     Context:           default
     Experimental:      true
    
    Server: Docker Engine - Community
     Engine:
      Version:          20.10.6
      API version:      1.41 (minimum version 1.12)
      Go version:       go1.13.15
      Git commit:       8728dd2
      Built:            Fri Apr  9 22:43:57 2021
      OS/Arch:          linux/amd64
      Experimental:     false
     containerd:
      Version:          1.4.12
      GitCommit:        7b11cfaabd73bb80907dd23182b9347b4245eb5d
     runc:
      Version:          1.0.2
      GitCommit:        v1.0.2-0-g52b36a2
     docker-init:
      Version:          0.19.0
      GitCommit:        de40ad0
      
    11.检查内核和是否安装了存储驱动
      uname -r
       ls -l /sys/class/misc/device-mapper/  查看存储驱动
       yum install device-mapper -y  安装存储驱动
       modprobe dm-mod  加载存储驱动模块
       
    12 时间同步
    yum install ntpdate -y
    ntpdate ntp.aliyun.com
    
       
    13.docker容器的三大要素 :镜像  容器  仓库
       docker镜像是不包含内核的就只是一个发型版本
    

    docker镜像常用命令

    镜像常用命令:
    查找命令 docker  search   镜像名/ID
    下载命令:docker  pull   镜像名/ID   (docker /var/lib/docker中  通过docker info | grep "Docker Root Dir" 可以查看)
    推送命令:docker  push   镜像名/ID
    删除镜像:docker  rmi   镜像名/ID
    删除所有镜像: docker rmi `docker images -aq`
    本地导入镜像:(①docker load --input tomcat.tar    #使用input导入  ②docker load < tomcat.tar       #使用重定向导入)
    导出到本地镜像:docker  save  -o    本地镜像名称(默认是tar)   镜像
    改镜像名称:docker   tag  镜像ID    名称
    

    docker容器常用命令

    容器常用命令:
    生成创建一个容器:docker  run   -t  -d   -p 宿主机端口:容器端口  --name=起的容器名    镜像  (备注:8080是物理机端口)
    容器多端口映射:docker  run   -t  -d   -p 8080:80  -p 443:443 --name=起的容器名    镜像 
    进入容器方法1:docekr  exec  -it 容器名/ID  /bin/bash
    进入容器方法2:docker attach 容器ID(生:产环境禁用)
    启动容器:docker start  容器/ID
    重启容器:docker restart  容器/ID
    关闭容器:docker stop 容器/ID
    查看所有容器:docker  ps  -a
    查看运行中容器:docker ps   (docker container ls)
    删除容器:docker rm  容器名/ID     (加  -f  docker rm  -f  容器名/ID  强制删除)
    删除所有容器:docker rm `docker ps -aq`
    退出容器:exit
    查看容器进程信息:docker  top  容器名/ID
    容器CPU IO 内存等资源使用情况:docker  stats  容器名/ID
    查看容器详情:docker inspect  容器ID  
    查看容器日志:docker logs 容器名/ID
    导出容器:docker export  容器名/ID  > 容器名.tar
    导入容器会变成镜像:docker import nginx02.tar    test/nginx02:v1.0(docker images查看)
    
    获取容器IP: docker inspect --format {{.NetworkSettings.IPAddress}} 容器/ID
    
    
    docker run -d --name=容器名  --restart=always   镜像  bash  (注释:--restart=always表示挂了就启动)
    
    

    dockerfile

    dockerfile是用于构建镜像
    
    dockerfile指令:
    FROM  指定基础镜像(例如:FROM centos \ FROM  debian 等等)
    MAINTAINER 指定作者信息(例如:MAINTAINER "duanqk" )
    RUN   想干什么(例如: RUN yum install -y nginx )
    ADD    拷贝宿主机文件到容器内,并自动解压 (例如:ADD index.html.tar.gz /var/www/html/index.html)
    COPY   拷贝宿主机文件到容器内(例如:ADD index.html /var/www/html/index.html)
    WORKDIR  就是cd命令(设置当期目录)
    volume    设置卷,挂载主机目录的(volume /date 将容器内的/data文件夹。容器运行时该目录自动挂载,目录中写入数据操作,不会被容器记录为匿名挂载卷)
    EXPOSE   指定对外端口   80(帮助使用该镜像的人理解对外提供服务的端口)
    CMD    容器启动后干什么事 (例如 :CMD ["/bin/bash"])
    
    cat /etc/os-release  等同  CMD ["cat","/etc/os-release"]
    
    容器中启动程序都是在前台运行  CMD systemctl start nginx 是错误的
    正确启动容器命令 CMD ["nginx","-g","daemon off;"]
    
    
    ENTRYPOINT与CMD区别以及用法
    1.作用和CMD一样,都是在指定容器启动程序以及参数
    2.当指定了entrypoint后,CMD指令的语义就有了变化。而是把CMD的内容当做参数传递给entrypoint
    
    ENTRYPOINT ["nginx","-g","daemon off;"]
    
    ENV  设置环境变量的(例如:ENV  name="dqk") 无论容器运行或者构建时,变量都可以用
    ARG   设置环境变量 (镜像构建时可以用,容器运行时消失)
    
    创建镜像:
    docker build -t 'centos-httpd:v1'   . (注意 .)
    
     -t: 镜像的名字及标签,通常 name:tag 或者 name 格式
     
     --no-cache不采用之前缓存构建
    docker build -t --no-cache 'centos-httpd:v1'   . (注意 .)
    
    改下镜像名称:docker   tag  镜像ID    名称
    
    查看详情:docker inspect  容器ID  
    

    docker构建私人镜像仓库

    一、搭建本地私有仓库
    1.1 首先下载registry镜像
    
    docker pull registry
    
    1.2 在daemon.json文件中添加私有镜像仓库地址
    vim /etc/ docker/daemon.json
    {
    "insecure-registries": ["192.168.224.131:5000"],
    #添加,注意用逗号结尾
    "registry-mirrors": ["https://6ijb8ubo.mirror.aliyuncs.com"]
    }
    
    systemctl restart docker.service
    
    
    1.3 运行registry容器
    docker run -itd -v /data/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry:latest
    ===================================================
    -itd: 在容器中打开一个伪终端进行交互操作,并在后台运行
    -v: 把宿主机的/data/registry目录绑定到容器/var/lib/registry目录(这个目录是registry容器中存放镜像文件的目录),来实现数据的
    持久化;
    -p:映射端口;访问宿主机的5000端口就访问到registry容器的服务了
    --restart=always: 这是重启的策略,在容器退出时总是重启容器
    --name registry: 创建容器命名为registry
    registry:latest:这个是刚才pull下来的镜像
    ====================================================
    Docker容器的重启策略如下:
    no:默认策略,在容器退出时不重启容器
    on-failure: 在容器非正常退出时(退出状态非0),才会重启容器
    on-failure:3 :在容器非正常退出时重启容器,最多重启3次
    always: 在容器退出时总是重启容器
    unless-stopped: 在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器
    
    1.4查看私有镜像仓库是否启动
    docker  ps
    
    1.5 查看本地有哪些镜像,为镜像打标签
    docker images
    举例打标签:docker  tag  nginx:1.16   192.168.224.131:5000/nginx:1.16
    
    1.6上传到私有仓库
    docker  images查看
    推送到私有仓库
    docker push 192.168.224.131:5000/nginx
    
    1.7查看私有仓库镜像
    curl http://192.168.224.131:5000/v2/_catalog
    
    {"repositories":["busybox","exechealthz-amd64","kube-dnsmasq-amd64","kubedns-amd64","mysql","nginx","tomcat"]}
    
    参考51cto的博客:https://blog.51cto.com/u_15127632/4330542
    
  • 相关阅读:
    POI做报表
    (一) DB2的备份和恢复:准备
    西天取经为节约成本该裁掉哪位?
    python中configpraser模块
    python中subprocess模块
    python中os模块
    python中random模块
    python中time模块和datetime模块
    python中序列化json模块和pickle模块
    迭代器生成器函数的递归调用与二分法
  • 原文地址:https://www.cnblogs.com/wzhc/p/15945204.html
Copyright © 2020-2023  润新知