zoukankan      html  css  js  c++  java
  • 【Docker】常用命令

    博观而约取,厚积而薄发。

    1. 初始Docker

    Docker

    2. 镜像命令

    2.1 列出本地主机上的镜像信息

    $ docker images [options]
    
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    hello-world         latest              bf756fb1ae65        5 months ago        13.3kB
    
    • REPOSITORY:镜像的仓库源
    • TAG:镜像的版本标签
    • IMAGE ID:镜像ID
    • CREATED:镜像创建时间
    • SIZE:镜像大小

    可选参数(可以组合使用):

    • -a :列出本地所有的镜像(含中间映像层)
    • -q :只显示镜像ID
    • --digests : 显示镜像的摘要信息
    • --no-trunc:显示完整的镜像信息

    帮助命令:

    $ sudo docker images --help
    
    Usage:	docker images [OPTIONS] [REPOSITORY[:TAG]]
    
    List images
    
    Options:
      -a, --all             Show all images (default hides intermediate images)
          --digests         Show digests
      -f, --filter filter   Filter output based on conditions provided
          --format string   Pretty-print images using a Go template
          --no-trunc        Don't truncate output
      -q, --quiet           Only show numeric IDs
    

    2.2 查询镜像

    查询源来自 http://hub.docker.com

    $ sudo docker search mysql # 镜像名
    
    NAME              DESCRIPTION                  STARS      OFFICIAL    AUTOMATED
    mysql             MySQL is a widely used,....  9682         [OK]                
    mariadb           MariaDB is a community.....  3523         [OK]    
    ............
    

    更多搜索:

    • 搜索stars超过20的,通过列名过滤
    $ sudo docker search mysql --filter=stars=20
    
    • 最多搜索10条(默认25条)
    $ sudo docker search mysql --limit 10 
    

    2.3 下载镜像

    $ docker pull image[:TAG] # 默认:docker pull 镜像名:latest,版本可选
    
    • 例如:拉取mysql;
    $ sudo docker pull mysql
    Using default tag: latest
    latest: Pulling from library/mysql
    8559a31e96f4: Pull complete 
    d51ce1c2e575: Pull complete 
    c2344adc4858: Pull complete 
    fcf3ceff18fc: Pull complete 
    16da0c38dc5b: Pull complete 
    b905d1797e97: Pull complete 
    4b50d1c6b05c: Pull complete 
    c75914a65ca2: Pull complete 
    1ae8042bdd09: Pull complete 
    453ac13c00a3: Pull complete 
    9e680cd72f08: Pull complete 
    a6b5dc864b6c: Pull complete 
    Digest: sha256:8b7b328a7ff6de46ef96bcf83af048cb00a1c86282bfca0cb119c84568b4caf6
    Status: Downloaded newer image for mysql:latest
    docker.io/library/mysql:latest
    

    2.4 删除镜像

    $ docker rmi 镜像ID[:TAG]
    
    • 强制删除 -f
    $ sudo docker rmi -f bf756fb1ae65
    Untagged: hello-world:latest
    Untagged:helloworld@sha256:d58e752213a51785838f9eed2b7a498ffa1cb3aa7f946dda11af39286c3db9a9
    Deleted: sha256:bf756fb1ae65adf866bd8c456593cd24beb6a0a061dedf42b26a993176745f6b
    
    • 删除多个
    $ docker rmi -f 镜像名1 镜像名2
    
    • 删除全部
    $ docker rmi -f $(docker images -qa)
    

    3. 容器命令

    3.1 新建并启动容器

    • options:
      • --name="容器新名字": 为容器指定一个名称;
      • -d: 后台运行容器,并返回容器ID,也即启动守护式容器
      • -i以交互模式运行容器,通常与 -t 同时使用
      • -t为容器重新分配一个伪输入终端,通常与 -i 同时使用
      • -P: 随机端口映射;
      • -p: 指定端口映射,有以下四种格式
        • ip:hostPort:containerPort
        • ip::containerPort
        • hostPort:containerPort
        • containerPort
    $ socker run -it 镜像ID
    

    3.2 列出当前所有正在运行的容器

    • options:
      • -a :列出当前所有正在运行的容器+历史上运行过的
      • -l :显示最近创建的容器。
      • -n 10:显示最近创建的10个容器。
      • -q :静默模式,只显示容器编号。
      • --no-trunc:不截断输出。
    $ sudo docker ps
    CONTAINER ID    IMAGE     COMMAND      CREATED             STATUS         PORTS      NAMES
    1219aae1f4a8    ubuntu    "/bin/bash"  42 seconds ago     Up 38 seconds            cool_kilby 
    

    3.3 退出容器

    $ exit  :容器停止运行退出
    $ ctrl+P+Q :容器不停止退出
    

    3.4 重启容器

    $ docker restart 容器ID
    

    3.5 停止容器

    $ docker stop 容器ID
    

    3.6 强制停止

    $ docker kill 容器ID
    

    3.7 删除已停止的容器

    docker rm 容器ID
    docker rm $(docker ps -a -q)  #删除多个容器
    docker ps -a -q | xrags docker rm #删除多个容器
    

    4.重要容器命令

    4.1 启动守护式进程,通过ps查看不存在

    $ docker run -d 镜像ID
    
    # >>>>>>>>>>>>>>>>>>>>>>>>>>
    $ sudo docker run -d ubuntu
    12a960dcce1bf7af5f162faad7159ec094fc924db26149f86fd7ba0b528d3baf
    

    4.2 查看容器日志

    • options
      • -t :加入时间戳
      • -f: 跟随最新的日志打印
      • -tail 30:显示最后30条
    $ docker logs -f -t --tail 3 容器ID
    

    4.3 查看容器内运行的进程

    $ docker top 容器ID
    

    4.4 查看容器内部细节

    $ docker inspect 容器ID
    

    4.5 进入正在运行的容器并以命令行交互

    $ docker exec -it 容器ID bashShell
    $ docker attach 容器ID
    
    • attach:直接进入容器启动命令的终端,不会启动新的进程
    • exec:可以直接在宿主机执行容器类的程序,例如以下:在宿主机查看ubuntu容器根目录的文件
    $ sudo docker exec -t 71b ls -l /   
    total 48
    lrwxrwxrwx   1 root root    7 Jun  6 01:18 bin -> usr/bin
    drwxr-xr-x   2 root root 4096 Apr 15 11:09 boot
    drwxr-xr-x   5 root root  360 Jun 27 10:28 dev
    drwxr-xr-x   1 root root 4096 Jun 27 10:28 etc
    drwxr-xr-x   2 root root 4096 Apr 15 11:09 home
    ......
    

    4.6 从容器内拷贝文件到主机上

    $ docker cp 容器ID:容器内路径 目的主机路径
    

    5. 镜像Commit

    类似于git的commit,假如我们的某个镜像启动后,在产生的容器中进行了一些配置的修改,而我们想要保存本次配置过得容器就可以利用它为模板commit一个配置过后的镜像,以后启动当前镜像就已经是配置过后的容器

    $ docker commit -m="提交的描述信息" -a="作者" 容器ID 要创建的目标镜像名:[标签名] 
    
    eg:commit一个安装过vim的ubuntu镜像,名称为:atguigu/ubuntu,标签TAG为:1.2
    sudo docker commit -m="install vim" -a="ydongy" 52ca02c8b0c9 atguigu/ubuntu:1.2
    

    6. Docker容器卷

    容器的持久化,即使容器停止运行,宿主机修改的数据,在容器重新启动运行后仍然能够得到数据

    宿主机与容器之间数据共享

    6.1 数据卷

    • 命令添加
    $ docker run -it -v /宿主机绝对路经目录:/容器内目录 镜像名
    
    eg:宿主机的/data/docker-ubuntu目录与容器ubuntu的/MyData目录建立数据共享
    $ sudo docker run -it -v /data/docker-ubuntu:/MyData ubuntu
    
    eg:只读权限,只需要加一个ro,代表read-only
    $ sudo docker run -it -v /data/docker-ubuntu:/MyData:ro ubuntu
    
    # 如果存在写权限有问题,可加后缀:--privileged=true
    
    • DockerFile添加
    # volume test
    FROM ubuntu
    VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"] # 在容器中建立两个数据卷,宿主机可以查看内部细节
    CMD echo "finished,--------success1"
    CMD /bin/bash
    

    通过build构建一个新的镜像ydongy/ubuntu注意结尾的点

    $ sudo docker build -f /data/docker-ubuntu/Dockerfile -t ydongy/ubuntu .  
    Sending build context to Docker daemon  3.072kB
    Step 1/4 : FROM ubuntu
     ---> 74435f89ab78
    Step 2/4 : VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"]
     ---> Running in 2be2fbf7b5fd
    Removing intermediate container 2be2fbf7b5fd
     ---> a9434af08c1a
    Step 3/4 : CMD echo "finished,--------success1"
     ---> Running in 6ce8192d90f7
    Removing intermediate container 6ce8192d90f7
     ---> 6272fe09d969
    Step 4/4 : CMD /bin/bash
     ---> Running in 7b26a6661dce
    Removing intermediate container 7b26a6661dce
     ---> be0d288d5a6f
    Successfully built be0d288d5a6f
    Successfully tagged ydongy/ubuntu:latest
    

    6.2 数据卷容器

    命名的容器挂载数据卷,其它容器通过挂载这个(父容器)实现数据共享,挂载数据卷的容器,称之为数据卷容器

    一句话:继承关系,一个容器继承另一个容器,挂载数据卷可以实现共享

    • 启动一个容器
    $ docker run -it --name father ubuntu
    
    • 启动一个子容器
    $ docker run -it --name son --volumes-from father ubuntu
    

    两个容器对数据卷进行修改时,可以实现共享数据。如果存在多个子容器继承一个父容器,所以的容器都可以共享数据,哪怕把父容器给删除了,剩余的子容器之间仍然能够共享。

  • 相关阅读:
    Win7+Ubuntu11.10(EasyBCD硬盘安装)
    hdu 3661 Assignments
    hdu 1128 Self Numbers
    CF 152 B. Chilly Willy
    hdu 1754 I Hate It
    A survey of wireless network simulation and/or emulation software for use in higher education
    How to Fix Packet Loss: Causes, Simple Solutions & Top Tools
    getchar函数
    C++“左值”和“右值”
    stdio.h中的stdio
  • 原文地址:https://www.cnblogs.com/ydongy/p/13199339.html
Copyright © 2011-2022 走看看