不冲突的情况下, Docker 可以使用 ID 的前面几个字符进行快速操作,例如:
命令 # docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 920c0f3c240a 89dc7e6d0ac1:latest "ls /etc/" 15 minutes ago Exited (0) 15 minutes ago ecstatic_perlman 3f2a0b440abc 89dc7e6d0ac1:latest "ls /etc/fstab" 15 minutes ago Exited (0) 15 minutes ago tender_curie 64c55acd970e 89dc7e6d0ac1:latest "ls -l" 15 minutes ago Exited (0) 15 minutes ago sharp_lumiere c34716ad8f72 busybox:latest "/bin/sh -c 'while t 19 hours ago Exited (0) 12 hours ago trusting_kowalevski 977be396faf6 busybox:latest "/bin/sh -c 'while t 19 hours ago Exited (137) 19 hours ago ecstatic_lovelace 9e553497cbed busybox:latest "/bin/sh -c 'while t 19 hours ago Exited (137) 19 hours ago lonely_fermi c9093d4c7637 busybox:latest "/bin/sh -c 'while t 19 hours ago Exited (137) 19 hours ago gloomy_pike 3f81114c48c2 busybox:latest "/bin/echo Hello Doc 19 hours ago Exited (0) 19 hours ago determined_swartz 26c98d7a589d hello-world:latest "/hello" 20 hours ago Exited (0) 20 hours ago distracted_babbage 36c0b05dc414 hello-world:latest "/hello" 20 hours ago Exited (0) 20 hours ago admiring_carson可以使用 docker rm 92 命令快速删除容器 920c0f3c240a,但是无法使用 docker rm 3f 命令进行快速删除某个容器,因为有两个以 3f 开头的容器,你必须用 docker rm 3f2 或者 docker rm 3f8 指定删除其中一个。
下载镜像名称其实由三部分组成:其中其中daocloud.io是注册服务器地址,默认是 registry.hub.docker.com;library 是用户名,默认就是libraray, ubuntu是仓库名,16.04是标签名,默认是latest,第一个busybox 全名该是 registry.hub.docker.com/library/busybox:latest
选项:
-f, --force 强制删除镜像
--no-prune 不删除untagged parents
选项:
-o, --output 写入到文件
选项:
-i, --input 从压缩包载入镜像
7上传镜像 docker push [OPTIONS] NAME[:TAG|@DIGEST]选项:
--disable-content-trust=true 跳过镜像签名
sudo docker push 192.168.0.100:5000/ubuntu # 推送镜像库到私有源[可注册 docker 官方账户,推送到官方自有账户] sudo docker push 192.168.0.100:5000/ubuntu:14.04 # 推送指定镜像到私有源8获取 Docker 镜像的更改历史:
docker history <image-name>9创建镜像 :build
在前面我们讲过 Dockerfile,不过一直没有告诉大家怎么用自己的 Dockerfile 生成镜像文件。 那么现在也不算晚:使用 build 命令生成 image。
docker build [OPTIONS] PATH | URL | -PATH / URL / - 这三个是必选选项,三选一。
OPTION 可以使用 docker build --help 进行查看,主要包括构建过程中的内存限制、CPU 限制、以及其他。有两个必须需要了解的 OPTION 选项:
-f: 和make一样,如果PATH内找不到Dockerfile,则docker build必须要 -f 参数指定Dockerfile。-t: 指定生成的镜像标签。例如: docker build -f Dockerfile -t tag .,使用 Dockerfile.bak 生成一个标签叫 tag的镜像文件。另外,- 选项非常有意思:docker build -,然后可以交互式地输入 Dockerfile,输入完毕后按 Ctrl+D 结束输入即可。
OPTION 一定要放在 PATH / URL / - 前面。
10 load & save : 使用 load 从 stdin 导入一个 tar 格式的镜像或者仓库,用 save 将 tar 镜像输出到 stdout。 docker save -o <output file> <image>或者docker save <image> > <output file> docker load -i <file name>或者docker load < <file name> 这两个命令常用于多节点部署。 例如: 命令 # docker save -o a.tar suse 命令 # docker load -i a.tar
load import pull 的区别 ?save export push 的区别? 1 save 和export是 生成镜像的方式: load 和save 操作的是镜像 ,import 和 export 操作的是容器,结果是 export 出的镜像文件 比 save 的文件 要少一些镜像层。commit 是生成镜像的命令可以指定用以上哪种方式生成。 2 pull push 是传输镜像的方式, 操作的也是镜像,做的只是上传下载。
stop 和 kill 的区别? docker stop,支持“优雅退出”。先发送SIGTERM信号,在一段时间之后(10s)再发送SIGKILL信号。Docker内部的应用程序可以接收SIGTERM信号,然后做一些“退出前工作”,比如保存状态、处理当前请求等。 docker kill,发送SIGKILL信号,应用程序直接退出
3容器操作:
docker create 容器名或者容器ID 创建容器 docker start [-i] 容器名 启动容器 docker run 容器名或者容器ID 运行容器,相当于docker create + docker start docker attach 容器名或者容器ID 进入容器的命令行 docker restart 容器名或者容器ID 重启容器 docker rm 容器名 删除容器 ----- Docker 的文件是放在 /var/lib/docker/containers/ 中的 docker pause 容器名 暂停容器
docker unpause 容器名 取消暂停容器 docker kill 容器名docker top 容器名 docker stop 容器名 停止容器 docker stop,支持“优雅退出”。先发送SIGTERM信号,在一段时间之后(10s)再发送SIGKILL信号。Docker内部的应用程序可以接收SIGTERM信号,然后做一些“退出前工作”,比如保存状态、处理当前请求等。 docker kill,发送SIGKILL信号,应用程序直接退出。 docker inspect 容器名 查看Docker的底层信 docker logs 容器名 docker diff 容器名 docker commit 容器名 镜像名 : 保存容器为镜像
docker top <CONTAINER_ID>:查看容器中运行的进程
docker port 容器名 # 查看映射端口对应的容器内部源端口
这条命令是运行 busybox 镜像中的 /bin/echo 命令,参数是 Hello Docker:
结果:Hello Docker一些常用的选项:
-i 交互式界面,默认是false
-t 伪终端,默认false
--name 容器别名,默认随机命名
exit 退出交互式界面,容器停止运行。Crtl+P 或者 Crtl+Q 退出交互式界面,容器在后台运行。(注意是大写P和Q)
1.1容器运行之后我们可以查看容器: docker ps 查看正在运行的容器 docker ps -a 查看所有容器 docker ps -l 查看最近一次运行的容器删除容器时,容器必须是停止状态,否则会报错误。
-f --follow=true|false,默认false,一直跟随log变化
-t --timestamps=true|false,默认false,加上时间戳
--tail="all",返回最新多少条日志
例子 :docker logs -f -t --tail 2 b89b9ce64d34
在运行的容器中启动新的进程:
docker exec [-d] [-i] [-t] 容器名 [COMMOND] [ARG...]Docker 允许 attach 进入容器并与运行中的容器进行交互,同时允许查看容器内守护进程态下的程序的输出,使用以下两种方式退出容器:
Ctrl+C 直接退出Ctrl+\ 退出并显示堆栈信息。语法:docekr attach <Container>
那么还是刚刚那个容器:
命令 # docker run -d ubuntu /usr/bin/top -b b33059d6c7427e377a1239eca59605e18bb6d145c4f12df6021db4896b6fcfa3 命令 # docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b33059d6c742 ubuntu:latest "/usr/bin/top -b" 2 seconds ago Up 2 seconds backstabbing_jang 命令 # docker attach backstabbing_jang #此处也可以用docker attach b330
top - 05:30:49 up 16:04, 0 users, load average: 0.01, 0.19, 0.39 Tasks: 1 total, 1 running, 0 sleeping, 0 stopped, 0 zombie %Cpu(s): 1.7 us, 2.0 sy, 0.0 ni, 96.0 id, 0.0 wa, 0.3 hi, 0.0 si, 0.0 st KiB Mem: 1003080 total, 596484 used, 406596 free, 42524 buffers KiB Swap: 1046524 total, 0 used, 1046524 free. 330716 cached Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1 root 20 0 19744 1280 1008 R 0.0 0.1 0:00.08 top top - 05:30:52 up 16:05, 0 users, load average: 0.01, 0.19, 0.39 Tasks: 1 total, 1 running, 0 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.0 us, 1.0 sy, 0.0 ni, 94.3 id, 4.3 wa, 0.3 hi, 0.0 si, 0.0 st KiB Mem: 1003080 total, 596484 used, 406596 free, 42528 buffers KiB Swap: 1046524 total, 0 used, 1046524 free. 330712 cached Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1 root 20 0 19744 1280 1008 R 0.0 0.1 0:00.08 top
4diff docker diff <contianer> 用于显示容器的文件改动,包括 A(add),C(change),D(delete)。这些信息可以用于 debug,也可以用于快速信息共享。 示例: 命令 # docker run -t -i ubuntu /bin/bash 命令(容器内) root@cc9befbe64a1:/# nano a bash: nano: command not found 命令(容器内)root@cc9befbe64a1:/# apt-get install nano Reading package lists... Done Building dependency tree Reading state information... Done Suggested packages: spell The following NEW packages will be installed: nano 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. Need to get 194 kB of archives. After this operation, 614 kB of additional disk space will be used. Get:1 http://archive.ubuntu.com/ubuntu/ trusty/main nano amd64 2.2.6-1ubuntu1 [194 kB] Fetched 194 kB in 3s (54.3 kB/s) Selecting previously unselected package nano. (Reading database ... 11527 files and directories currently installed.) Preparing to unpack .../nano_2.2.6-1ubuntu1_amd64.deb ... Unpacking nano (2.2.6-1ubuntu1) ... Setting up nano (2.2.6-1ubuntu1) ... update-alternatives: using /bin/nano to provide /usr/bin/editor (editor) in auto mode update-alternatives: using /bin/nano to provide /usr/bin/pico (pico) in auto mode 命令(容器内) root@cc9befbe64a1:/# 这个容器ID是cc9befbe64a1,于是可以新开一个终端: 命令 # docker diff cc9 A /.wh..wh.plnk/119.673746 A /.wh..wh.plnk/335.673670 C /bin A /bin/nano A /bin/rnano C /etc C /etc/alternatives D /etc/alternatives/editor.fr.1.gz 省略部分输出
5inspect 用法:docker inspect <container>/<image>,用于收集容器的底层信息,包括如下内容: 实例的IP地址。 端口绑定 搜索特定的端口映射 搜集配置信息。 例如 命令 # docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES cf57741249fb dockerui/dockerui:latest "/dockerui" 2 minutes ago Up 2 minutes 0.0.0.0:9000->9000/tcp trusting_hawking 命令 # docker inspect --format='{{.NetworkSettings.IPAddress}}' cf5 172.17.0.17 6 :import 用于导入 URL / 文件,从本地导入需要 - 参数。docker import [OPTIONS] URL|- [REPOSITORY[:TAG]]、URL/-二选一。 和pull不同的时候,pull 是从docker 仓库里下载,而import 是从任意url 上下载,甚至是从本地文件系统, 最后都是添加到本地镜像 images列表中。 例如,我们导入 openvz 的 suse minimal 镜像: 命令# docker import http://mirrors.ustc.edu.cn/openvz/template/precreated/suse-13.1-x86-minimal.tar.gz suse:minimal #这里使用的是ustc镜像源。 Downloading from http://mirrors.ustc.edu.cn/openvz/template/precreated/suse-13.1-x86-minimal.tar.gz 127a9e7b9f87e4fc280c96bee9fad0a19057de38d307fe7fc1f6d35c86f1aff657.89 MB/57.89 MB 命令# docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE suse minimal 127a9e7b9f87 2 minutes ago 149.1 MB 导入本地镜像: cat suse-13.1-x86-minimal.tar.gz |docker import - suse:minmal 导入 Gentoo 的 stage3: docker import http://mirrors.ustc.edu.cn/gentoo/releases/amd64/autobuilds/current-stage3-amd64/stage3-amd64-20150423.tar.bz2 gentoo:stage3
7 export 和 import 相反,export 将容器导出成 tar 压缩包。 例如 命令 # docker run -i -t -d suse:minimal /bin/bash 060f6e6c877af01313363b6506107438b9eb5ba87a7ef0625577e348a554ecca 命令 # docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 060f6e6c877a suse:minimal "/bin/bash" 2 seconds ago Up 2 seconds fervent_ritchie 命令 # docker export -o a.tar 060f 命令 # docker export 060f > a.tar #也可以这样。 4其他命令
1 cp
从容器内复制出文件到宿主机器:格式 docker cp container:path hostpat
命令 # docker cp 060:/etc/zypp/zypp.conf /tmp/ #060是容器ID的简写 命令 # cat /tmp/zypp.conf ## Configuration file for software management ## /etc/zypp/zypp.conf ## ## Boolean values are 0 1 yes no on off true false 省略。。
2 login 登录到 docker 仓库: 命令 # docker login Username (qiuker521): qiuker521 WARNING: login credentials saved in /root/.dockercfg. Login Succeeded 当然也可以登录到自己的私有服务器:docker login localhost:8080
logout # 从当前 Docker registry 退出
3 wait 用来获取容器的退出信号值。已退出的容器直接返回 exit 值,未退出的容器等待容器退出,然后返回 exit 值 4 events 获取 Docker 服务端的实时事件,例如 docker events 的同时运行 docker run ubuntu。 zypp/zypp.conf /tmp/ #060是容器ID的简写 命令 # cat /tmp/zypp.conf ## Configuration file for software management ## /etc/zypp/zypp.conf ## ## Boolean values are 0 1 yes no on off true false 省略。。
