【Docker】命令

快捷键:

CTRL+p+q:退出容器,并保持容器继续运行(或使用exit命令)
CTRL+d:退出容器,并终止容器运行

镜像命令

查看已下载的镜像

docker images
Options:

  • -a, --all 显示所有镜像
  • --digests 显示摘要(可以显示镜像大小等信息)同时不要截断输出(显示长IMAGE ID格式)
  • -f, --filter filter 根据提供的条件过滤输出
  • --format string 格式化输出
  • --no-trunc 不要截断输出(显示长IMAGE ID格式)
  • -q, --quiet 仅显示IMAGE ID

删除镜像:

删除镜像之前必须把当前镜像的容器删除
Usage: docker image rm [OPTIONS] IMAGE [IMAGE...]
别名:
docker rmi
OPTIONS:
-f --强制删除
案例:

docker image rm 镜像ID				-- 删除单个镜像
docker rmi ·docker images -q·		--删除全部镜像

查看镜像信息

docker inspect <镜像名/id>

查看镜像的构建过程:

docker history <镜像名/id>

搜索镜像:(从网络中查找)

docker search 镜像名

拉取镜像

命令格式:docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]
Docker Registry地址:地址的格式一般是 <域名/IP>[:端口号]。默认地址是 Docker Hub(docker.io)
仓库名:如之前所说,这里的仓库名是两段式名称,即 <用户名>/<软件名>。对于 Docker Hub,如果不给出用户名,则默认为 library,也就是官方镜像。
比如:

$ docker pull ubuntu:18.04
18.04: Pulling from library/ubuntu
92dc2a97ff99: Pull complete
be13a9d27eb8: Pull complete
c8299583700a: Pull complete
Digest: sha256:4bc3ae6596938cb0d9e5ac51a1152ec9dcac2a1c50829c74abd9c4361e321b26
Status: Downloaded newer image for ubuntu:18.04
docker.io/library/ubuntu:18.04

上面的命令中没有给出 Docker 镜像仓库地址,因此将会从 Docker Hub (docker.io)获取镜像。而镜像名称是 ubuntu:18.04,因此将会获取官方镜像 library/ubuntu 仓库中标签为 18.04 的镜像。docker pull 命令的输出结果最后一行给出了镜像的完整名称,即: docker.io/library/ubuntu:18.04

镜像备份

将镜像保存为tar文件,用于备份、传输
Usage: docker save [OPTIONS] TAR IMAGE[:TAG]
案例:

docker save -o mynginx.tar mynginx_i

载入镜像

将之前创建的压缩包载入

docker load -i mynginx.tar

容器命令

查看容器:

docker ps --查看运行中的容器
选项:
-a -- 查看所有容器(docker ps -a)
-l --查看最后一次运行的容器
-f --添加过滤条件(docker ps )
-f status=exited --查看停止的容器
-a -f =ancestor=busybox --只列出busybox这个镜像的容器
-q --只列出容器id
-s --显示容器大小

删除容器(docker rm)

案例:

docker rm -f <容器名/id>  # 强制删除正在运行的容器
docker rm $(docker ps -a -q) -- 删除所有容器
docker container prune  #删除所有处于终止状态的容器
docker rm $(docker ps -a -q -f =ancestor=busybox) --删除busybox镜像的所有容器

创建新容器

创建后容器的状态处于停止状态,可以使用docker start启动它
docker create -di hello-world

启动容器

docker start hello-world

停止容器

docker stop 容器ID

重启容器

docker restart 容器ID

容器重命名

docker rename 容器名 新容器名

进入容器的两种方式

1、docker exec -it 容器名(或者id) /bin/bash     2、docker attach 容器ID
区别:
docker exec进入容器后开启一个新的终端,常用
docker attach进入容器正在执行的终端,不启动新进程

容器、宿主机之间拷贝文件

# 拷贝文件到容器
docker cp 需要拷贝的文件或目录 容器名称:容器目录
# 拷贝容器文件到宿主机
docker cp 容器名称:容器目录 需要拷贝的文件或目录

查看容器详细信息

docker inspect 容器名

查看容器中的进程

docker top 容器名

查看容器端口映射

docker port mysql

查看数据卷

docker volume ls

容器自启动以来的变化

docker diff 容器名

动态容器的资源利用率(内存、cpu)

docker stats 容器名

查看容器中的输出日志

docker logs 容器名

更换容器名

docker rename 容器ID/容器名 新容器名

查看docker占用磁盘

docker system df

对容器硬件资源的限制做修改

docker update 容器名

查看容器事件

docker events 容器名

运行容器(docker run)

docker run等价于先执行docker create,再执行docker start
docker run的背后逻辑:检查本地有无此镜像,如果没有就先下载,启动容器,分配文件系统,从宿主机桥接一个虚拟接口到容器,从地址池配置一个ip给容器,执行用户指定的应用程序,执行完毕后容器终止。
选项:

  • -d,--detach 后台运行(如果后台启动后什么也不干,也不启动后台进程,这个后台容器就停止了)
    案例:-id 守护模式
  • -t 命令行模式,容器启动后进入命令行模式
    案例:-it 交互模式,进入命令行
  • -i 开启输入功能
  • --name 给容器起个名字
  • -p,--publish 端口映射,第一个宿主机端口,第二个是容器端口号。可以使用多个-p做多个端口映射
    支持的格式有 ip:hostPort:containerPort | ip::containerPort | hostPort:containerPort
    案例:-p 5000:50000
    案例:-p 5000:5000/udp --指定udp端口
  • -P 随机端口映射,Docker会随机映射一个49000-49900的端口到内部容器开放的网络端口
  • -v,--volume 数据卷,将宿主机的目录与容器内的目录进行映射,这样就可以通过修改宿主机的某个目录从而影响容器
    案例1:-v 主机路径:容器内路径
    案例2: -v 卷名称:容器内路径(具名挂载)
    案例3: -v 卷名称:容器内路径:ro(设置权限,ro:readonly、rw:readwrite)
    案例2中未指定主机挂载目录的情况下,都是挂载到/var/lib/docker/volumes/下
    推荐指定数据卷名称,可以方便查找
    docker volume ls --列出所有数据卷
    docker volume inspect 容器名 --查看容器详细信息
  • --volumes-from 给容器挂载其他容器上的存储卷,挂载到容器的某个目录
  • --link 添加链接到另一个容器,容器中/etc/host中会添加容器链接
    案例:--link redis1(添加到redis1容器的链接)
    案例:--link redis1:redis --redis是别名
  • --add-host 添加host,实际是给容器中/etc/hosts文件中添加映射
  • --rm 容器停止后自动删除(不支持以docker run -d启动的容器)
  • --expose 只是声明了容器应该打开的端口,而没有实际将它打开,也就是说如果你不用-p、-P中指定要映射的端口,你的容器不会映射端口出去。 expose还有一个作用,当我们声明了expose端口之后,我们使用-P进行随机映射的时候,是会对expose端口进行映射的。
  • -w,--workdir 指定容器的工作目录
    案例:-w /etc
  • -a,--attach 登录容器?
  • -c,--cpu-shares 设置容器cpu权重
  • --cpuset 设置容器可以使用哪些cpu
  • -m,--memory 指定容器内存上限
  • -e,--env 指定容器环境变量
  • --env-file 指定环境变量文件,格式是每行一个环境变量
  • -h 指定容器主机名
  • --restart 指定容器停止后的重启策略
    no(停止后不重启);
    on-failure(故障退出时重启);
    always(容器退出时总是重启)
  • --privileged 指定容器是否为特权容器,特权容器拥有所有权限
  • --net 容器网络设置
    bridge(容器使用docker deamon指定的网桥);
    host(容器使用主机的网络);
    container(使用其他容器的网络);
    none(容器使用自己的网络,类似--net bridge,但是不进行配置)
  • --dns 指定容器的dns服务器
  • --device
  • --lxc-conf 指定容器的配置文件
  • --ip 设置容器IP
  • --entrypoint 覆盖image的入口点?
  • -u ?

案例:

docker run -di --name=registry -p 5000:5000 registry			
docker run -it centos /bin/bash	--运行一个docker并进入容器命令行模式
docker run -it --rm 9b65eb17913a	--运行一个容器,并在容器退出的时候自动删除
docker run -di -v /usr/local/myhtml:/usr/local/myhtml --name=mycentos3 --privileged=true centos:7 		--数据卷(指定地址)
docker run -di -p 5556:5000 --name registry2 --link registry1:REG1 registry							--启动容器registry2,并建立到registry1的容器连接

进入容器

在使用 -d 参数时,容器启动后会进入后台。
某些时候需要进入容器进行操作,包括使用 docker attach 命令或 docker exec 命令,推荐大家使用 docker exec 命令,原因会在下面说明

  • attach 命令
$ docker attach 243c

如果从这个 stdin 中 exit,会导致容器的停止。

  • exec 命令
docker exec -it 69d1 bash

如果从这个 stdin 中 exit,不会导致容器的停止。这就是为什么推荐大家使用 docker exec 的原因。

容器迁移

非常规手段,一个运行了很长时间的Container,应该是可以 restart 、甚至 kill 后再重新 run 也不影响既有功能的。 任何有依赖的状态,都应该考虑持久化、网络化,而不能单纯地保存在本地文件系统中。
适用于已经上线,且状态复杂、重新启动不能正常工作的服务。容器迁移的包包含镜像
步骤:
1、导出容器到一个文件

docker export hello-world >hello-world.tar

2、导出的容器导入到镜像,import后得到的是一个镜像,相当于执行了commit操作

cat hello-world.tar|docker import - fan/hello-world:t1

3、启动容器

docker run fan/hello-world:t1
posted @ 2020-01-07 19:22  .Neterr  阅读(227)  评论(0编辑  收藏  举报