Docker 学习历程 -入门

该文章出自狂神说javaDocker教学

Docker为什么会出现

环境配置如此麻烦,换一台机器,就要重新来一次,费力费时
Docker镜像的设计,使得Docker得以打破过去【程序即应用】的观念。透过镜像(images)将作业系统核心除外
运作应用程式所需要的系统环境,由下而上打包

Docker历史

-Docker 公司位于旧金山,由法裔美籍开发者和企业家 Solumon Hykes 创立
-新旧LOGO
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210507004755777.gif)
-Docker 公司起初是一家名为 dotCloud 的平台即服务提供商
-Go语言开发
-Docker技术出生时并没有多少人关注,2013年代码开源后每个月都会更新一个新版本,2014年4月Docker1.0发布
-[Docker官网](https://www.docker.com/)
-[Docker文档](https://docs.docker.com/)

Docker能做什么

-之前的VM(虚拟机)技术缺点
1、资源占用非常多
2、冗余步骤多
3、启动慢

在这里插入图片描述

容器化技术
**容器化技术不是模拟一个完整的操作系统**

在这里插入图片描述
面试题:Docker和虚拟机技术有什么不同
1、传统虚拟机,虚拟出一条硬件,运行一个完整的操作系统,然后在这个系统上安装和运行软件
2、容器内的应用直接运行在宿主机里,容器是没有自己的核心的,没有虚拟我们的硬件,所以就轻便了
3、每个容器是互相隔离的,每个容器内都有一个属于自己的文件系统,互不影响
4、传统模式需要一堆文档和安装程序,Docker直接打包镜像发布测试,一键运行
5、Docker使用之后我们部署应用就会像搭积木一样,项目直接打包成镜像
6、Docker在扩张服务器时也只需要将镜像运行在另外一台服务器即可
7、使用Docker可以使服务器环境和本地开发环境高度一致
8、Docker是更高效的资源利用,可以将服务器的性能压榨到极致

安装 Docker

我是使用的Xshell连接阿里云服务器,以CentOS7.8为例
// 卸载旧版本
yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine 

// 安装新版本
yum install -y yum-utils

// 设置镜像仓库
yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 
    // https://download.docker.com/linux/centos/docker-ce.repo   这个会下载很慢,需要更换成阿里云的Docker

// 更新yum软件包索引
yum makecache fast
    
//安装最新版的Docker		ce是社区版本		ee是企业版
yum install docker-ce docker-ce-cli containerd.io

// 测试是否安装成功
// 启动Docker
systemctl start docker

// 查看Docker版本
docker version

// 测试Hello World
docker run hello-world

// 卸载依赖
yum remove docker-ce docker-ce-cli containerd.io

// 删除资源
rm -rf /var/lib/docker
		/var/lib/docker是Docker的默认工作路径

Docker Run流程的原理

在这里插入图片描述

在这里插入图片描述
在这幅图中,我们可以看到,Docker 容器的生命周期里分为五种状态,其分别代表着:
Created:容器已经被创建,容器所需的相关资源已经准备就绪,但容器中的程序还未处于运行状态。
Running:容器正在运行,也就是容器中的应用正在运行。
Paused:容器已暂停,表示容器中的所有程序都处于暂停 ( 不是停止 ) 状态。
Stopped:容器处于停止状态,占用的资源和沙盒环境都依然存在,只是容器中的应用程序均已停止。
Deleted:容器已删除,相关占用的资源及存储在 Docker 中的管理信息也都已释放和移除。

Docker 常用命令

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

docker 命令在线帮助文档:

镜像的基本命令

docker images			# 查看本地主机上所有镜像

REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
hello-world   latest    d1165f221234   2 months ago   13.3kB
 REPOSITORY    					镜像的仓库源
 TAG       						镜像的标签
 IMAGE ID						镜像的ID
 CREATED        				镜像的创建时间
 SIZE							镜像的大小

  -a, --all             		列出所有的镜像
  -q, --quiet          			只显示镜像的ID



**docker search 搜索镜像**
  
 docker search mysql
 NAME                              DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
 mysql                             MySQL is a widely used, open-source relation…   10834     [OK]   

 docker search --help
 -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

只搜索STARS 大于3000的

 docker search mysql -f=STARS=3000
 NAME      DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
 mysql     MySQL is a widely used, open-source relation…   10834     [OK]       
 mariadb   MariaDB Server is a high performing open sou…   4085      [OK]  

下载镜像 mysql

docker pull mysql

删除镜像

docker rmi 
docker rmi -f 容器id										根据image id删除
docker rmi -f 容器id 容器id 容器id						删除多个容器
docker rmi -f $(docker images -aq)						删除所有容器

容器的基本命令

下载镜像 CentOS

docker pull centos
docker pull tomcat

启动容器 CentsOS

docker run -it centos  /bin/bash
docker run --name tomcatstarttest -d -p 8080:8080 tomcat:latest
//--name是给容器起名字 -d 是代表后台运行 -d后面代表的是运行那个镜像,镜像的名字
docker ps 			查看启动的容器

在这里插入图片描述

退出容器
exit				退出已启动的容器
ctrl+Q+P			退出不停止已启动的容器

在这里插入图片描述
查看历史启动过的容器

docker ps -a

在这里插入图片描述
删除容器

	docker rm 容器ID			删除指定的容器ID(不能删除正在运行的容器,如果需要强制删除,rm -f)
	docker rm -f						删除所有的容器
	docker ps -a -q|xargs docker rm 	删除所有的容器

启动和停止容器的操作

docker start 容器id		启动容器
docker restart 容器id	重启容器
docker stop 容器id		停止当前正在运行的容器
docker kill 容器id		强制退出

其他常用命令

docker logs -f -t -tail 	查看容器日志
	显示日志
	-tf 		显示日志
	--tail 10	显示日志条数(最新的10条)
docker logs -tf --tail 10 容器id				查看容器最新的10条日志

查看容器中的进程信息

docker top 容器id		

查看镜像的源数据

docker inspect 容器id

进入当前正在运行的容器

docker exec -it 容器id /bin/bash

进入容器正在执行的终端

docker attach 容器id

从容器里拷贝文件到主机上

docker cp 容器id:容器内路径 目的的主机路径

在这里插入图片描述

Docker 安装并启动elasticsearch

docker run -d --name elasticsearch01 -p 9200:9200 -p 9300:9300 -e "discovery.type.type=single-node" elasticsearch:7.6.2

这样的启动会对服务造成卡顿,占用很大的内容空间
建议在启动前设置ES的内存限制

例如 (测试)

docker run -d --name elasticsearch01 -p 9200:9200 -p 9300:9300 -e "discovery.type.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch:7.6.2	

查看内存使用命令

docker stats 容器ID(不带id会查到所有在运行中的容器的内存使用情况)

在这里插入图片描述
测试ES 9200

curl localhost:9200

在这里插入图片描述

镜像原理-联合文件系统

原文

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

UnionFS(联合文件系统)

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

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

镜像加载原理

docker 的镜像实际上由一层一层的文件系统组成,这种层级的文件系统就是联合文件系统(UnionFS)。
采用分层结构最大的一个好处就是共享资源,比如有多个镜像都从相同的base镜像构建而来,那么宿主机只需要在磁盘上保存一份base镜像,同时内存中也只需要加载一份base镜像,就可以为所有容器服务了
在这里插入图片描述

在这里插入图片描述

Docker镜像联合文件系统分层,Tomcat为例

在这里插入图片描述

原文作者理解

在这里插入图片描述

镜像原理-分层理解

在这里插入图片描述
查看容器的细节

docker image inspect redis:latest

layers分层

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
特点:Docker 镜像都是只读的,当容器启动时,一个新的可写层被加载到镜像的顶部,这一层就是我们常说的容器层,容器层之下的都叫做镜像层

Commit镜像

docker commit和git commit 原理类似

docker commit -m="提交描述信息" -a="作者" 容器id 目标镜像名:[TAG(版本号)]
实际测试

1、启动一个容器

docker run -it -p 8080:8080 tomcat      // 只是启动tomcat
docker exec -it 容器id /bin/bash			// -it交互模式     交互模式中需要给个路径

cd webapps 

2、官方默认webapps下是没有文件的

3、自己拷贝文件到webapps下

cd ..  			// 回到tomcat目录
ap -r webapps.dist/* webapps      // 拷贝webapps.dist里所有文件到 webapps中

4、开始commit到本地镜像里

docker commit -m="add webapps app" -a="feirou" d8eceb6175b6 tomcat02:1.0  // d8eceb6175b6 容器id

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值