zoukankan      html  css  js  c++  java
  • Docker基础五(容器的基本操作)

    一、查看 Docker 命令行帮助

        1、查看帮助的方法
            Docker 操作命令分为: 管理命令与直接命令参数
      1、管理命令为区分每个项目的命令, 比如说镜像操作, 就是以docker image 开头

      2、直接命令参数就是在docker 命令之后直接的命令, 比如说删除镜像 docker rmi

      3、管理命令相对于直接命令参数,更加严谨。

    [root@master ~]# docker --help

        2、常用基本操作列表

    动作
    解释

    创建container

    docker container create image_name

    创建并运行container 及进入交互终端参数

    docker container run -it image_id CMD -i 交互模式
    -t 终端
    -it 为分配一个交互式终端

    -d 放在后台
    -p 端口映射
    -v 源地址(宿主机):目标地址(容器) --name 指定容器的名字
    -h 指定容器主机名
    --restart=always 每次重启服务,容器

    创建并运行container 并让其在后台运行,并端口映射

     
    docker container run -p [port incontainer]:[port inphysical system] -d [image][command]

     

    查看正在运行的所有container 信息

     

    docker container ps = docker ps

     

    查看最后创建的container

    docker container ps -l  = docker ps -l

     

    查看所有container,包括正在运行和已经关闭的

     

    docker container ps -a = docker ps -a

     
     

    输出指定container 的stdout 信息(用来看log,效果和tail -f 类似,会实时输出。)

    docker container logs -f [container]

     
     

    获取container 指定端口映射关系

    docker container port [container] [port]

     

    查看container 进程列表

    docker container top [container]

    查看container 详细信息

    docker container inspect [container]

    停止continer

    docker container stop [container]

    强制停止container

    docker container kill [container]

    启动一个已经停止的container

    docker container start [container]

    重启container(若container 处于关闭状态,则直接启动)

    docker container restart [container]

    删除container

    docker container rm [container] -f 强制删除

     

        3、常用容器操作命令详解

    # 启动容器, -P 生成随机映射端口
    [root@master ~]# docker run --name t1 -d -P nginx
    1ae96c67531d50333b332e1e1d59c152b3edb2a807443b360c2ce298bff3051d
    #查看日志
    [root@master ~]#  docker logs -f t1
    # 获取到端口
    [root@master ~]# docker ps -a
    # 访问容器
    [root@master ~]# curl http://localhost:32769
    # 显示日志
    [root@master ~]# docker logs -f t1
    172.17.0.1 - - [25/Aug/2020:06:25:37 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.29.0" "-"

        4、创建容器

      语法:docker container run [OPTIONS] IMAGE[:TAG] [COMMAND] [ARG...]

      -i 交互模式
      -t 终端
      -it 为分配一个交互式终端
      -d 放在后台 (nohup command &)
      -p 端口映射
      -v 源地址(宿主机):目标地址(容器) (本地的宿主机的目录挂载到容器目录) -h 指定容器主机名
      --name 指定容器的名字
      --restart=always 每次重启服务,容器跟着重启

        创建容器, 并且挂载本地目录到容器目录,把宿主机的/test目录挂载到容器的/mnt目录(新开终端)

    # 宿主机建立目录
    [root@master ~]# mkdir  /test
    #启动新容器, 指定主机名为 test, 容器名为 t11, 在终端打开-it
    [root@master ~]# docker run -it --name t11 test -v /test:/mnt centos /bin/bash
    # 宿主机创建文件
    [root@master /]# touch /test/t11.txt
    # 容器查看文件
    [root@test /]# ls /mnt/
    t11.txt

     创建一台新容器,并进入镜像系统

    [root@master ~]# docker container run -it centos /bin/bash
    [root@5dc2f7bd6bc9 /]#

       5、容器启动、停止

      语法:docker container start [OPTIONS] CONTAINER [CONTAINER...]
      完整信息,请查看:docker container start --help
      启动一个 container。
    # 列出所有容器,包括运行与停止的容器, 获取到容器 id
    [root@master ~]# docker ps -a  = [root@master ~]# docker container ps -a
    CONTAINER ID        IMAGE                     COMMAND                  CREATED             STATUS                       PORTS                   NAMES
    5dc2f7bd6bc9        centos                    "/bin/bash"              3 minutes ago       Exited (130) 7 seconds ago                           nervous_cori
    # 根据容器 id 启动容器
    [root@master ~]# docker start 5dc2f7bd6bc9
    5dc2f7bd6bc9
    # 查看正在运行的程序
    [root@master ~]# docker ps
    CONTAINER ID        IMAGE                     COMMAND                  CREATED             STATUS              PORTS                   NAMES
    5dc2f7bd6bc9        centos                    "/bin/bash"              5 minutes ago       Up 12 seconds                               nervous_cori

        6、进入docker容器

      1、exec

      语法:docker container exex [OPTIONS] CONTAINER [CONTAINER...]   完整信息请查看:docker exec --help

           exec 会分配一个新的终端(pts)

      docker container exec -it 容器ID或者容器名字 /bin/bash

      # 执行进入必须要带参数和COMMAND  如:/bin/bash

    # 进入容器可以用容器运行的 id, 也可以用容器名称, 其目的都是唯一定位到容器
    [root@master ~]# docker ps
    CONTAINER ID        IMAGE                     COMMAND                  CREATED             STATUS              PORTS                   NAMES
    5dc2f7bd6bc9        centos                    "/bin/bash"              About an hour ago   Up About an hour                            nervous_cori
    [root@master ~]# docker container exec -it 5dc2f7bd6bc9  /bin/bash
    [root@5dc2f7bd6bc9 /]#

        2、attach

      语法:docker container attach CONTAINER

    # 如果 Docker 容器是使用/bin/bash 命令启动的,则可以使用 attach 
    [root@master ~]# docker attach 5dc2f7bd6bc9
    [root@5dc2f7bd6bc9 /]# exit

        exec 与attach 区别

            EXEC: 在一个正在运行的容器中执行命令,exec是针对已运行的容器实例进行操作,在已 运行的容器中执行命令,不创建和启动新的容器,退出shell不会导致容器停止运行。

            Attach: 将本机的标准输入(键盘)、标准输出(屏幕)、错误输出(屏幕)附加到一个运行 的容器,也就是说本机的输入直接输到容器中,容器的输出会直接显示在本机的屏幕上, 如果退出容器的shell,容器会停止运行。

        7、重启服务,容器自启动

      Docker命令行添加参数docker run --restart=always

    [root@master ~]#  docker run -d --restart=always nginx
    72a3c79b3c5e951d91e4b02d75922615b9954059ef93f2fc6085160381262070
    [root@master ~]# docker ps
    CONTAINER ID        IMAGE                     COMMAND                  CREATED             STATUS              PORTS                   NAMES
    72a3c79b3c5e        nginx                     "/docker-entrypoint.…"   21 seconds ago      Up 20 seconds       80/tcp                  compassionate_euler
    1ae96c67531d        nginx                     "/docker-entrypoint.…"   10 hours ago        Up 10 hours         0.0.0.0:32769->80/tcp   t1
    6816ade398c3        repo.abc.com/nginx:v1.0   "/docker-entrypoint.…"   41 hours ago        Up 41 hours         0.0.0.0:9091->80/tcp    condescending_shaw
    [root@master ~]# systemctl  restart docker
    [root@master ~]# docker ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
    72a3c79b3c5e        nginx               "/docker-entrypoint.…"   37 seconds ago      Up 4 seconds        80/tcp              compassionate_euler

        8、容器其他操作

    # 关闭所有正在运行的容器
    [root@master ~]# docker kill $(docker ps -q)
    # 移除所有停止的容器
    [root@master ~]# docker rm $(docker ps -a -q)
    # 根据状态移除
    [root@master ~]# docker rm $(docker ps -q -f 'status=exited' -n 3) 
    [root@master ~]# docker rm $(docker ps -q -f 'status=exited') # 根据标签移除 [root@master ~]# docker rm $(docker ps -a | grep nginx | awk '{print $1}')

        9、容器资源限制

      查看容器资源情况

    [root@master ~]#  docker stats 72a3c79b3c5e
    CONTAINER ID        NAME                  CPU %               MEM USAGE / LIMIT     MEM %               NET I/O             BLOCK I/O           PIDS
    72a3c79b3c5e        compassionate_euler   0.00%               1.391MiB / 3.682GiB   0.04%               656B / 0B           0B / 0B             2

     CPU 资源限制

      根据CPU核心去绑定

    # 容器可占用的 CPU 核编号,0-3 表示占用四个核,0,1 表示占用两个核 [root@master ~]#
    [root@master ~]# docker run --name nginx-t1 --cpuset-cpus=0 -d -P nginx

      内存限制

    [root@master ~]# docker run --name nginx-t2 --cpuset-cpus=0 -m 300M -d -P nginx

        10、容器空间限制

      容器可占用的 CPU 核编号,0-3 表示占用四个核,0,1 表示占用两个核 [root@master ~]# docker run --name nginx-t1 --cpuset-cpus=0 -d -P nginx

      限制单个容器使用的磁盘空间(非全局)
      docker run -it --storage-opt size=12m alpine:latest /bin/df -h | grep overlay

      Dokcer 中使用overlay2.size (注意存储驱动overlay),限制每个容器可以占用的磁盘空 间,并且需要xfs(CentOS 7默认的文件)文件系统支持,xfs挂载时使用pquota参数, 在实 际的生产中,建议用独立的磁盘作为docker的存储盘。

      增加一块硬盘格式化为xfs

    [root@master /]# mkdir  /data1
    [root@master /]# docker info | grep "Storage Driver"
      Storage Driver: overlay2
    [root@master /]# docker info | grep "Backing"
    Backing Filesystem: <unknown>
    [root@master /]# fdisk /dev/sdb
    [root@master /]# mkfs.xfs  /dev/sdb
    [root@master /]# ll /dev/disk/by-uuid/*

      正常情况

    [root@master /]# docker info
    Server Version: 19.03.6
     Storage Driver: overlay2
      Backing Filesystem: xfs

      设置/etc/fstab挂载

    [root@master /]# vim  /etc/fstab
    UUID=64f31a87-89fe-4b36-9e56-95d72ffe82fd /data1                   xfs     defaults        0 0

      查看挂载

    [root@master /]# cat /etc/fstab
    /dev/sdb /data1 xfs rw,relatime,attr2,inode64,noquota 0 0

      配置docker(这块配置有问题docker起不来,json格式好像不对)

    [root@master ~]# mkdir -p /data/docker [root@master ~]# vi /etc/docker/daemon.json 
    {
    "registry-mirrors": ["https://plqjafsr.mirror.aliyuncs.com"],
    "data-root": "/data/docker", "storage-driver": "overlay2", "storage-opts": [ "overlay2.override_kernel_check=true", "overlay2.size=1G"] }

      重启docker

     [root@master ~]# ssystemctl restart docker.service

      查看docker

    [root@master ~]# docker info | grep 'Docker Root Dir'
    WARNING: API is accessible on http://0.0.0.0:2375 without encryption.
    Access to the remote API is equivalent to root access on the host. Refer
    to the 'Docker daemon attack surface' section in the documentation for
    more information: https://docs.docker.com/engine/security/security/#docker-daemon-attack-surface
    Docker Root Dir: /data/docker

      启动容器测试

     [root@master ~]# docker run -it centos /bin/bash
     [root@f6b9617d3736 /]# dd if=/dev/zero of=/test.txt bs=130M count=10
    dd: error writing '/ test.txt': No space left on device

      启动新容器,写入文件

    [root@master ~]# docker run -it centos /bin/bash
    [root@4dd62c6ef62e /]# dd if=/dev/zero of=/test1.txt bs=230M count=1 
    1+0 records in
    1+0 records out

  • 相关阅读:
    多种支付实现(只需要添加, 修改类方法)
    事务的隔离级别 另一种事务开启方式
    序列化类补充 source关键字参数 SerializerMethodField方法
    分类的数据处理 第一种递归处理,第二种树型结构 无极限分类
    数据库补充 navicate导入与导出
    微信小程序开发5 后端解析wx.getUserInfor中的用户信息, 微信小程序支付
    微信小程序开发4 登录与授权
    微信小程序开发3 自定义组件(传参), 页面跳转(传参), 小程序本地存储, 小程序向django请求接口
    前八后十六节奏
    [编织消息框架][JAVA核心技术]动态代理应用11-水平扩展实现
  • 原文地址:https://www.cnblogs.com/lhanghang/p/13574286.html
Copyright © 2011-2022 走看看