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 "[email protected]"
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的功能。

你可能感兴趣的:(Docker系列2.容器基础)