docker
1.安装
使用mobaxterm
docker更换镜像源
# 网易的镜像地址(创建daemon.json文件)
vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://http://hub-mirror.c.163.com"]
}
# 重启docker
systemctl enable docker
2.docker常用命令
docker基本命令
docker version #查看docker的版本信息
docker -v
docker info #查看docker的系统信息,包括镜像和容器的数量
docker 命令 --help #帮助命令(可查看可选的参数)
docker COMMAND --help
2-1.docker的启停
启动docker: systemctl statr docker
停止docker: systemctl stop docker
重启docker: systemctl restatr docker
查看docker状态: systemctl status docker
开机启动docker: systemctl enable docker
查看docker信息: docker info
查看docker帮助文档: docker --help
查看docker指定命令帮助文档: docker cp --help
2-2.镜像命令
1.查看本地镜像:docker images
-a 列出本地所有镜像(含历史映像层)
-q 只列出镜像ID
REPOSITORY:镜像的仓库源
TAG:镜像的标签(同一个仓库源可以有多个tag[版本号])
IMAGE ID:镜像ID
CREATED:镜像创建时间
SIZE:镜像大小
2.查找某个镜像:docker search [img_name]
-f, --filter filter Filter output based on conditions provided
--format string Pretty-print search using a Go template
--limit int Max number of search results (default 25)
--no-trunc Don't truncate output
如:docker search mysql
# no-trunc 描述
如:docker search --no-trunc mysql 显示完整的镜像描述
# limit 显示条数
如:docker search --limit 3 mysql 只列出前3个mysql镜像(默认现实25个)
# filter 过滤条件
如:docker search --filter stars=3000 mysql 筛选出点赞数大于3000的mysql
--filter stars=3000 收藏星数
--filter is-official=true 是否官方镜像
--filter is-automated=true 是否自动构建
# format 格式化
docker search --prmat "{{.Name}}: {{.StarCount}}" mysql
NAME:镜像名字
DESCRIPTION:镜像的描述
STARS:镜像的点赞数
OFFICIAL:官方认证
AUTOMA:自动构建
3.拉去镜像:docker pull
docker pull mysql 拉取最新mysql镜像
docker pull mysql:latest
docker pull mysql[:TAG] 拉取指定版本mysql镜像
docker pull mysql:5.6
4.查看docker镜像/容器/数据卷所占用空间
docker system df
5.移除某个镜像
docker rmi 镜像名字/镜像ID
如:docker rmi hello-world (名字)
如:docker rmi feb5d9fea6a5 (ID)
如:docker rmi -f 镜像名字/镜像ID (强制删除)
删除多个 docker rmi -f hello-world mysql
删除多个(带版本) docker rmi -f hello-world:1.0.1 mysql:5.6
删除全部(注意!!!) docker rmi -f $(docker images -aq)
谈谈docker虚悬镜像是什么?
仓库名 标签名 都是<none>的镜像,俗称虚悬镜像
构建docker镜像可能会出现
2-3.容器命令
1.运行容器
docker run
--name="容器新名字" 为容器指定一个名称
-d 后台运行容器,并返回容器ID,既启动守护式容器(后台运行)
-i 以交互式模式运行容器,通常与-t结合使用(-it)
-t 为容器重新分配一个[伪输入终端],通常与-i结合使用(-it)
-P [随机]端口映射
-p [指定]端口映射
-p ip:主机端口:容器端口 配置主机端口映射到容器端口
-p 主机端口:docker端口
-p 8080:80
# /bin/bash: 指shell交互命令的接口
docker run -it ubuntu /bin/bash
2.退出容器
1. exit 停止并退出容器(后台方式运行则仅退出)
2. Ctrl+P+Q 不停止容器退出
3.列出运行过的容器
docker ps # 列出当前正在运行的容器
-a # 列出所有容器的运行记录
-n=? # 显示最近创建的n个容器
-q # 只显示容器的ID
4.进入当前正在运行的容器
# docker exec 进入容器后开启一个新的终端,可以在里面操作
# docker attach 进入容器正在执行的终端,不会启动新的进程
docker exec -it 容器id/容器名称 /bin/bash
docker attach 容器id/容器名称
5.删除容器
docker rm 容器id/容器名称 #删除指定的容器,不能删除正在运行的容器,强制删除使用 rm -f
docker rm -f $(docker ps -aq) #删除所有的容器(小心!!!)
docker ps -a -q|xargs docker rm #删除所有的容器(小心!!!)
6.启动和停止容器
docker start 容器id/容器名称 #启动容器
docker restart 容器id/容器名称 #重启容器
docker stop 容器id/容器名称 #停止当前运行的容器
docker kill 容器id/容器名称 #强制停止当前容器
日志的查看
docker logs 容器id/容器名称
docker logs [OPTIONS] CONTAINER
Fetch the logs of a container
Options:
--details Show extra details provided to logs
-f : 跟踪日志输出
--since :显示某个开始时间的所有日志
--tail [number]:仅列出最新N条容器日志
-t : 显示时间戳
常用:
docker logs -tf 容器id/容器名称
docker logs --tail number 容器id/容器名称 #num为要显示的日志条数
查看容器中进程信息
docker top 容器id/容器名称
➜ ~ docker top nginx
UID PID PPID C STIME TTY TIME CMD
root 2858 2839 0 May02 ? 00:00:00 nginx: master process nginx -g daemon off;
101 2905 2858 0 May02 ? 00:00:00 nginx: worker process
查看容器的元数据
docker inspect 容器id/容器名称 # json格式
拷贝操作
#拷贝容器的文件到主机中
docker cp 容器id:容器内路径 目的主机路径
#拷贝宿主机的文件到容器中
docker cp 目的主机路径 容器id:容器内路径
数据卷
docker run -it -v /宿主机目录:/容器目录 镜像名 /bin/bash
镜像分层的概念
是什么
镜像是什么?
镜像是一种轻量级、可执行的独立软件包,它包含运行某个软件所需要的所有内容,我们捌应用程序和配置依赖打包好形成一个可交付的运行环境,这个打包好的运行环境就是image镜像文件
只有通过这个镜像文件才能生成docker容器实例
分层的镜像?
UnionFS(联合文件系统)
联合文件系统是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统霞,Union文件系统是docker镜像的基础。
镜像可以通过分层来进行继承,基于基础镜像,可以制作各种具体的应用镜像。
docker镜像加载的原理
为什么docker镜像要采用这种分层结构呢?
资源共享,方便复制迁移,就是为了复用
重点理解
docker镜像层是只读的,容器层是可写的
当容器启动石,一个新的可写层被加载到镜像层的顶部,这一层通常被称作‘容器层’,‘容器层’下面的都叫‘镜像层’。
无论添加、删除、还是修改文件都只会发生在容器层,只有容器层是可写的,容器层下面的镜像层都是只读的。
docker镜像commit操作案例
# 解决centos不能使用yum问题
1.https://blog.csdn.net/weixin_45836543/article/details/124460876
2.yum update -y 来更新yum
docker commit -a "作者名字" -m "内容简介" 容器ID 镜像名称:镜像版本
docker commit -a "lxd670" -m "add vim" 9d0907761233 centos8:0.1
-a :提交的镜像作者;
-c :使用Dockerfile指令来创建镜像;
-m :提交时的说明文字;
-p :在commit时,将容器暂停。