Docker基本命令
- docker ps
docker ps命令会列出所有运行中的容器。这隐藏了非运行态容器的存在,如果想要找出这些容器,我们需要使用下面这个命令。
docker ps -a
- docker images
docker images命令会列出了所有顶层top-level镜像。实际上,在这里我们没有办法区分一个镜像和一个只读层,所以我们提出了top-level镜像。只有创建容器时使用的镜像或者是直接pull下来的镜像能被称为顶层top-level镜像,并且每一个顶层镜像下面都隐藏了多个镜像层
docker images -a
该命令列出了所有的镜像,也可以说是列出了所有的可读层。如果你想要查看某一个image-id下的所有层,可以使用docker history来查看。
- docker stop <container-id>
docker stop命令会向运行中的容器发送一个SIGTERM的信号,然后停止所有的进程。
- docker kill <container-id>
docker kill 命令向所有运行在容器中的进程发送了一个不友好的SIGKILL信号。
- docker pause <container-id>
docker stop和docker kill命令会发送UNIX的信号给运行中的进程,docker pause命令则不一样,它利用了cgroups的特性将运行中的进程空间暂停。
- docker rm <container-id>
该命令会移除构成容器的可读写层。注意,这个命令只能对非运行状态容器执行。
- doccker rmi <image-id>
docker rmi命令会移除构成镜像的一个只读层。你只能够使用docker rmi来移除最顶层top level layer(也可以说是镜像),你也可以使用-f参数来强制删除中间的只读层。
- docker commit <container-id>
该命令将容器的可读性转换为了一个只读层,这样就把一个容器转换成了不可变的镜像。
- docker build
构建
- docker exec <running-container-id>
该命令会在运行中的容器执行一个新的进程
- docker inspect <container-id> or <image-id>
docker inspect命令会提取出容器或者镜像最顶层的元数据。
- docker save <image-id>
该命令会创建一个镜像的压缩文件,这个文件能够在;另外一个主机的docker上使用。和export命令不同,这个命令为每一个层都保存了他们的元数据。这个命令只能对镜像生效。
- docker export <container-id>
该命令会创建一个tar文件,并且移除了元数据和不必要的层,将多个层整合成了一个层,只保存了当前统一视角看到的内容
- docker history <image-id>
这个命令递归的输出指定镜像的历史镜像。
- 删除所有终止的容器
docker rm $(docker ps -a -q)
docker基本命令
-
- 查看docker信息
# 查看版本
docker version
#显示docker系统信息
docker info
- 2.对image的操作
# 检索image
docker search image_name
# 下载image
docker pull image_name
# 列出镜像列表
# -a 展示所有image; -q 仅展示id,
docker images
# 删除一个或多个镜像
# -f 强制,
docker rmi image_nmae
# 显示一个镜像的历史
docker history image_nmae
启动容器
OPTIONS说明:
-a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
-d: 后台运行容器,并返回容器ID;
-i: 以交互模式运行容器,通常与 -t 同时使用;
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
--name="nginx-lb": 为容器指定一个名称;
--dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
--dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;
-h "mars": 指定容器的hostname;
-e username="ritchie": 设置环境变量;
--env-file=[]: 从指定文件读入环境变量;
--cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定CPU运行;
-m :设置容器使用内存最大值;
--net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;
--link=[]: 添加链接到另一个容器;
--expose=[]: 开放一个端口或一组端口;
# 在容器中运行echo命令,输出hello word
docker run image_name echo "hello word"
# 交互式进入容器中
docker run -i -t image_name /bin/bash
# 在容器中安装新的程序
docker run image_name yum install -y app_name
Note: 在执行apt-get 命令的时候,要带上-y参数。如果不指定-y参数的话,apt-get命令会进入交互模式,需要用户输入命令来进行确认,但在docker环境中是无法响应这种交互的。apt-get 命令执行完毕之后,容器就会停止,但对容器的改动不会丢失。
查看容器
1. 最常见的用法
$ docker ps
显示当前正在运行的容器。
在 PORTS 一列,如果暴露的端口是连续的,还会被合并在一起,例如一个容器暴露了3个 TCP 端口:100,101,102,则会显示为 100-102/tcp。
2. 显示所有状态的容器
$ docker ps -a
容器的状态共有 7 种:created|restarting|running|removing|paused|exited|dead。
3. 显示最后被创建的 n 个容器
$ docker ps -n 3
注意,这里不限状态。
4. 显示最后被创建的容器
$ docker ps -l
相当于 docker ps -n 1。
5. 显示完整输出
$ docker ps --no-trunc
即不会截断输出。该选项有点长,其中 trunc 算是 truncate 的缩写。
6. 只显示容器 ID
$ docker ps -q
清理容器时非常好用,filter 过滤显示一节有具体实例。
7. 显示容器文件大小
$ docker ps -s
该命令很实用,可以获得 2 个数值:一个是容器真实增加的大小,一个是整个容器的虚拟大小。
8 -f
1. 选项后跟的都是键值对 key=value (可不带引号),如果有多个过滤条件,就多次使用 filter 选项。例如:
docker ps --filter id=a1b2c3 --filter name=bingohuang
2. 相同条件之间的关系是或,不同条件之间的关系是与。例如:
docker ps --filter name=bingo --filter name=huang --filter status=running
以上过滤条件会找出 name 包含 bingo 或 huang 并且 status 为 running 的容器。
3. id 和 name,支持正则表达式,使用起来非常灵活。例如:
docker ps --filter name=^/bingohuang$
精确匹配 name 为 bingohuang 的容器。注意,容器实际名称,开头是有一个正斜线 / ,可用 docker inspect 一看便知。
docker ps --filter name=.*bingohuang.*
匹配 name 包含 bingohuang 的容器,和 --filter name=bingohuang 一个效果。
最后, 举一个复杂点的例子,用于清理名称包含 bingohuang,且状态为 exited 或 dead 的容器:
docker rm $(docker ps -q --filter name=.*bingohuang.* --filter status=exited --filter status=dead2>/dev/null)
Format 格式化显示
如果想自定义显示容器字段,可以用格式化选项 --format 。
1. 当使用了 --format 选项,那么 ps 命令只会输出 template 中指定的内容:
$ docker ps --format "{{.ID}}: {{.Command}}"
a87ecb4f327c: /bin/sh -c #(nop) MA
01946d9d34d8: /bin/sh -c #(nop) MA
c1d3b0166030: /bin/sh -c yum -y up
41d50ecd2f57:/bin/sh -c #(nop) MA
2. 如果想带上表格列头,需要再 template 中加上 table 指令:
保存对容器的修改
- 当你对某一个容器做了修改之后(通过在容器中运行某一个命令),可以把对容器的修改保存下来,这样下次可以从保存后的最新状态运行该容器。
# -a 作者信息, -m 提交的信息
docker commit ID new_image_name
Note:image相当于类,container相当于实例,不过可以动态给实例安装新软件,然后把这个container用commit命令固化成一个image。
对容器的操作(注意是容器,不是镜像)
# 删除所有容器
docker rm `docker ps -a -q`
# 删除镜像,注意,需要先删除容器,并且删除前需要保证容器时停止的,然后才能删除镜像.
docker rmi image_id
#删除单个容器;- f 强制;-l, 删除指定的链接,而不是底层容器;-v 删除与容器关联的卷
docker rm Name/ID
# 停止、启动、杀死一个容器
docker stop Name/ID
docker start Name/ID
docker kill Name/ID
# 从一个容器中获取日志
# -f ,-t 展示时间戳
# 列出一个容器里面被改变的文件或者目录,list列表会显示出三种事件,A 增加的, D 删除的 ,C 被改变的
docker diff Name/ID
# 显示一个运行的容器里面的进程信息
docker top Name/ID
# 从容器里面拷贝文件、目录到本地一个路径
docker restart Name/ID
# 附加到一个运行的容器上面
#--detach-keys string 覆盖用于分离容器的键序列
#--no-stdin 没有附加STDIN
#--sig-proxy 代理所有接收到的信号到进程(默认为true)
保存和加载镜像
- 当需要把一台机器上的镜像迁移到另一台机器的时候,需要保存镜像与加载镜像。
# 保存镜像到一个tar包;-o filename 写入到这个文件。
docker save image_name -o file_path
# 加载一个tar包格式的镜像; -i --input="" read from a tar archive file
docker load -i file_path
# 机器a
docker save image_name > /home/save.tar
# 使用scp将save.tar拷到机器b上
docker load < /home/save.tar
8.登录registry server
# 登陆registry server; -e, --email="" Email; -p, --password="" Password; -u, --username="" Username
$docker login
登录成功后会在用户目录下的.docker目录中有一个config.json文件,里面保存了用户的信息.
9. 发布image
docker push new_image_name
10. 根据Dockerfile构建出一个容器
--add-host list 添加自定义主机到ip映射(主机:ip)
--build-arg list 设置构建时变量
--cache-from strings 将图像视为缓存源
--cgroup-parent string 可选的容器父cgroup
--compress 使用gzip压缩构建上下文
--cpu-period int 限制CPU CFS(完全公平调度程序)的周期
--cpu-quota int 限制CPU CFS(完全公平调度程序)配额
-c, --cpu-shares int CPU份额(相对权重)
--cpuset-cpus string 允许执行的cpu (0- 3,0,1)
--cpuset-mems string 允许执行的MEMs (0- 3,0,1)
--disable-content-trust 跳过图像验证(默认为true)
-f, --file string Dockerfile的名称(默认为‘PATH/Dockerfile’)
--force-rm 总是移除中间容器
--iidfile string 将图像ID写入文件
--isolation string 容器隔离技术
--label list 为图像设置元数据
-m, --memory bytes 内存限制
--memory-swap bytes 交换限制等于内存加上交换:'-1'以启用无限交换
--network string 在构建期间为运行指令设置网络模式(默认“默认”)
--no-cache 在构建映像时不使用缓存
--pull 总是尝试拉出图像的新版本
-q, --quiet 成功时禁止生成输出和打印图像ID
--rm 成功构建后删除中间容器(默认为true)
--security-opt strings 安全选项
--shm-size bytes /dev/shm大小
-t, --tag list 名称和可选的“Name:tag”格式的标记
--target string 设置要构建的目标构建阶段。
--ulimit ulimit Ulimit选项(默认[])
docker build -t image_name Dockerfile_path
为镜像打印标记
dcoker tag server:latest myname/server:lastest
or
docker tag d583c3ac45fd myname/server:latest
# https://blog.youkuaiyun.com/yangshangwei/article/details/52799675
最后欢迎大家批评指正,您的建议就是我前进的动力。