zoukankan      html  css  js  c++  java
  • Docker入门学习2 ——容器基本操作

    摘要:介绍Docker容器相关的操作命令。

    知识点:
    run ps start attach exec top stop kill
    inspect rm logs images rmi pull push
    commit build

    注:可以使用docker COMMAND --help来查看COMMAND的详细用法,本文只介绍常用的子集。

    一.启动容器

    启动之前未启动过的容器:

    docker run [-d] [-i] [-t] IMAGE [Command] [Arguments]
    · -d:daemon,启动守护式容器
    · -i:interactive,启动交互式容器
    · -t:tty,允许标准输入输出

    还有一些其他的选项
    · --name=NAME:给容器指定一个别名。否则寻找容器要用ID或系统自带名字,很不友好。

    启动执行一次命令的容器

    docker run ubuntu echo "hello world"

    这样的容器执行一次命令就停止了。

    启动交互式容器

    docker run -i -t ubuntu /bin/bash

    接下来就进入了容器的bash中,可以执行各种命令,好像虚拟机一样。
    此时想要退出容器,可以使用exit退出并停止容器,或【Ctrl+P】+【Ctrl+Q】的escape组合,退出而不停止容器。

    启动守护式容器

    这样的容器能够长期运行,没有会话,适合运行各种服务。下面是启动守护式容器的几种方法:

    1. 在交互式容器中使用【Ctrl+P】+【Ctrl+Q】的命令返回,容器因为没有停止,变为守护式容器。
      如果使用ps命令来查看,会发现这个容器直接被列出。
      此时若想返回这个容器,要使用docker attach 容器名命令,附加到运行的容器中。
    2. 使用run命令来建立:
      docker run -d 镜像名 [command] [args]
      -d的意思是,使用后台的方式启动守护式的容器,执行命令。但是命令运行结束后,容器依然会停止。
      举例:docker run --name=test -d ubuntu "while true ;do echo hello world; sleep 1; done"
      如果想要了解守护式容器中的运行情况,需要使用log命令,后文介绍。

    重新启动已经停止的容器:

    docker start [-i] 容器名
    · -i:以交互的方式重新启动。
    docker start -i NAME

    二.操作容器

    列出容器

    docker ps [-a] [-l]
    · -a:列出所有的容器(包括停止的)
    · -l:列出新创建的容器
    · 默认:只列出未停止的容器

    执行此命令后,docker将列出容器列表的信息。其中那一串很长的无规律串就是容器的ID,而name一列就是你指定或系统指定的容器别名。

    查看某个容器的配置docker inspect ID或者别名

    执行此命令后,docker以json格式列出指定容器很多信息。包括操作系统版本,名称,命令,网络配置等。

    删除容器docker rm 容器名

    只能删除已经停止的容器,不能删除运行中的容器。
    删除后,ps命令会找不到那个容器。

    查看容器的运行情况

    docker logs [-f] [-t] [--tail]

    • -f:--follows=true|false,告诉日志,一直跟踪容器的变化。
    • -t:--timestamps=true|false,为返回的结果时间戳。
    • --tail:选择返回结尾处多少数量的日志。不指定的话,返回所有日志。

    举例:docker logs --tail=5 -tf test查看test容器最后五条命令,带时间戳并且随时更新。

    查看容器中的进程情况

    docker top 容器名

    在运行的程序中启动新的进程

    docker exec [-d] [-i] [-t] 容器名 [command] [args]
    举例:docker exec -i -t test /bin/bash启动一个新的bash进程

    停止容器

    • stop命令:给容器发送一个信号,等待容器的停止。
      docker stop 容器名
    • kill命令:直接停止一个容器
      docker kill 容器名

    三.操作镜像

    镜像存放在仓库(repository)中,而这个仓库存放在仓库(registory)中。
    镜像由Repository和Tag唯一指定,比如ubuntu:14.04,ubuntu:latest,这里14.04和latest就是Tag,ubuntu就是Repository。如果没有指定Tag,则会使用默认的latest。

    查看本地镜像列表

    docker images [-a] [-f] [-q] [--no-trunc]

    • -a:--all,列出所有
    • -f:--filter,指定过滤器
    • -q:--quiet,只列出ID
    • --no-trunc:不截断ID
    • 可以使用Repository的名字作为参数,它会返回对应名字的所有镜像。

    查看特定镜像信息

    docker inspect 镜像仓库名+Tag名,或者镜像ID

    删除镜像

    docker rmi [-f] [--no-prune=false] 镜像仓库名+Tag名,或者镜像ID

    • -f:--force,强制删除。如果有容器在镜像基础上生成,必须用这个选项。
    • --no-prune:不要删除未打标签的父镜像。

    如果一个镜像ID对应了多个镜像标签,那么使用Image ID才可以删除镜像,如果使用仓库名+标签,只能删除对应的标签。
    如果想要删除镜像仓库下的多个镜像,可以用如下语法:
    docker rmi $(docker images -q ubuntu)

    在远程镜像仓库搜索镜像

    docker search [options] 镜像仓库名

    • --automated=false:只显示自动构建的镜像
    • -s:--stars X:只显示不小于X星级的镜像

    注意:search命令最多只能显示25个结果。搜索结果后,将返回镜像的信息(星级,是否官方,ID,标签...)

    把镜像下载到本地

    docker pull [options] NAME [:TAG]

    • -a:--all-tags=false|true,把所有打了标签的镜像都下载到本地。

    把镜像推送到远程

    docker push NAME
    需要提供用户名,密码和邮箱。
    Docker不会上传整个镜像,而只会上传修改的部分。
    镜像默认是公共的,可以在Docker Hub转为私有。

    构建镜像

    镜像的构建非常重要。我们可以自定义一个容器,安装好自己需要的一些文件,然后构建成镜像以方便复用。

    1.通过容器构建

    docker commit [options] 容器名 [Repository[:TAG]]

    • -a:指定镜像的作者,一般是作者名和联系方式
    • -m:记录镜像构建的信息
    • -p:正常在构建镜像时会使容器暂停,使用-p告诉容器不要暂停

    2.通过dockerfile文件来构建

    首先要创建dockerfile文件,它是一种包含一系列命令的文本文件。
    举例:

    #First Dockerfile
    FROM ubuntu:14.04
    MAINTAINER RaidriarB "raidriarb@foxmail.com"
    RUN apt-get update
    RUN apt-get install nginx
    EXPOSE 80
    

    然后执行build的命令来构建镜像。
    docker build [options] path|url

    • -t:指定镜像的标签
    • 还有一些选项:--force-rm --no-cache --pull --quiet --rm
    • path要指定dockerfile的文件目录。

    docker会在build的过程中,每一步都生成一个ID,这就是构建时的中间层镜像。如果使用ps命令查看,会发现他们的标签和仓库名都是none。如果想要取消构建中间层镜像,只需要使用--quiet或者-q选项。
    dockerfile类似批处理文件,是一种非常强大的构建镜像方式。后面会详细介绍dockerfile的功能。

  • 相关阅读:
    POJ 3710 Christmas Game#经典图SG博弈
    POJ 2599 A funny game#树形SG(DFS实现)
    POJ 2425 A Chess Game#树形SG
    LeetCode Array Easy 122. Best Time to Buy and Sell Stock II
    LeetCode Array Easy121. Best Time to Buy and Sell Stock
    LeetCode Array Easy 119. Pascal's Triangle II
    LeetCode Array Easy 118. Pascal's Triangle
    LeetCode Array Easy 88. Merge Sorted Array
    ASP.NET MVC 学习笔记之 MVC + EF中的EO DTO ViewModel
    ASP.NET MVC 学习笔记之面向切面编程与过滤器
  • 原文地址:https://www.cnblogs.com/RaidriarB/p/11616907.html
Copyright © 2011-2022 走看看