前言
在写这篇文章的之前,我老早老早就想搞一下Docker了,但是以前看了一下Docker的教程觉得自己弄不来,可能那时候学东西还没到一个境界不好理解吧,总之现在慢慢开始懂很多计算机的内容了,Docker也学起来了,自然而然也就懂了。其实也不难吧,写这个文章之前已经成功在本地服务器用Docker挂了个Node[noʊd]了,效果还不错。这篇文章主要想记录一下Docker的使用,以后不需要找十几个网站查命令使用啥的。
使用记录
镜像使用
镜像是什么?
这里做一个不专业的解释,玩计算机的应该都知道winpe吧,winpe通常是一个iso文件,而这个iso文件就是一种镜像文件,而这个镜像文件里面包含了一个winpe系统,winpe系统里面又有各式各样的功能,我们需要某一个功能就要先挂载镜像文件,进入镜像里面才能使用到这个功能。Docker镜像也是如此,一个Docker镜像里面包含了一个极其简单的Linux,它包含许多必要的Liunx的功能,但是这个Linux和winpe不一样的是,winpe是一个独立的个体,而这个Docker镜像中内置的Linux,因为Docker追求简便,轻量的原因它没有内核,内核是由宿主机提供。
然后一些软件,比如node,mysql这类软件,就会包含在这个镜像里面,使用者通过挂载镜像,去获得软件的使用,当然挂载镜像就要使用容器,这里下面容器会解释。
镜像常用命令
拉取镜像:
docker image pull 镜像名称默认情况下,它自动拉取的是docker hub仓库里面的最新版本:latest,例如你要拉取一个node,命令就是:docker image pull node,但它实际执行的命令是:docker image pull node:latest。
如果想拉取其中一个版本的话,只要把镜像名称:后面改一下就可以。
例如,我想拉取node的lts-alpine3.9版本,只要把命令写成:
docker image pull node:lts-alpine3.9相关软件版本可以到https://hub.docker.com中搜索该软件的镜像,选择tag就能找到了
查看镜像
docker image ls //-a表示列出所有,可以替换成:镜像仓库名:tag
docker images //-a表示列出所有,可以替换成:镜像仓库名:tag
--digests 显示镜像的摘要信息;
-f 显示满足条件的镜像
--format 指定返回值的模板文件
--no-trunc 显示完整的镜像信息
-q 只显示镜像ID此命令用于查看本地已经拉取的所有镜像,可以查到所有镜像的仓库名称、Tag、镜像ID、创建时间和大小
删除镜像
docker image rm 镜像id
docker rmi 镜像id //-f :强制删除需要先通过查看镜像命令找到要删除的镜像,获取其ID才能用这个命令进行删除,删除前需要先把相关容器也删除掉
删除未使用的镜像
docker image prune //-a 列出所有内容 -f 强制删除这个命令有点特殊,因为有时候我们会下载了一堆镜像,但是发现排不上用场,后期又没有使用过,但是忘记了哪些没用,这时候可以通过这条命令,删除所有没有用过的镜像
显示镜像历史记录
docker image history 镜像仓库名:tag
docker history 镜像ID主要显示镜像的历史记录,这里不多解释
镜像详细信息
docker image inspect 镜像ID
docker inspect 镜像仓库名:tag此命令主要展示了镜像的细节,包括镜像层数据和元数据
查找可用镜像
docker search 镜像仓库名这个就不多解释了,就是想下什么可以用这个命令找找。
镜像其他操作
1.标记本地镜像,将其归入某一仓库
docker tag 镜像仓库名:tag 名称:tag例如:将镜像ubuntu:xx.xx标记为 xxxxxx/ubuntu:v1 镜像。
docker tag ubuntu:xx.xx xxxxxx/ubuntu:v1
2.本地的镜像上传到镜像仓库
docker push name:tag
//--disable-content-trust 忽略镜像的校验,默认开启
3.将指定镜像保存成 tar 归档文件
docker save -o xxxx.tar 镜像ID
//-o :输出到的文件
4.导入使用docker save命令导出的镜像
docker load -i xxxx.tar
//--input -i 指定导入的文件
//--quiet -q 精简输出信息
5.从归档文件中创建镜像
docker import xxxx.tar 镜像名:tag
//-c 应用docker 指令创建镜像
//-m 提交时的说明文字
更多命令(仅供参考)
点此转到->docker image命令
容器使用
容器是什么?这个东西需要结合镜像去解释,其实也不难理解,用不专业的说法来说:上面我说镜像的时候说到,winpe系统里面又有各式各样的功能,我们需要某一个功能就要先挂载镜像文件,进入镜像里面才能使用到这个功能,这时候我们需要一个能够挂载镜像的容器,一般情况下,我们习惯把winpe放进U盘里面,而U盘再挂载到电脑上,这个时候这个U盘就是winpe的容器,而有时候我们可以提取PE直接在电脑中挂载iso文件,它会在电脑上生成一个虚拟光驱,而这个光驱也是winpe的容器;再简单一点理解,就是你手上有一个windows10,你需要运行这个windows10,就需要一个电脑,而你的电脑就是装载这个windows10的一个容器。所以Docker的容器就是用于挂载镜像的一个东西。一个镜像可以拥有多个容器,相当于一个winpe可以刷进多个U盘里面一样。
容器相关命令
创建容器
docker run
docker create
docker container run
docker container create
//注:四个命令的用法是完全一样的以下是延伸的用法(以docker run为例):
1.用已有的镜像创建一个容器
docker run --name test -d 镜像仓库名:tag
//-d 后台运行一个容器,并返回ID
//test为自定义名字2.用已有镜像创建一个容器,并在容器内添加一个80端口映射到宿主机的随机端口
docker run -P -d 镜像仓库名:tag
//-P 添加一个80端口映射到宿主机随机端口3.用已有镜像创建一个容器,自定义映射端口并挂载本地文件夹到容器里
docker run -p 1234:1234 -v /a:/a -d 镜像仓库名:tag
//-p 指定端口映射,格式:宿主机端口:容器端口
//-v 绑定一个卷,格式:宿主机目录:容器目录4.绑定容器的1234端口,并将其映射到宿主机127.0.0.1的80端口上
docker run -p 127.0.0.1:80:1234/tcp 镜像仓库名:tag /bin/sh
// /bin/sh:此处是命令5.用已有镜像以交互模式创建一个容器,并在容器内执行/bin/sh命令
docker run -it 镜像仓库名:tag /bin/bash
//-i 以交互模式运行容器
//-t 为容器重新分配一个伪输入终端
//-i和-t一般一起使用,变成-it6.其他flag用法
-name 为容器指定一个名称
--dns 指定容器使用的DNS服务器,默认和宿主一致
--dns-search 指定容器DNS搜索域名,默认和宿主一致
-h 指定容器的hostname
-e username 设置环境变量
--env-file=[] 从指定文件读入环境变量
--cpuset="0-2" or --cpuset="0,1,2" 绑定容器到指定CPU运行
-m 设置容器使用内存最大值
--net= 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型
--link=[] 添加链接到另一个容器
--expose=[] 开放一个端口或一组端口
容器的启动关闭和重启
docker start 容器ID //启动容器
docker stop 容器ID //停止容器
docker restart 容器ID //重启容器
docker kill 容器ID //杀死容器
docker container start 容器ID //启动容器
docker container stop 容器ID //停止容器
docker container restart 容器ID //重启容器
docker container kill 容器ID //杀死容器解释一下kill和stop的区别,kill的关闭手段比较残忍,是强制性的关闭,相当于电脑直接断电,而stop比较优雅,它先发送一个信号,让容器做必要的处理再关闭,相当于先按关机再断开电源。能不用kill就不用kill,尽量用stop。
在运行的容器中执行命令
docker exec -itd 容器ID 命令
docker container exec -itd 容器ID 命令
//-i 以交互模式运行容器
//-t 为容器重新分配一个伪输入终端
//-d 在后台运行,不会显示执行内容
删除容器或容器连接
docker rm 容器ID
docker container rm 容器ID
//-f 强制删除容器
//-v 删除容器挂载的数据卷
docker rm -l xxx
docker container rm -l xxx
//-l 移除容器之间的连接,xxx为连接名称
docker rm $(docker ps -a -q)
//删除所有已经停止的容器
查看容器
1.此命令主要是展示所有容器的基本信息
docker ps
//-a 显示所有的容器,同时包括没有运行的
//-f 根据条件过滤显示的内容
//--format 指定返回值的模板文件
//-l 显示最近创建的容器
//-n 列出最近创建的n个容器
//--no-trunc 不截断输出
//-q 静默模式,只显示容器编号
//-s 显示总的文件大小
2.此命令主要展示了容器的细节,包括层数据和元数据
docker container inspect 容器ID
docker inspect 容器ID
3.此命令主要是用来看容器的运行日志,在运行出现问题的时候极其有用
docker logs 容器ID
//-f 跟踪日志输出
//--since 显示某个开始时间的所有日志,格式:--since="2020-02-15"
//-t 显示时间戳
//--tail 仅列出最新指定条容器日志,格式:--tail=整数
4.此命令用于查看容器中运行的进程信息
docker top 容器ID
5.此命令用于列出指定的容器的端口映射,或者查找将PRIVATE_PORT NAT到面向公众的端口
docker port 容器ID
6.此命令用于从服务器获取实时事件
docker events
-f 根据条件过滤事件
--since 从指定的时间戳后显示所有事件
--until 流水时间显示到指定的时间为止
容器操作
1.此命令用于容器与主机之间的数据拷贝
docker cp /path/to/start /path/to/target
//-L 保持源目标中的链接命令中的两个路径如果有一方是docker主机,则要在路径前面加上容器ID:(注意冒号)。例如:xxxxxx123:/path/to/start
2.此命令检查容器里文件结构的更改,查看变化
docker diff 容器ID
3.此命令用于从容器创建一个新的镜像
docker commit 容器ID 镜像仓库名:tag
-a 提交的镜像作者
-c 使用Dockerfile指令来创建镜像
-m 提交时的说明文字
-p 在commit时,将容器暂停
其他命令
prune 命令
docker pruneprune 命令用来删除不再使用的 docker 对象。
1.删除所有未被 tag 标记和未被容器使用的镜像
docker image prune2.删除所有未被容器使用的镜像
docker image prune -a3.删除所有停止运行的容器
docker container prune4.删除所有未被挂载的卷
docker volume prune5.删除所有网络
docker network prune6.删除 docker 所有资源
docker system prune
镜像加速
什么是镜像加速?
大家都知道,国内网络环境的独特性,导致在docker hub上面pull一个镜像会很慢甚至失败,我在写这个前下载node,失败了好几次,最后才成功,主要还是网络问题,那么这个网络问题怎么解决?下面就说下。
解决方法
在/etc/docker/daemon.json中写入如下内容(如果文件不存在请新建该文件)【仅针对systemd系统】
{"registry-mirrors":["http://hub-mirror.c.163.com"]}这个是网易的一个加速器,如果有找到其他可以把网站改掉,或者直接在网站后面添加,例如:
{"registry-mirrors":["http://hub-mirror.c.163.com",https://docker.mirrors.ustc.edu.cn]}
总结
大概就记录到这里,其他更深入的要慢慢鼓捣,还有个docker network的命令我还没去研究没去搞懂,还有个docker容器间的连接也没去搞懂,这两个内容估计会用另一篇一整篇的文章去记录吧。
参考资料
1.Docker教程 - 易百教程
2.Docker network命令 - 易百教程
3.Docker - C语言中文网
4.Docker教程 - 菜鸟教程
5.Docker命令大全 - 菜鸟教程




0 条评论