Docker 入门学习

Docker 概述

Docker 官网: Docker 官网

Docker Hub 官网: Docker Hub 官网

Docker 是一个开源的应用容器引擎,基于 Go 语言开发并遵从 Apache2.0 协议开源。其可以做到让开发者打包他们的应用以及依赖包到一个轻量级、可移植的镜像当中,然后发布到任何流行的 Linux 操作系统的机器上,也可以实现虚拟化。

Docker 为什么出现

一款产品从开发到上线,一般都是拥有两套环境:开发环境和测试环境。

开发人员和运维人员的环境基本上都是不一致的。在开发人员电脑上可以运行的程序,在运维人员电脑上就不一定可以正常运行。比如 java web 应用,需要一个操作系统,操作系统上要有jdk,tomcat,代码,配置文件。jdk版本可能导致程序的运行失败,比如class文件需要1.7编译,而运维人员装的1.6jdk;tomcat 版本可能导致失败,比如旧的版本一些配置在新版本当中不再支持;代码存放的位置也可能导致程序的运行失败,比如使用了系统的一些环境编码,在 Linux 上面不可以支持;配置文件,比如可能少配了个配置文件等等。

Docker 的出现可以将操作系统,jdk,tomcat,代码,配置文件全部放到一个集装箱里,在打包放到鲸鱼上,由鲸鱼给我们送到服务器上,在我的机器上怎么运行,在别的机器上也怎么运行,不会有任何的问题。Docker 解决了运行环境不一致所带来的问题。

Docker VS 传统虚拟机

虚拟机技术

资源占用十分多
冗余步骤多
启动慢,分钟级别的

容器化技术

响应式部署和扩展:基于容器,允许高度可移植的工作负载
快速一致:将环境,配置文件,代码等打包到一个集装箱里,简化开发的生命周期
轻巧快速:秒级别的

Docker 和 虚拟机技术的不同:

  • 传统虚拟机,虚拟出一条硬件,运行一个完整的操作系统,然后在这个操作系统上安装和运行软件。
  • 容器内的应用直接运行在宿主机的内容,容器是没有自己的内核的,也没有虚拟我们的硬件,很轻便、
  • 每个容器间是相互隔离,每个容器内都有一个属于自己的文件系统,互不影响。

Docker 的基本组成

在这里插入图片描述
镜像(image)

docker 镜像好比一个模板,可以通过这个模板来创建容器服务,可以创建多个容器服务(最终服务运行或者项目运行就是在容器当中的)。

容器(container)

docker 利用容器技术,独立运行一个或者一个组应用,容器是通过镜像来创建的,可以将容器理解为一个简易的 Linux 系统。

仓库(repository)

仓库就是存放镜像的地方,分为公有仓库和私有仓库。

Docker 安装(centos下安装)

环境查看

# Docker 要求 centos 系统的内核版本高于 3.10,查看 centos 的环境
uname -r

安装 Docker

# 1、如果安装过请先卸载
yum remove docker \
					docker-client \
					docker-client-latest \
					docker-common \
					docker-latest \
					docker-latest-logrotate \
					docker-logrotate \
					docker-engine
# 2、需要的安装包
yum install -y yum-utils

# 3、设置镜像的仓库
# 推荐使用阿里云的,十分得快
yum-config-manager  --add-repo  http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 更新yum软件包索引
yum makecache fast

# 4、安装docker相关的内容, docker-ce 社区 ee 企业版
yum install docker-ce docker-ce-cli containerd.io

# 5、启动docker
systemctl start docker

# 6、使用docker version 是否安装成功
docker version

# 7、hello-world (hello-world 是已经在docker仓库当中存在的镜像.)
docker run hello-world

# 8、查看一下下载的这个 hello-world 镜像
docker images

Docker 底层原理

Docker 是怎样工作的

Docker 是一个 Client - Server 结构的系统,Docker 的守护进程运行在主机上,通过 Socket 从客户端访问,Docker 接收到指令,就会执行这个指令。
在这里插入图片描述
Docker 为什么比 VM 快

1、Docker 有着比 虚拟机更少的抽象层
2、Docker 利用的是宿主机的内核,vm 需要的是 Guest OS
在这里插入图片描述

Docker 常用命令

帮助命令
命令说明
docker version显示 docker 的版本信息
docker info显示 docker 的系统信息,包括镜像和容器的数量
docker 命令 --help显示某个命令的帮助说明

命令文档的地址: Docker命令帮助文档

镜像命令
命令说明
docker images查看所有本地的主机上的镜像
docker search 镜像名搜索镜像
docker pull 镜像名[:tag]下载镜像(可以使用:tag指定版本,默认是最新版本)
docker rmi -f 镜像id删除指定镜像
docker rmi -f 镜像id 镜像id 镜像id删除多个镜像
docker rmi -f $(docker images -aq)删除全部镜像
容器命令

在使用容器之前,需要先有镜像,镜像用来创建容器,在 VMware 软件下安装CentOS(Linux 操作系统),然后启动虚拟机,在 Docker 当中下载 centos 镜像

docker pull centos

新建容器并启动

# 命令
docker run [可选参数] image名字

docker run -it centos /bin/bash

# 参数说明
--name="Name"	容器名字 tomcat01 tomcat02,用来区分容器
-d				后台方式运行
-it				使用交互方式,进入容器查看内容
-p				指定容器的端口 -p 8080:8080
	-p ip:主机端口:容器端口
	-p 主机端口:容器端口(常用)
	-p 容器端口
	容器端口
-P				随机指定端口

列出所有的运行容器

#  命令
docker ps # 列出当前正在运行的容器

docker ps -aq

# 参数说明
-a 	 # 列出当前正在运行的容器+带出历史运行过的容器
-n=? # 显示最近运行的容器
-q 	 # 只显示容器的编号

退出容器

exit				# 直接退出并停止容器
Ctrl + P + Q		# 退出容器但不停止

删除容器

# 命令
docker rm 容器id					# 删除指定的容器id,不能删除正在运行的容器,如果要强制删除 rm -f
docker rm -f $(docker ps -aq)		# 删除所有的容器

启动和停止容器

docker start 容器id		# 启动容器
docker restart 容器id		# 重启容器
docker stop 容器id		# 停止当前正在运行的容器
docker kill 容器id		# 强制停止当前容器
常用命令

后台启动容器

# 命令 docker run -d 镜像名
[root@hadoop100 ~]# docker run -d centos

# 问题docker ps ,发现 centos 停止了

# 常见的坑,docker 容器使用后台运行,就必须要有一个前台进程,docker 发现没有应用,就会自动停止。

查看日志

# 命令
docker logs -f -t --tail 容器id

# 显示日志
-tf				# 显示日志
--tail number	 # 显示日志条数

查看容器当中进程信息

# 命令
docker top 容器id

查看容器 / 镜像的源数据

# 命令
docker inspect 容器id

进入当前正在运行的容器

# 我们通常容器都是使用后台方式运行的,需要进入容器,修改一些配置

# 命令
docker exec -it 容器id /bin/bash

在这里插入图片描述

Docker 镜像

镜像是什么

镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件。

所有的应用,直接打包docker镜像,就可以直接跑起来。

如何获得镜像

  • 从远程仓库下载
  • 朋友拷贝给你
  • 自己制作一个镜像
Docker 镜像加载原理

UnionFS

UnionFS(联合文件系统):Union文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下。Union 文件系统是 Docker 镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。

特性:一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录。

Docker 镜像加载原理

Docker 的镜像实际上由一层一层的文件系统组成,这种层级的文件系统叫做 UnionFS。

bootfs(boot file system)主要包含 bootloader 和 kernel,bootloader 主要是引导加载 kernel,Linux 刚启动时会加载 bootfs 文件系统,在 Docker 镜像的最底层是 bootfs 。这一层与我们典型的 Linux / Unix 系统是一个的,包含 boot 加载器和内核。当 boot 加载完成之后整个内核就都在内存中了,此时内存的使用权已由 bootfs 转交给内核,此时系统也会加载 bootfs。

rootfs(root file system),在 bootfs 之上。包含的就是典型 Linux 系统当中的 /dev,/proc,/bin,/etc等标准目录和文件。rootfs 就是各种不同的操作系统发行版,比如CentOS等等。
在这里插入图片描述
平时安装进虚拟机的 CentOS 都是好几个G,为什么 Docker 这里才几百M

对于一个精简的OS,rootfs 可以很小,只需要包含最基本的命令,工具和程序库就可以了,因为底层直接用 Host 的 kernel,自己只需要提供 rootfs 就可以了。由此可见对于不同的 Linux 发行版,bootfs 基本是一致的,rootfs 会有差别,因此不同的发行版可以共用 bootfs。

commit 提交镜像
docker commit 提交容器成为一个新的副本

docker commit -m="提交的描述信息" -a="作者" 容器id 目标镜像名:[TAG]

参考博客:

https://blog.csdn.net/q610376681/article/details/90483576

https://blog.csdn.net/weixin_43584835/article/details/108192859

https://blog.csdn.net/just_for_that_moment/article/details/125308103

https://blog.csdn.net/the_sun___/article/details/112976294

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值