目录

Docker 安装

1)安装

CentOS 安装方法示例:

# 切换管理员权限
su root # 安装 Docker 依赖
yum install -y yum-utils device-mapper-persistent-data lvm2 # 配置依赖下载源
yum-config-manager --add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 安装 docker
yum makecache fast && yum -y install docker-ce

2)启动

Docker 引擎启停操作:

# 启动
systemctl start docker
# 重启
systemctl restart docker
# 开机自启动
systemctl enable docker
# 运行状态
systemctl status docker

3)镜像加速器

默认情况下从 docker hub 上下载 docker 镜像的速度太慢,因此一般都会配置镜像加速器:

# 添加 registry-mirrors
vim /etc/docker/daemon.json # 内容
{
"registry-mirrors": ["https://registry.docker-cn.com"]
} # 重载 docker 的配置文件
systemctl daemon-reload # 重启 Docker
systemctl restart docker # 查看配置
docker info

Docker 常用命令

1)Docker 进程相关命令

Docker 信息相关命令

# Docker 版本信息
docker version
# Docker 系统信息
docker info

Docker 启停相关命令

# 启动 Docker 服务
systemctl start docker # 停止 Docker 服务
systemctl stop docker # 重启 Docker 服务
systemctl restart docker # 查看 Docker 服务状态
systemctl status docker # 设置开机启动 Docker 服务
systemctl enable docker

2)Docker 镜像相关命令

docker search:查找镜像仓库中的镜像

# 比如想要搜索具有 nginx 功能的容器
docker search nginx

  1. 第一列镜像名称,如果没有路径符号”/”,说明在默认路径中,如果有路径,说明在子仓库中。
  2. 第二列描述,简要说明该镜像的用途和特点。如果想要完整显示说明,可以增加参数 --no-trunc。
  3. 第三列是点赞数,类似于 git 上的点赞。
  4. 第四列标明是否为官方发布。
  5. 第五列是自动构建,是用 webhook 探测源码的变化,一旦有变化就自动生成新的版本镜像。

docker pull:下载镜像

从 Docker 仓库下载镜像到本地,镜像名称格式为名称:版本号,如果版本号不指定则是最新的版本。

docker pull nginx

如下图所示,将会下载该镜像。注意看该镜像会有多个分层,之后再下载其它镜像的时候,有可能部分层级可以复用,不需要全部下载。

另外注意箭头指的位置,由于 docker pull nginx 没有指定 tag(版本),会使用默认的版本下载。

再尝试下载 alpine 环境,alpine 是一款轻量级操作系统,只有 5M 左右。很多镜像制作都会选择 alpine 作为基础镜像。这里仅下载一个纯净的 alpine,作为后续演示使用。

docker pull alpine

注意查看下图中,docker pull 命令后面的 nginx 跟了 tag,可以看出,tag 不仅仅包含了版本号,还包含了主要的特性。

另外看箭头所指,之前下载过 alpine 的基本镜像,所以基于 alpine 的 nginx 会省略下载 alpine,复用之前下载的已存在分层。

docker inspect:查看镜像/容器的详细信息

docker inspect 镜像/容器名称

Docker Inspect 语法参考

在 hub.docker.com 上查找镜像

也可以在 hub.docker.com 网站上查找镜像,同时还可以看到该镜像的 tag 信息,选择合适的 tag 下载。

如上述步骤,找到其它版本的 tag,可以点击这个复制按钮,直接将命令复制出来。

docker images:查看本地镜像

docker images  # 查看本地所有的镜像
docker images –q # 仅显示镜像id,常用于批量删除镜像

docker rmi:删除本地镜像

docker rmi 镜像id或镜像名称的前缀即可  # 删除指定的本地镜像
docker rmi `docker images -q` # 删除所有本地镜像

本地镜像或者远程镜像仓库中的垃圾镜像越来越多时,需要进行清理删除。

图中存在没有 repository 和 tag 的镜像的原因是:使用相同的镜像名称构建新镜像时,由于 dockerfile 中的基础镜像或者 RUN 后面的命令有变化,就会导致旧的重名镜像变成没有 repository 和 tag 的情况。

docker history:查看镜像构建历史

docker history [options] IMAGE

通常只用一个参数 --no-trunc:不截断输出。

docker history 命令在查看自己构建的镜像时会相对容易和方便一些。官方镜像总要考虑大部分的需求,所以相对比较繁琐。

docker save:导出镜像

docker save 镜像名称 > 镜像名称.tar

docker load:导入镜像

docker load < 镜像名称.tar

镜像重命名

docker tag 镜像原来名称 镜像新名称

3)Docker 容器相关命令

  • 容器的本质是管理进程。启动容器必定会伴随容器内一个或者多个用户进程的启动,如果容器内的用户进程在启动后执行完毕或者崩溃,那么该容器就会退出。与虚拟机不同,虚拟机启动的是操作系统,如果没有用户进程,则会等待用户的登录和操作。

  • 最好是一个容器只执行一个进程,完成单一任务。

  • 虽然容器可以被登录,但最好不要登录进去操作,除非是为了修改镜像。

docker run:启动容器

docker run 参数
# -it 创建的容器一般称为交互式容器
# -id 创建的容器一般称为守护式容器

参数说明

  • -i:保持容器运行

    • 通常与 -t 同时使用。加入 it 这两个参数后,容器创建后会自动进入容器中。
    • 退出容器后,容器自动关闭。
  • -t:为容器重新分配一个伪输入终端
    • 通常与 -i 同时使用。
  • -d:以守护(后台)模式运行容器
    • 创建一个容器并在后台运行,需要使用 docker exec 进入容器。
    • 退出容器后,容器不会关闭。
  • --name:为创建的容器命名。

示例:docker run -it alpine

如图所示已经进入了容器的 shell,可以操作查看这个 shell:

  • uname -a 查到系统内核和宿主机的一致,说明容器使用底层宿主机的内核。
  • pwd 和 ls 可以看到此时 shell 的目录结构和宿主机不一致。

容器是用来管理进程的,在虚拟机的宿主机中,执行 ps 是看不到虚拟机内部的进程的。但是容器不一样,在容器的宿主机中执行 ps,是可以看到容器执行的进程的。从本质上看,容器仅仅是在宿主机中把进程启动起来,并且进行资源隔离。

容器退出

  • 使用 ctrl+dexit 命令,容器都会退出。ctrl+d 或者 exit 相当于结束当前 shell,在未指定命令情况下启动容器时,相当于仅启动了 /bin/bash,退出后结束 bash,容器退出。

  • 使用 ctrl+q+p 退出,会保持该容器在后台运行,容器不会结束。

docker ps:查看当前容器状态

docker ps  # 查看正在运行的容器
docker ps –a # 查看所有容器
docker ps –qa # 仅显示 id 号,常用于批量删除容器

如上图所示,不加任何参数,查看正在运行的容器:目前没有正在运行的容器。

  • CONTAINER ID:容器的 ID。
  • IMAGE:启动使用的镜像。
  • COMMAND:启动容器时传入的命令。
  • CREATED:创建时间。
  • STATUS:容器状态。
  • PORTS:端口映射情况。
  • NAMES:容器的名称,如果没有指定,会随机分配。

-a 参数可以查看所有状态的容器,包括停止、退出等状态的容器。

如上图所示目前有一个容器,但状态是已经退出。

docker pause:暂停容器

docker pause CONTAINER [CONTAINER]   # 暂停
docker unpause CONTAINER [CONTAINER] # 恢复

如图所示,docker pause 时用的容器 mynginx 进入了暂停状态。恢复的时候用的容器 id,容器恢复正常状态。注意恢复后的状态开启时间并没有重新计时,而是继续计时,暂停时间也会算进开机时间。

如果使用容器 id 则只要用 id 的前若干位即可,只要前几位没有冲突,通常使用三位。这个规则适用于整个 docker 的场景。

Paused 状态意味着暂停、挂起,但是容器管理的进程并没有停止。整体上更像是虚拟机的快照暂停方式,把当前容器做个快照放在磁盘中,然后释放该容器的资源。等需要恢复的时候,把容器的内容从磁盘中读出来重新进入内存。底层使用的是 cgroup 的 freezer 能力。

docker stop:停止容器

docker stop CONTAINER [CONTAINER]  # 停止
docker start CONTAINER [CONTAINER] # 启动
docker restart CONTAINER [CONTAINER] # 重启

这三个状态类比虚拟机,就是关机、启动和重启。stop 后容器管理的进程会彻底停止、清理内存;start 启动容器时会沿用容器 run 或者 create 时候的参数。

这和虚拟机类似的操作过程相同,磁盘中的内容会被保存,但是内存中的内容会被清理掉。

docker exec:进入容器

对于后台执行的容器或者容器的输出日志,我们都有查看的需求。

方式一:docker attach(不推荐使用)

该命令使用不当的话,会导致容器中的进程结束运行,进而容器退出。使用的时候一定加上 --sig-proxy=false 参数。

方式二:docker exec(推荐使用)

docker exec [options] CONTAINER CMD

该命令用途是在运行中的容器里执行命令,当然也可以在运行的容器中执行 /bin/bash。

注意 exec 不默认传参数,必须跟参数:

上图中,首先在后台启动一个交互式 alpine 容器,并查看这个容器状态,确认运行中。后续操作需要用到容器名称,所以重命名一下。接着让这个容器执行一下 echo 命令。可以看到执行后容器输出 hello,并且不会退出,仍然在运行状态中。

执行 /bin/bash,就可以进到容器中进行操作,注意 /bin/bash 需要交互和打开标准输入:

如上图中的报错,最初执行 docker exec -it myalpine /bin/bash,由于 alpine 中没有 bash 这个命令,所以报错。

使用 /bin/sh 后就可以进入容器执行命令了,退出后不影响原容器运行。

注意很多镜像里面并不带 kill 命令,但是如果带 kill 命令并且在 exec 中执行 kill 主进程操作,或者执行了主进程的停止操作,会导致容器直接退出。

docker create:创建容器

docker create [option] IMAGE [CMD]

docker run 命令相当于执行了 create 和 start 两个命令。

docker rename:容器重命名

docker rename 容器原来名称 容器新名称

docker log:查看容器日志

docker logs [options] CONTAINER

docker rm:删除容器

如果容器是运行状态则删除失败,需要停止容器才能删除。

docker rm [OPTIONS] 容器名称/id [CONTAINER...]

OPTIONS 说明:

  • 不加参数情况下,可以删除已经停止的容器。
  • -f:通过 SIGKILL 信号删除一个正在运行的容器。
  • -l:移除容器间的网络,而非容器本身。
  • -v:删除与容器映射的目录。

宿主机运行一段时间后,会有大量已经停止的容器,如果需要批量删除,可以使用以下命令:

docker rm $(docker ps -qa)

最终只剩下运行中的容器。当然也可以使用 -f 参数删除所有容器,慎重使用。

docker commit:生成镜像

若以交互模式修改了容器内容,需要 commit 成新的镜像。

1)修改容器内容:

[root@MiWiFi-R3P-srv tmp]# docker  run -it centos
[root@e59e110aaf47 /]# yum install -y nginx
[root@e59e110aaf47 /]# vi /etc/nginx/nginx.conf # 在全局配置中加入"daemon off;"

2)退出容器:

3)执行 commit 命令:

4)运行中的容器也可以 commit,并且容器层的数据也会保留:

  1. 注意上图中,启动 nginx:v7commit 需要以 nginx 的启动命令,否则容器会退出;
  2. 使用 docker exec 进入容器,并编辑内容;
  3. 本次 commit 使用和之前完全一样的镜像名称和 tag,所以在名称前加一个 test 目录;
  4. 接下来启动这个镜像,看 echo 修改的内容和文件会不会存在:

docker cp:拷贝宿主机/容器中的文件

该命令和存储无关,但是可以把容器内的文件拷贝出来,或者把宿主机文件拷贝进容器。

docker cp CONTAINER:dir host_dir
docker cp host_dir CONTAIN:dir

整体写法和 cp 一样,只是要加上容器的 id 号或者名字。

如下示例,将容器中整个目录拷贝出来,注意不需要加 -r 参数:

docker top:查看容器中运⾏的进程

docker top 容器名称

docker stats:查看资源占⽤

docker stats 容器名称

Docker 安装与常用命令的更多相关文章

  1. docker 安装与常用命令与常用容器(containers)环境

    注意区别 container 与 image 的关系,container 的建立需要 image 的承载,也即 container 依赖 image,停止并删除了 container 并不会删除 im ...

  2. Docker安装和常用命令

    Docker安装 Docker的安装可以参考 https://docs.docker.com/ 下面的 Get Docker / Docker CE / Linux, 需要关注的主要是CentOS和U ...

  3. Docker 安装与常用命令介绍

    docker的镜像文件作用就是:提供container运行的文件系统层级关系(基于AUFS实现),所依赖的库文件.已经配置文件等等. 安装docker yum install -y docker 启动 ...

  4. Docker安装及常用命令

    修改机器名: [root@docker /]# hostnamectl set-hostname Docker 安装EPEL源: [root@docker /]# yum -y install epe ...

  5. docker安装以及常用命令

    yum-config-manager 对/etc/yum.repos.d/下的.repo文件进行增删改查 yum install -y yum-utils 添加docker源,由于yum源的docke ...

  6. Docker 入门指南——常用命令

    前面已经介绍了 Docker 的安装方式,本文总结一下使用 Docker 的基本概念和常用命令. 基本概念 镜像 Image 镜像是一些打包好的已有的环境,可以被用来启动和创建容器 容器 Contai ...

  7. Docker系列之常用命令操作手册

    目录 1.安装虚拟机 2.安装Docker 3.Docker镜像操作 4.Docker容器操作 Docker系列之常用命令操作手册 继上一篇博客Docker系列之原理简单介绍之后,本博客对常用的Doc ...

  8. Docker基础和常用命令

    Docker基础和常用命令 一,Docker 简介 1.1,什么是 Docker Docker 使用 Google 公司推出的 Go 语言 进行开发实现,基于 Linux 内核的 cgroup,nam ...

  9. ios开发环境配置及cordova安装与常用命令

    一.ios开发环境配置 1.首先要有台Mac Book,如果有Mac Book,跳过步骤2.3.4,如果没有,执行步骤2.3.4: 2.下载并安装VMware Workstation,最好是下最新版本 ...

随机推荐

  1. JS判断是否是苹果系统(ios)和安卓系统(Android)客户端

    通过判断浏览器的userAgent,用正则来判断是否是ios和Android客户端.代码如下: <script type="text/javascript"> var ...

  2. win10使用照片查看器查看图片

    1.关于 演示环境: win10 1909 2.习惯win7的照片查看器 如果你习惯使用win7的照片查看器在win10查看照片,可以通过下面的注册表代码实现.方法:1.创建 后缀名为 .reg的文件 ...

  3. 【LeetCode】141. Linked List Cycle 解题报告(Java & Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 双指针 保存已经走过的路径 日期 [LeetCode ...

  4. 【剑指Offer】构建乘积数组 解题报告(Python)

    [剑指Offer]构建乘积数组 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interviews 题目 ...

  5. Another kind of Fibonacci(hdu3306)

    Another kind of Fibonacci Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  6. 1145 - Dice (I)

    1145 - Dice (I)   PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 32 MB You hav ...

  7. .Net下你不得不看的分表分库解决方案-多字段分片

    .Net下你不得不看的分表分库解决方案-多字段分片 介绍 本期主角:ShardingCore 一款ef-core下高性能.轻量级针对分表分库读写分离的解决方案,具有零依赖.零学习成本.零业务代码入侵 ...

  8. Improving Adversarial Robustness via Channel-Wise Activation Suppressing

    目录 概 主要内容 代码 Bai Y., Zeng Y., Jiang Y., Xia S., Ma X., Wang Y. Improving adversarial robustness via ...

  9. CS5218|DP转HDMI4K30HZ方案|CS5218应用方案

    Capstone CS5218是一款单端口HDMI/DVI电平移位器/中继器,具有重新定时功能.它支持交流和直流耦合信号高达3.0-Gbps的操作与可编程均衡和抖动清洗.它包括2路双模DP电缆适配器寄 ...

  10. Java基础周测一、二(50题)

    一.单选题 (共50题,250分) 1.下列选项不可作为Java语言变量名的是(    ). A. a1 B. $1 C. _1 D. 21 正确答案: D 2.有一段Java应用程序,它的类名是a1 ...