zoukankan      html  css  js  c++  java
  • docker基础命令学习笔记

    Docker 文档地址

    #docker 文档地址
    https://docs.docker.com/
    
    #docker 基本命令参考文档
    https://docs.docker.com/engine/reference/commandline/
    

    Docker 安装-ubuntu版本

    删除原有版本
    sudo apt-get remove docker docker-engine docker.io containerd runc
    
    安装需要的安装包
    sudo apt-get install 
        apt-transport-https 
        ca-certificates 
        curl 
        gnupg-agent 
        software-properties-common
    
    设置镜像的仓库(使用阿里云仓库)
    curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
    sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
    
    更新包索引
    sudo apt-get update
    
    安装 docker-ce 社区版本 ee-企业版本
    sudo apt-get install docker-ce docker-ce-cli containerd.io
    
    验证 hello-world
    #运行容器,如果找不到镜像,会从镜像仓库瞎子
    sudo docker run hello-world
    
    #查看镜像
    sudo docker images
    
    EPOSITORY    TAG       IMAGE ID       CREATED         SIZE
    hello-world   latest    bf756fb1ae65   11 months ago   13.3kB
    
    卸载docker

    卸载依赖

    sudo apt-get purge docker-ce docker-ce-cli containerd.io
    

    删除目录

    sudo rm -rf /var/lib/docker
    

    Docker 安装 - Centos 版本

    删除原有版本
    sudo yum remove docker 
                      docker-client 
                      docker-client-latest 
                      docker-common 
                      docker-latest 
                      docker-latest-logrotate 
                      docker-logrotate 
                      docker-enginesudo apt-get remove docker docker-engine docker.io containerd runc
    
    安装需要的安装包
    sudo yum install -y yum-utils
    
    设置镜像的仓库(使用阿里云仓库)
    sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
    更新包索引
    sudo yum makecache fast
    
    安装 docker-ce 社区版本 ee-企业版本
     sudo yum install docker-ce docker-ce-cli containerd.io
    
    启动docker
     sudo systemctl start docker
    
    验证 hello-world
    sudo docker run hello-world
    
    查看docker镜像
    sudo docker images
    
    EPOSITORY    TAG       IMAGE ID       CREATED         SIZE
    hello-world   latest    bf756fb1ae65   11 months ago   13.3kB
    
    卸载docker

    卸载依赖

     sudo yum remove docker-ce docker-ce-cli containerd.io
    

    删除目录

    sudo rm -rf /var/lib/docker
    

    Docker 镜像加速

    Centos 加速
    sudo mkdir -p /etc/docker
    sudo tee /etc/docker/daemon.json <<-'EOF'
    {
      "registry-mirrors": ["https://xxxxx.mirror.aliyuncs.com"] # 详细地址登录阿里云查看
    }
    EOF
    sudo systemctl daemon-reload
    sudo systemctl restart docker
    
    Ubuntu 加速
    sudo mkdir -p /etc/docker
    sudo tee /etc/docker/daemon.json <<-'EOF'
    {
      "registry-mirrors": ["https://xxxxx.mirror.aliyuncs.com"] # 详细地址登录阿里云查看
    }
    EOF
    sudo systemctl daemon-reload
    sudo systemctl restart docker
    

    Docker 常用命令

    docker 基本命令总览

    image-20210103204736719

    帮助命令
    docker version
    docker info
    docker 命令 --help
    

    镜像命令

    查看镜像
    docker images #查看镜像
    REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
    hello-world   latest    bf756fb1ae65   11 months ago   13.3kB
    
    REPOSITORY 镜像的仓库源
    TAG	镜像的标签
    IMAGE ID 镜像的ID
    CREATED 镜像的创建时间
    SIZE	镜像的大小
    
    参数
    -a 显示所有镜像
    -q 只显示ID
    
    # 详细文档地址
    # https://docs.docker.com/engine/reference/commandline/images/
    
    
    下载镜像
    docker pull  # 下载镜像
    docker pull mysql:5.7 执行下载版本
    
    #详细文档地址
    # https://docs.docker.com/engine/reference/commandline/pull/
    
    删除镜像
    docker rmi -f 镜像ID1 镜像ID2 镜像IDn # 删除指定的镜像
    sudo docker rmi -f $(sudo docker images -aq ) #删除所有
    
    #详细文档地址
    # https://docs.docker.com/engine/reference/commandline/rmi/
    
    构建镜像
    sudo docker build -f dockerfile_name -t name:[tag]
    
    #详细文档地址
    #https://docs.docker.com/engine/reference/commandline/build/
    
    搜索镜像
    # docker 搜索命令
    sudo docker search 镜像名称
    
    #详细文档地址
    # https://docs.docker.com/engine/reference/commandline/search/
    

    容器命令

    新建容器并启动
    sudo docker run [参数] image
    
    #参数说明
    --name="name" 容器名字 用来区分容器
    -d 后台运行方式
    -it 使用交互方式,进入容器查看内容
    -p 	指定容器的端口号
    	[主机ip]:[主机端口]:[容器端口]
    	[主机端口]:[容器端口]
    	[容器端口]
    -P 随机指定端口
    -d 后台启动
    -v 数据卷挂载
    -e 环境配置 (例如:配置mysql的密码)
    
    # 测试并进入容器
    sudo docker run -it centos /bin/bash
    
    #详细文档地址
    # https://docs.docker.com/engine/reference/commandline/run/
    
    
    
    数据卷
    #关于数据卷的解释: 数据卷就是文件夹的数据共享,多个容器可以挂载同一个目录共享数据,或者容器和主机宿主共享数据
    #数据卷的例子
    #测试 制定路径挂载
    #sudo docker run -it -v 主机目录:容器内目录 -p 主机端口:容器端口 
    sudo docker run -it -v /home/ceshi:/home/ceshi centos /bin/bash
    # 查看所有的卷的情况
    sudo docker volume ls
    DRIVER    VOLUME NAME
    local     juming-nginx
    
    
    #匿名挂载:
    -v /etc/nginx # 只填写容器内路径
    sudo docker run -d -P --name nginx01 -v /etc/nginx nginx  #例子匿名挂载
    
    #具名挂载: 
    -v /etc/nginx:/etc/nginx #卷名:容器内路径
    sudo docker run -d -P --name nginx04 -v juming:/etc/nginx nginx  #例子具名挂载
    
    #制定具体路径挂在
    -v 主机路径:容器内路径
    sudo docker run -d -p 3301:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name=mysql01 mysql:5.7
    
    #改变读写权限
    -v juming:/etc/nginx:ro
    -v juming:/etc/nginx:rw
    ro  # read only  路径内容只能通过宿主机来操作
    rw  # read write 改变读写权限
    
    
    # 查看具体的卷的信息
    $ sudo docker volume inspect juming-nginx
    [
        {
            "CreatedAt": "2020-12-27T21:09:20+08:00",
            "Driver": "local",
            "Labels": null,
            "Mountpoint": "/var/lib/docker/volumes/juming-nginx/_data",
            "Name": "juming-nginx",
            "Options": null,
            "Scope": "local"
        }
    ]
    
    所有的 匿名和具名的卷都在: /var/lib/docker/volumes 下
    
    
    
    列出所有运行中的docker
    docker ps # 列出所有正在运行的docker
    -a 			#列出所有容器 运行中的容器 + 历史运行过的容器
    -n=?		# 显示最近创建的n个人容器
    -q			# 只显示容器的编号
    
    #详细文档地址
    # https://docs.docker.com/engine/reference/commandline/ps/
    
    退出容器
    exit #停止并退出
    Ctrl + P + Q  # 不停止退出
    
    删除容器
    sudo docker rm 容器id  # 删除指定的未运行的容器 
    sudo docker rm -f 容器id # 强制上出制定容器
    sudo docker rm -f $(docker ps -aq) # 删除所有
    
    #详细文档地址
    # https://docs.docker.com/engine/reference/commandline/rm/
    
    启动和停止操作
    docker start 容器id #启动容器
    docker restart 容器id #重启容器
    docker stop 容器id #停止容器
    docker kill 容器id #杀死容器进程
    
    进入容器
    # 进入一个容器,首先这个容器必须是启动的
    sudo docker exec -it 容器id /bin/bash
    
    #进入正在执行的终端
    sudo docker attach 容器id 
    
    #例子
    docker exec -it af8e69c9c428 /bin/bash 
    
    #详细文档地址
    # https://docs.docker.com/engine/reference/commandline/exec/
    
    查看日志
    # docker 查看容器日志
    sudo docker logs 
    
    #例子, 运行一个容器,执行无线循环,并查看日志
    sudo docker run --name test -d centos sh -c "while true; do $(echo date); sleep 1; done"
    sudo docker logs -f -t --tail 10 6f47321012d8
    
    -f 跟踪日志输出 
    -t 显示时间戳
    --tail 10  #显示10条记录
    
    #日志
    # https://docs.docker.com/engine/reference/commandline/logs/
    
    查看容运行容器信息
    docker ps 容器id
    
    #详细文档地址
    # https://docs.docker.com/engine/reference/commandline/ps/
    
    查看镜像的元数据
    sudo docker inspect 容器id
    
    #详细文档地址
    #https://docs.docker.com/engine/reference/commandline/inspect/
    
    从文件中拷贝文件到主机
    sudo docker cp 容器id:容器内路径 目标主机路径
    
    #详细文档地址
    # https://docs.docker.com/engine/reference/commandline/cp/
    
    查看docker cup状态
    sudo docker stats 容器id #查看docker 耗费资源情况 ,容器id为可选项
    
    # 详细文档地址
    # https://docs.docker.com/engine/reference/commandline/stats/
    
    
    commit 镜像
    docker commit 提交容器成为一个新的镜像
    
    #命令和git的原理相似
    docker commit -m="提交的描述信息" -a="作者" 容器id 目标镜像名:[TAG]
    
    # 详细文档地址
    # https://docs.docker.com/engine/reference/commandline/commit/
    

    Dockerfile

    编写 dockerfile 的基本指令
    FROM		#基础镜像,从一个最基础的镜像构建
    MAINTAINER  #镜像作者 例如:lvlvstart<halouworld@126.com>
    RUN			#构建镜像需要运行的指令
    ADD			#添加内容
    WORKDIR		#镜像的工作目录,docker run 进入的开始目录
    VOLUME		#挂载的目录
    EXPOSE		#端口配置
    CMD			#需要执行的命令容器运行的时候,替换命令
    ENTRYPOINT	#执行的命令 ,容器运行的时候追加命令
    ONBUILD		#在构建过程中除非的指令
    COPY		#类似Add,将文件拷贝到镜像中
    ENV			#构建的时候,设置环境变量
    
    利用dockerfile 构建一个 spring boot 的 hello world
    #创建一个sprong boot web 的工程 并打包 略
    #编写DockerFile
    vim Dockerfile
     FROM java:8
     COPY *.jar /hello_app.jar
     CMD ["--server-port=8080"]
     EXPOSE 8080
     ENTRYPOINT ["java","-jar","/hello_app.jar"]
     
    #构建镜像
    sudo docker build -t helloworld .
    
    #查看构建成功的镜像
    super@super-TM1707:~/dockerfile/helloworld$ sudo docker images
    REPOSITORY   TAG             IMAGE ID       CREATED         SIZE
    helloworld   latest          69aa8ec89cb1   2 minutes ago   643MB
    
    sudo docker run -d -P --name hello helloworld
    
    
    

    Docker 网络

    #docker 默认的网卡docker0 , 使用docker0 进行docker容器间的通信
    #docekr 的网络默认采用桥接模式
    #docker 使用的是 evth-pair 技术, 提供一对虚拟接口,一般的桥接技术都是采用的这种方式
    
    创建网络命令
    docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet 
    --driver 网卡模式
    	bridge 桥接模式
    --subnet 设置网段
    --gateway 设置网关
    #最后跟上自定义的网络名字
    
    #详细名字
    https://docs.docker.com/engine/reference/commandline/network/
    
    使用自定义网络
    docker run -d -P --name tomcat01 --net mynet tomcat
    #自定义网络 不用过多的设置,多个容器间就可以互相联通
    
    查看自定网络
    docker network inspect mynet
    
    [
        {
            "Name": "mynet",
            "Id": "c4f35d15b8c97a764aef8af015d8e9540c500cde72111cfae044cdd67fafe8e1",
            "Created": "2020-12-31T11:32:09.545307634+08:00",
            "Scope": "local",
            "Driver": "bridge",
            "EnableIPv6": false,
            "IPAM": {
                "Driver": "default",
                "Options": {},
                "Config": [
                    {
                        "Subnet": "192.168.0.0/16",
                        "Gateway": "192.168.0.1"
                    }
                ]
            },
            "Internal": false,
            "Attachable": false,
            "Ingress": false,
            "ConfigFrom": {
                "Network": ""
            },
            "ConfigOnly": false,
            "Containers": {},
            "Options": {},
            "Labels": {}
        }
    ]
    
    
    请关于一下啦^_^

    微信公众号

  • 相关阅读:
    Vue中事件委托的使用
    java提取每个汉字的首字母
    想把大脑存进电脑,我为什么要写博客
    CF 1606 D题题解
    js前端 音频波形图像展示
    js前端 仪表盘实现
    js前端 bootstrap select的使用
    UOS系统维护命令
    linux 打印机管理常用命令
    linux 调用shell命令
  • 原文地址:https://www.cnblogs.com/haloujava/p/14304432.html
Copyright © 2011-2022 走看看