Docker 安装与常用命令
Docker 安装
Docker 可以运行在 MAC、Windows、CentOS、UBUNTU 等操作系统上。
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 镜像的速度太慢,因此一般都会配置镜像加速器:
- USTC:中科大镜像加速器(https://docker.mirrors.ustc.edu.cn)
- 阿里云
- 网易云
- 腾讯云
# 添加 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
- 第一列镜像名称,如果没有路径符号”/”,说明在默认路径中,如果有路径,说明在子仓库中。
- 第二列描述,简要说明该镜像的用途和特点。如果想要完整显示说明,可以增加参数 --no-trunc。
- 第三列是点赞数,类似于 git 上的点赞。
- 第四列标明是否为官方发布。
- 第五列是自动构建,是用 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 镜像/容器名称
在 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+d 或 exit 命令,容器都会退出。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,并且容器层的数据也会保留:
- 注意上图中,启动 nginx:v7commit 需要以 nginx 的启动命令,否则容器会退出;
- 使用 docker exec 进入容器,并编辑内容;
- 本次 commit 使用和之前完全一样的镜像名称和 tag,所以在名称前加一个 test 目录;
- 接下来启动这个镜像,看 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 安装与常用命令的更多相关文章
- docker 安装与常用命令与常用容器(containers)环境
注意区别 container 与 image 的关系,container 的建立需要 image 的承载,也即 container 依赖 image,停止并删除了 container 并不会删除 im ...
- Docker安装和常用命令
Docker安装 Docker的安装可以参考 https://docs.docker.com/ 下面的 Get Docker / Docker CE / Linux, 需要关注的主要是CentOS和U ...
- Docker 安装与常用命令介绍
docker的镜像文件作用就是:提供container运行的文件系统层级关系(基于AUFS实现),所依赖的库文件.已经配置文件等等. 安装docker yum install -y docker 启动 ...
- Docker安装及常用命令
修改机器名: [root@docker /]# hostnamectl set-hostname Docker 安装EPEL源: [root@docker /]# yum -y install epe ...
- docker安装以及常用命令
yum-config-manager 对/etc/yum.repos.d/下的.repo文件进行增删改查 yum install -y yum-utils 添加docker源,由于yum源的docke ...
- Docker 入门指南——常用命令
前面已经介绍了 Docker 的安装方式,本文总结一下使用 Docker 的基本概念和常用命令. 基本概念 镜像 Image 镜像是一些打包好的已有的环境,可以被用来启动和创建容器 容器 Contai ...
- Docker系列之常用命令操作手册
目录 1.安装虚拟机 2.安装Docker 3.Docker镜像操作 4.Docker容器操作 Docker系列之常用命令操作手册 继上一篇博客Docker系列之原理简单介绍之后,本博客对常用的Doc ...
- Docker基础和常用命令
Docker基础和常用命令 一,Docker 简介 1.1,什么是 Docker Docker 使用 Google 公司推出的 Go 语言 进行开发实现,基于 Linux 内核的 cgroup,nam ...
- ios开发环境配置及cordova安装与常用命令
一.ios开发环境配置 1.首先要有台Mac Book,如果有Mac Book,跳过步骤2.3.4,如果没有,执行步骤2.3.4: 2.下载并安装VMware Workstation,最好是下最新版本 ...
随机推荐
- JS判断是否是苹果系统(ios)和安卓系统(Android)客户端
通过判断浏览器的userAgent,用正则来判断是否是ios和Android客户端.代码如下: <script type="text/javascript"> var ...
- win10使用照片查看器查看图片
1.关于 演示环境: win10 1909 2.习惯win7的照片查看器 如果你习惯使用win7的照片查看器在win10查看照片,可以通过下面的注册表代码实现.方法:1.创建 后缀名为 .reg的文件 ...
- 【LeetCode】141. Linked List Cycle 解题报告(Java & Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 双指针 保存已经走过的路径 日期 [LeetCode ...
- 【剑指Offer】构建乘积数组 解题报告(Python)
[剑指Offer]构建乘积数组 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interviews 题目 ...
- Another kind of Fibonacci(hdu3306)
Another kind of Fibonacci Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Jav ...
- 1145 - Dice (I)
1145 - Dice (I) PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 32 MB You hav ...
- .Net下你不得不看的分表分库解决方案-多字段分片
.Net下你不得不看的分表分库解决方案-多字段分片 介绍 本期主角:ShardingCore 一款ef-core下高性能.轻量级针对分表分库读写分离的解决方案,具有零依赖.零学习成本.零业务代码入侵 ...
- Improving Adversarial Robustness via Channel-Wise Activation Suppressing
目录 概 主要内容 代码 Bai Y., Zeng Y., Jiang Y., Xia S., Ma X., Wang Y. Improving adversarial robustness via ...
- CS5218|DP转HDMI4K30HZ方案|CS5218应用方案
Capstone CS5218是一款单端口HDMI/DVI电平移位器/中继器,具有重新定时功能.它支持交流和直流耦合信号高达3.0-Gbps的操作与可编程均衡和抖动清洗.它包括2路双模DP电缆适配器寄 ...
- Java基础周测一、二(50题)
一.单选题 (共50题,250分) 1.下列选项不可作为Java语言变量名的是( ). A. a1 B. $1 C. _1 D. 21 正确答案: D 2.有一段Java应用程序,它的类名是a1 ...