Docker命令

Docker

Note: 在ubuntu下,所有的命令前面要加sudo,以管理员身份运行。


获取镜像: docker pull [OPTIONS] NAME[:TAG|@DIGEST]

如: docker pull ubuntu
或: docker pull ubuntu 14.04
参数说明
-a, –all-tages下载仓库的中该镜像的所有标签

查看镜像信息: docker images [OPTIONS] [REPOSTORY[:TAG]]

参数说明
-a, –all显示所有镜像
–digests显示摘要
-q, –quiet只显示镜像的ID

为本地镜像添加标签:docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]

如:

docker tag dl.dockerpool.com:5000/ubuntu:lastest newubuntu

获取镜像的详细信息: docker inspect [OPTIONS] NAME|ID [NAME|ID]
如: docker inspect 5506de2b43b

搜寻镜像: docker search [OPTIONS] TERM

参数说明
–limit int搜索的结果数(默认25)

删除:

  • 删除容器: docker rm [OPTIONS] CONTAINER [CONTAINER...]
参数说明
-f, –force强行删除该容器,即使它还在运行(使用SIGKILL命令)
-l, –link删除容器的网络连接
-v, –volumes删除容器挂载的数据卷
  • 删除镜像: docker rmi [OPTIONS] IMAGE [IMAGE...] (Image可以是tag或者image id)
参数说明
-f, –force强行删除该镜像

注意:应先删除容器,再删除镜像。


查看容器: docker ps [OPTIONS]

参数说明
-a, –all查看所有容器,不加该参数默认只显示正在运行的容器
-n, –last int只显示最近n个容器(包括所有状态的容器),不加该参数默认为-1
-l, –lastest只显示最近创建的1个容器(包括所有状态的容器)
-q, –quiet只显示容器的ID
-s, –size显示容器占用空间大小

1. 查看本机存在的所有容器: docker ps -a
2. 查看本机处于终止状态的容器: docker ps -a -qdocker ps -aq


创建镜像

  • 基于已有镜像的容器创建镜像:docker commit [OPTIONS] CONTAINER [REPOSTORY[:TAG]]
参数说明
-a, –author string作者信息
-m, –message string提交信息
-p, –pause提交时暂停容器运行(默认带有此参数)

如:

Setp 1 - 运行一个镜像: docker run -ti ubuntu:14.04 /bin/bash
Setp 2 - 进行一些修改: touch test (可以看到容器ID, 假设为a925cb40b3f0)
Setp 3 - 提交新镜像:docker commit -m 'Add a new file' -a "Docker Newbee" a925cb40b3f0 test
  • 基于本地模板导入: cat ubuntu-14.06-x86_64-minimal.tar.gz |docker import - ubuntu 14.04

载入导出镜像
  • 导出镜像: docker save [OPTIONS] IMAGE [IMAGE...]
参数说明
-o, –output string将镜像导出到本地文件

如: docker save -o ubuntu_14.04.tar ubuntu 14.04
* 载入镜像: docker load [OPTIONS]

参数说明
-i, –input string从本地文件导入到本地镜像库
如 docker load -i ubuntu14.04.tar
或:docker load < ubuntu14.06.tar 

上传镜像: docker push [OPTIONS] NAME[:TAG]

参数说明
–disable-content-trust跳过镜像校验(默认带有该参数)

创建容器: docker create [OPTIONS] IMAGE [COMMAND] [ARG...]

如: docker create -ti ubuntu/lastest

参数列表请使用docker create --help查看


启动容器:

  • 方式一: docker start [OPTIONS] CONTAINER [CONTAINER...] (容器创建之后使用)
参数说明
-a, –attach启动之后以attach方式得到容器的标准输出流
-i, –interactive启动之后以attach方式获得容器的标准输入流
  • 方式二: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
    docker run = docker create + docker start
参数说明
-a, –attach list指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项
-d, –detach后台运行容器(守护态运行),并返回容器ID
-i, –interactive以交互模式运行容器,通常与 -t 同时使用
-t, –tty为容器重新分配一个伪输入终端,通常与 -i 同时使用
-v, –volume list在容器内创建一个数据卷
-volumes-from list挂载一个数据卷容器到该容器中
–name string为容器指定一个名称
–dns list指定容器使用的DNS服务器,默认和宿主一致
–dns-search example.com指定容器DNS搜索域名(默认为空,与宿主机一致)
-h, –hostname string指定容器的hostname
-e –env list设置环境变量(默认为空)
–env-file list从指定文件读入环境变量(默认为空)
-m, –memory string设置容器使用内存最大值
–network string指定容器的网络连接类型,支持 bridge/host/none/Container 四种类型(默认为default)
–link list添加链接到另一个容器
-P, –publish-all随机映射一个端口至容器内部开放的网络端口

所有参数列表请使用docker create --help查看


获得容器输出信息: docker logs [OPTIONS] CONTAINER

参数说明
-f, –follow查看实时日志
-t, –timestamps显示日志产生的时间
-tail string查看从尾部看的n条日志

终止容器:

  • 方式一:docker stop [OPTIONS] CONTAINER [CONTAINER...]
参数说明
-t, –time int在停止(stop)指定时间(秒为单位)后杀掉(kill)容器进程(默认为10秒)

这种方式会首先向容器发送SIGTERM信号,等一段时间后(默认为10秒),再发送SIGKILL信号终止终端。

  • 方式二:docker kill [OPTIONS] CONTAINER [CONTAINER...]
参数说明
-s, –signal string向容器发送信号(默认为KILL)

这种方式会直接发送SIGKILL信号来强行终止容器,不会给容器和应用程序等待的时间。


重启容器: docker restart [OPTIONS] CONTAINER [CONTAINER...]

  • 此操作可以将一个正在运行的容器重新启动,或将一个已终止的容器启动。
参数说明
-t, –time int对于一个正在运行的容器,Stop指定秒数之后kill该容器(默认为10秒)

进入容器

  • 方式一:docker attach
    如:docker run -tid ubuntu (假设返回的容器ID为243c32535da7)
    docker attach 243c32535da7

注意:
1. 当多个窗口同时attach到同一个容器时,所有窗口会同步显示,当某个容器因命令阻塞时,其它容器也无法执行操作;
2. 当使用attach命令进入到一个容器之后,使用[CTRL+D]退出容器会使该容器终止;
3. 如果该容器没有运行,那么先start。

  • 方式二:docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
参数说明
-d, –detach守护模式:在后台运行命令
-e, –env list设置环境变量(默认为空)
-i, –interactive以交互模式运行容器,通常与 -t 同时使用
-t, –tty为容器重新分配一个伪输入终端,通常与 -i 同时使用

如: 假设现有一个ubuntu容器ID为9afa2802e68b:
docker exec -ti 9afa2802e68b /bin/bash

  • 方式三:使用外部工具nsenter
step1 - 安装nsenter
cd /tmp;
curl https://www.kernel.org/pub/linux/utils/util-linux/v2.24/util-linux-2.24.tar.gz | tar -zxf-; cd util-linux-2.24;(如果没有安装curl则应先安装curl)
./configure --without-ncurses
make nsenter
cp nsenter /usr/local/bin

step2 - 使用nsenter: `nsenter [OPTIONS] <program> [args...] ` 
docker inspect -f {{.State.Pid}} CONTAINER
nsenter -t CONTAINER_PID -m -u -i -n -p
参数说明
-t, –target pid进入指定的pid进程中
-m, –mount进入到mount namespace中
-u, –uts进入到uts namespace中
–i, –ipc进入到System V IPC namaspace中
–n, –net进入到network namespace中
–p, –pid进入到pid namespace中
-U, –uer进入到user namespace中

导入导出容器

  • 导出容器 docker export [OPTIONS] CONTAINER
参数说明
-o, –output string写入到文件中
如: docker export -o mydocker.tar 2842afd00ee9
或: docker export 2842afd00ee9 > mydocker.tar

无论容器是否正在运行,都将这个容器导出

  • 导入容器:docker import [OPTIONS] file|URL|- [REPOSTORY[:TAG]]
参数说明
-c, –change list应用docker指令创建镜像
-m, –message string提交时的文字说明

import导入后成为镜像

export和save,import和load的区别

export是保存一个容器当时的快照,会丢失所有的历史记录和元数据信息,体积较小; save是保存一个镜像,包括完整的记录,体积较大;


挂载数据卷

  • 挂载目录
    在运行的时候使用 -v source_directory:target_dirctory
    如:docker run -ti -v /src/webapp:/src/webapp ubuntu:14.04 /bin/bash

  • 挂载文件
    在运行的时候使用 -v source_file:target_file
    如: docker run -ti -v /myfile.txt:/target/myfile.txt ubuntu:14.04 /bin/bash

注意:
1. 挂载目录后,宿主机对目录内的文件进行修改,容器内相应的文件也会被修改,反之亦然
2. 挂载文件后,宿主机或容器对文件进行修改,就改变了文件的inode,则宿主机和容器的这个文件就不再是同一个文件了,文件内容不再同步
3. 由于以上原因,推荐使用目录挂载


数据卷容器

数据卷容器用于在容器间共享数据。使用--volumes-from CONTAINER
如:

step 1: 使用ubuntu镜像启动一个名为data_container的容器并挂载一个dbdata目录
            docker run -ti -v /dbdata --name data_container ubuntu 
step 2: 将data_container容器
            docker run -ti --volume-from data_container ubuntu

在任意一个容器中在这个共享的目录下进行操作。其它容器都可以看到。
注意:
1. 使用--volume-from参数挂载数据卷的容器自身并不需要保持运行状态
2. 删除了挂载的容器,数据卷并不会被删除,需要在删除最后一个还挂载它的容器时显式使用docker rm -v来指定同时删除关联的容器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值