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 -q
或 docker 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
来指定同时删除关联的容器