docker容器和镜像的区别

学习目标:

docker容器和镜像的区别(持续更新)


学习内容:

1、docker容器基本概念与运用
2、docker镜像基本概念与运用
3、docker容器和镜像同点
4、docker容器和镜像异点
5、docker在LeaderNews中运行的命令与命令解释
6、docker学习相关链接网址
7、docker在LeaderNews中运行的命令与命令解释的学习相关链接网址
8、docker官方参考资料学习与官方网址


1、docker容器基本概念与运用

1.1 Container(容器,一层读写层+多层只读层)
  容器(container)的定义和镜像(image)几乎一模一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写的。要点:容器 = 镜像 + 读写层,并且容器的定义并没有提及是否要运行容器。

1.2 Running Container(运行态容器,一层读写层+多层只读层+隔离的进程空间和包含其中的进程)
  运行状态的容器「Running Container」是由一个可读写的文件系统「静态容器」+ 隔离的进程空间和其中的进程构成的。下面这张图片展示了一个运行中的容器。
  正是文件系统隔离技术使得Docker成为了一个前途无量的技术。一个容器中的进程可能会对文件进行修改、删除、创建,这些改变都将作用于可读写层(read-write layer)。下面这张图展示了这个行为。

1.3 运用
  我们可以通过运行以下命令来验证我们上面所说的:

	docker run ubuntu touch happiness.txt

  即便是这个ubuntu容器不再运行,我们依旧能够在主机的文件系统上找到这个新文件。

	find / -name happiness.txt
	/var/lib/docker/aufs/diff/860a7b...889/happiness.txt

2、docker镜像基本概念与运用
2.1 Image Layer(镜像层)
  镜像可以看成是由多个镜像层叠加起来的一个文件系统(通过UnionFS与AUFS文件联合系统实现),镜像层也可以简单理解为一个基本的镜像,而每个镜像层之间通过指针的形式进行叠加。
2.2 Image(镜像,只读层的集合)
  镜像是一堆只读层的统一视角,除了最底层没有指向外,每一层都指向它的父层。统一文件系统( Union File System)技术能够将不同的层整合成一个文件系统,为这些层提供了一个统一的视角,这样就隐藏了多层的存在。在用户的角度看来,只存在一个文件系统。镜像每一层都是不可写的,都是只读层。
2.3 /var/lib/docker/aufs目录
  需要注意的是,在一个运行中的容器内部,这些层是不可见的。在我的主机上,我发现它们存在于/var/lib/docker/aufs目录下。

sudo tree -L 1 /var/lib/docker/
/var/lib/docker/
├── aufs
├── containers
├── graph
├── init
├── linkgraph.db
├── repositories-aufs
├── tmp
├── trust
└── volumes
7 directories, 2 files

3、docker容器和镜像同点
3.1 镜像(Image)
  Docker统一文件系统(the union file system)
  镜像(Image)就是一堆只读层(read-only layer)的统一视角。
3.2 容器(container)
  容器(container)的定义和镜像(image)几乎一模一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写的。
容器 = 镜像 + 可读层。
  一个运行态容器(running container)被定义为一个可读写的统一文件系统加上隔离的进程空间和包含其中的进程。
4、docker容器和镜像异点
  简而言之,容器 = 镜像 + 读写层。
5、docker在LeaderNews中运行的命令与命令解释
5.1 Docker的安装(Linux)
5.1.1 Docker要求CentOS系统的内核版本高于3.10

查看CentOS内核版本的命令
uname -r
如果内核版本低于3.10,升级软件包及内核
yum update

5.1.2 安装Docker

1、安装docker
yum install docker
2、输入y确认安装
3、启动docker
systemctl start docker
4、查看docker的版本号确认是否启动成功
docker -v
5、将docker设置成开机启动
systemctl enable docker
6、停止docker
systemctl stop docker
7、实例操作
[root@chongba-docker ~]# docker -v
Docker version 19.03.13, build 4484c46d9d
[root@chongba-docker ~]# systemctl stop docker
[root@chongba-docker ~]# docker -v
Docker version 19.03.13, build 4484c46d9d
[root@chongba-docker ~]# docker ps
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
[root@chongba-docker ~]# systemctl start docker

5.2 Docker的常用操作
5.2.1 镜像操作
  软件镜像—>操作(也就是对软件应用APP进行操作)

操作 命令 说明
检索 docker search 关键字 eg:docker search mysql 在docker hub上检索镜像的详细信息 docker hub链接:https://hub.docker.com/
拉取 docker pull 镜像名:tag tag是可选的,tag表示标签,多为软件按的版本,默认是latest最新
列表 docker images 查看所有的本地镜像列表
删除 docker rmi image-id 删除指定的本地镜像,image-id是在本地镜像的唯一标识,可用docker images查看/

5.2.2 容器操作
  软件镜像—>运行镜像—>产生一个容器(也就是在运行的软件)

操作 命令 说明
运行 docker run --name container-name -d image-name eg:docker run --name myredis -d redis:latest (最后的参数有标签最好加上标签,要是latest可以不加) –name:自定义容器名 -d:后台运行 image-name:指定镜像模板 (–nam可以省略不用起别名启动也可以,此时系统回自动加上一个别名)
列表 docker ps (查看运行中的容器) 加上 -a 可以查看所有的容器
停止 docker stop container-name/container-id 停止当前运行的容器
启动 docker start container-name/container-id 启动容器
删除 docker rm container-id 删除指定容器
端口映射 -p 6379:6379 eg:docker run -d -p 6379:6379 --name myredis docker.io/redis -p:主机端口(映射到)容器内部的端口
容器日志 docker logs container-name/container-id 查看日志

点击查看更多命令
5.3 实例安装tomcat
  步骤:(下面以tomcat为例)

1、操作镜像
docker search tomcat
2、下载镜像(不加 :tag 默认下载的是latest最新版本的)
docker pull tomcat    
3、根据镜像启动容器
docker run --name mytomcat -d tomcat:latest
4、查看运行中的容器
docker ps
5、停止运行中的容器(container-id/container-name)
docker stop mytomcat
6、查看所有的容器,包括没启动的和启动的
docker ps -a
7、启动容器(container-name/container-id)
docker start mytomcat
8、删除容器(前提是容器必须是停止状态,记得用docker ps 查看container-id)
docker rm container-id
9、启动一个做了端口映射的tomcat
docker run -d -p 8888:8080 tomcat
-d:后台运行
-p:将主机端口映射到容器的端口   主机端口:内部端口
(进行到这里就可以在主机上面用8888端口来访问tomcat主页,但是有很大一部分原因是关闭了Linux的防火墙)
10、可以查看linux的防火墙状态
service firewalld status
service firewalld stop   关闭防火墙
11、查看容器的日志
docker logs container-id/container-name
12、一个镜像可以启动多个容器,下面两个端口主机端都能访问,并且每个容器都是独立的互不干扰的
docker run -d -p 8887:8080 tomcat
docker run -d -p 8889:8080 tomcat
13、这里在添加一个创建myslq5.5的例子
docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.5
(这个例子是创建一个带有映射端口的,mysql5.5版本的容器,并且指定了在进行数据库链接的时候需要输入的密码,上面的顺序不能错哦。)

小提示:
在搜索镜像的时候,最好是去docker hub上面搜索需要的镜像,然后根据自己的需求进行下载,在tag处选择合适的版本,里面也会有解释启动和运行的命令。

6、docker容器和镜像区别的学习相关链接网址
6.1 Docker容器和镜像的区别
6.2 10张图带你深入理解Docker容器和镜像
6.3 官网
6.4 https://blog.csdn.net/Dome_/article/details/92080878
6.5 https://www.thinbug.com/q/52173352
6.6 https://www.cnblogs.com/baizhanshi/p/9655102.html
6.7 简单易懂介绍了docker
6.8 docker镜像和容器的区别
6.9 Docker总结(配合阿里云容器镜像服务)
7、docker在LeaderNews中运行的命令与命令解释的学习相关链接网址
7.1 docker 命令详细解释
7.2 Docker基础操作和命令解释(Linux)
7.3 Docker CLI 的基本命令
7.4 docker 命令最常用解释
7.5 Docker常用命令
7.6 Docker常用命令
8、docker官方参考资料学习与官方网址
8.1 Docker 概述
8.1.1 Docker 架构
  Docker 使用客户端-服务器架构。Docker客户端与 Docker守护进程对话,后者负责构建、运行和分发 Docker 容器的繁重工作。Docker 客户端和守护程序可以 在同一系统上运行,或者您可以将 Docker 客户端连接到远程 Docker 守护程序。Docker 客户端和守护程序使用 REST API,通过 UNIX 套接字或网络接口进行通信。另一个 Docker 客户端是 Docker Compose,它允许您使用由一组容器组成的应用程序。

Docker架构图解

8.1.2 底层技术
  Docker 是用Go 编程语言编写的,并利用 Linux 内核的几个特性来提供其功能。Docker 使用一种称为容器namespaces的技术来提供隔离的工作空间。当您运行容器时,Docker 会为该容器创建一组 命名空间。
  这些命名空间提供了一层隔离。容器的每个方面都在单独的命名空间中运行,并且它的访问权限仅限于该命名空间。

8.2 获取 Docker
8.3 开始使用
8.3.1 入门
8.3.2 示例应用程序.
8.3.3 更新应用程序
8.3.4 共享应用程序
8.3.5 持久化数据库
8.3.6 使用绑定挂载
8.3.7 多容器应用
8.3.8 使用 Docker 撰写
8.3.9 图像构建最佳实践
8.4 特定语言指南(新)
8.4.1 Overview(概述)
8.4.2 Node.js
8.4.3 Python
8.4.4 Java
8.4.5 Go
8.5 使用 Docker 开发
8.5.1 Overview
8.5.2 Best practices
8.5.3 构建镜像
8.5.3.1 编写 Dockerfile 的最佳实践
8.5.3.2 使用 BuildKit 构建镜像
8.5.3.3 使用多阶段构建
8.5.3.4 管理图像
8.5.3.5 创建基础镜像
8.5.4 Scan images(扫描图像)
8.6 设置 CI/CD
8.6.1 CI/CD Best practices(进行 CI/CD 的最佳实践)
8.6.2 Configure GitHub Actions(配置 GitHub 操作)
8.6.3 使用多阶段构建
8.7 将您的应用部署到云端
8.7.1 Docker and ACI
8.7.2 ACI container features(ACI 容器功能)
8.7.3 ACI Compose features(ACI 撰写功能)添加链接描述
8.7.4 Docker and ECS
8.7.5 Docker ECS integration architecture(Docker ECS 集成架构)
8.7.6 ECS Compose features( ECS组合功能)
8.7.7 ECS Compose examples(ECS 编写示例)
8.8 在生产环境中运行您的应用
8.8.1 Orchestration(编排)
8.8.1.1 概述
8.8.1.2 部署到 Kubernetes
8.8.1.3 部署到 Swarm
8.8.2 Configure all objects(配置所有对象)
8.8.2.1 将自定义元数据应用于对象
8.8.2.2 修剪未使用的对象
8.8.2.3 格式化命令和日志输出
8.8.3 Configure the daemon(配置守护进程)
8.8.3.1 配置并运行 Docker
8.8.3.2 使用 systemd 控制 Docker
8.8.4 Collect metrics with Prometheus(使用 Prometheus 收集指标)
8.8.5 Configure containers(配置容器)
8.8.5.1 自动启动容器
8.8.5.2 在守护进程停机期间保持容器活动
8.8.5.3 在一个容器中运行多个服务
8.8.5.4 运行时指标
8.8.5.5 内存、CPU 和 GPU 的运行时选项
8.8.5.6 日志记录
8.8.5.7 扩展应用程序
8.8.6 Configure networking(配置网络)
8.8.6.1 网络概述
8.8.6.2 使用桥接网络
8.8.6.3 使用覆盖网络
8.8.6.4 使用主机网络
8.8.6.5 使用 IPvlan 网络
8.8.6.6 使用 macvlan 网络
8.8.6.7 为容器禁用网络
8.8.6.8 网络教程
8.8.6.9 配置守护进程和容器
8.8.6.10 传统网络内容
8.8.7 Manage application data(管理应用程序数据)
8.8.7.1 存储概述
8.8.7.2 卷.
8.8.7.3 使用绑定挂载
8.8.7.4 使用 tmpfs 挂载
8.8.7.5 解决卷错误
8.8.7.6 在容器中存储数据
8.9 教育资源

学习时间:

2022.01.16——2022.01.20

学习产出:

1、 技术笔记1篇
2、了解docker博客若干篇
3、 学习docker官网知识

你可能感兴趣的:(docker,容器,运维)