Docker 命令

Posted by danner on September 2, 2017

<Docker 容器与容器云>

子命令分类 子命令
Docker 环境信息 info、version
容器生命周期管理 create、exec、kill、pause、restart、rm、run、start、stop、unpause
镜像仓库命令 login、logout、pull、push、search
镜像管理 build、images、import、load、rmi、save、tag、commit
容器运维管理 attach、export、inspect、port、ps、rename、stats、top、wait、cp、diff、update
容器资源管理 volume、network
系统日志信息 events、history、logs

命令结构图

容器生命周期管理

docker run

docker run --help
Usage:	docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
// 启动一个容器
Run a command in a new container

基于特定的镜像创建一个容器,并依据选项来控制该容器。

从 ubuntu 启动一个容器,并为它分配一个伪终端执行 /bin/bash 命令,用户可以在该伪终端与容器进行交互
sudo docker run -it – name mytest ubuntu:latest /bin/bash

  • -i 选项:表示交互模式,始终保持输入流开放
  • -t 选项:表示分配一个伪终端,一般两个参数结合时使用 -it,即可在容器中利用打开的伪终端进行交互操作
  • --name 选项:可以指定 docker run 命令启动的容器名字,若无此选项,Docker 将为容器随机分配一个名字

从 ubuntu 镜像上启动一个容器,并命名为 console,同时将新启动的 console容器连接到名为 redisName 的容器上
sudo docker run –link redisName:redis –name console ubuntu bash
主机的 ~/project/Django/app2 被挂载容器内的 /usr/src/app 目录
sudo docker run -it –name app2 –link redis-master:db -v ~/project/Django/app2:/usr/src/app django /bin/bash
将容器内的 6301 端口,绑定到主机的 6034 端口,这样外部主机可通过访问主机的 6034 端口来访问容器的 6031
sudo docker run -it –name HAProxy – app2:app2 -p 6401:6301 -v /home/danner/project/HAProxy/:/tmp haproxy /bin/bash

  • --link 选项:进行容器间安全的交互通信,可以避免容器的 IP 和端口暴露到外网所导致的安全问题,还可以放置容器在重启后 IP 地址变化导致的访问失效。它的原理类似 DNS 服务器的域名和地址映射。当容器的 IP 地址发生变化时,Docker自动维护映射关系中的 IP 地址。
  • -c 选项:用于给运行在容器中的所有进程分配 CPUshares 值,这是一个相对权重,实际的处理速度还与宿主机的 CPU 相关
  • -m 选项:用于限制为容器中所有进程分配的内存总量,以BKMG 为单位
  • -v 选项:用于挂载一个 volume,可以用多个 -v 参数同时挂载多个 volumevolume 的格式为 [host-dir]:[container-dir]:[rw|ro]
  • -p 选项:用于将容器的端口暴露给宿主机的端口,其常用格式为 hostPost:container-Port。通过端口的暴露,可以让外部主机通过宿主机暴露的端口来访问容器内的应用。

docker start/stop/restart

对于已存在的容器,可以通过 docker start/stop/restart 命令启动、停止和重启。容器创建时自动为每个新容器分配唯一的 ID 作为标识,docker start/stop/restart 命令一般利用容器 ID 标识确定具体容器;在一些情况下,也使用容器名来确定容器。

docker start 命令使用 -i 选项来开启交互模式,始终保持输入流开发。使用 -a 选项来附加标准输入、输出或者错误输出。此外,docker stopdocker restart 命令使用 -t 选项来设定容器停止前的等待时间

镜像仓库

Docker registry 是存储容器镜像的仓库,用户可以通过 Docker clientDocker registry 进行通信,以此来完成镜像的搜索下载上传等相关操作。Docker HubDocker 公司提供的共有镜像云服务。

docker pull

Docker registry 拉起 imagerepositorypull 命令还可以从私有服务器拉取镜像,只需在具体的镜像名称前添加用户名、特定库名或者服务器地址即可获取镜像。

// 从官方 Hub 拉取指明 ubuntu12.04 tag 的镜像
sudo docker pull ubuntu:ubuntu12/04
// 从 10.10.103.215 镜像库拉取 sshd
sduo docker pull 10.10.103.215:5000/sshd

docker push

docker push [OPTIONS] NAME[:TAG]
// ubuntu 镜像推送到 SEL
docker push SEL/ubuntu

将本地的 imagerepository 推送到服务器

镜像管理

管理本地保存镜像资源,imagesrmirm 子命令。

docker images

列出本地的镜像,默认只列出最顶层镜像,-a 显示所有镜像

[danner@localhost project]$ sudo docker images 
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker.io/haproxy   latest              a14eeb9c0f50        3 weeks ago         91.1 MB
docker.io/ubuntu    latest              a2a15febcdf3        3 weeks ago         64.2 MB
docker.io/redis     latest              f7302e4ab3a8        3 weeks ago         98.2 MB
docker.io/django    latest              eb40dcf64078        2 years ago         436 MB

docker rmi/rm

docker rmi 删除镜像,docker rm 删除容器;它们也可同时删除多个镜像或容器,也可按条件来删除。当使用 rmi 删除镜像时,若当前镜像有容器在运行,需先删除容器或使用 -f 强制删除镜像;rm 同理可用 -f 强制删除正在运行的容器。

容器运维操作

docker attach

docker attach 可以连接到正在运行的容器,观察该容器的运行情况或与容器进行交互

sudo docker attach bff010c2d6ad // container ID ;

docker inspect

查看容器和镜像的详细信息,默认列出全部信息,可以通过 --format 参数来指定输出的模板格式。

// 默认输出太长了,这里不列出
[danner@localhost project]$ sudo docker inspect --help

Usage:	docker inspect [OPTIONS] NAME|ID [NAME|ID...]

Return low-level information on Docker objects

Options:
  -f, --format string   Format the output using the given Go template
      --help            Print usage
  -s, --size            Display total file sizes if the type is container
      --type string     Return JSON for specified type

docker ps

显示正在运行的容器信息

[danner@localhost project]$ sudo docker ps 	//主要用来查看容器ID ^-^
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
626f9efb575b        django              "/bin/bash"              16 hours ago        Up 16 hours                                  app1
4164c692f262        haproxy             "/docker-entrypoin..."   16 hours ago        Up 16 hours         0.0.0.0:6401->6301/tcp   HAProxy
04db445bf95c        redis               "docker-entrypoint..."   16 hours ago        Up 16 hours         6379/tcp                 redis-slave2
a630ba2ca4f7        redis               "docker-entrypoint..."   16 hours ago        Up 16 hours         6379/tcp                 redis-slave1
94df1a760c30        redis               "docker-entrypoint..."   16 hours ago        Up 16 hours         6379/tcp                 redis-master
  • -a 选项:查看所有容器,包含已停止的容器
  • -l 选项:只查看最新创建的容器,包括不在运行中的容器

其他命令

docker commit

[danner@localhost project]$ sudo docker commit
"docker commit" requires at least 1 and at most 2 argument(s).
See 'docker commit --help'.

Usage:  docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

Create a new image from a container's changes

将一个正在运行的容器固化为一个新的镜像:当需要制作特定的镜像时,会进行修改容器的配置,可以通过 commit 命令将这些修改保存起来,使其不会因为容器的停止而丢失。官方不推荐使用此命令来制作镜像,建议通过 docker build 命令结合 Dockerfile 创建和管理镜像。

event history logs

这三个命令查看 Docker 的系统*日志信息:

  • events 命令打印出实时的系统事件
  • history 命令打印出指定镜像历史版本信息(构建该镜像的每一层镜像的命令记录);
  • logs 命令打印出容器中进程的运行日志

参考资料