Docker个人学习总结


前言

学习视频 ->

链接: KuangStudy.
出处作者: 狂神说Java


一、Docker 概述 ?

Docker 为什么会出现?
一款产品: 诉求-需求-开发-上线;多套环境 应用环境,应用配置
配置环境是一件十分麻烦的事情。每一个机器都要部署环境(业务量增加 集群环境。)
传统: 开发生成jar。 运维人员搭建环境发布
开发环境 与 生产环境的不同。
Docker 给以上问题提出了解决方案。
Docker 思想
Docker 的核心思想来自于集装箱,打包装箱。箱子相互隔离。Docker 通过隔离机制将服务器利用到机制。
容器内应用直接运行在宿主机的内容。容器自己是没有内核的。也没有虚拟我们的硬件。所以更轻便了。
小巧。启动秒级。
DevOps(开发、运维)
应用更快的交付和部署
更便捷的升级和扩缩容
更简单的系统运维
更高效的利用计算机资源

二、Docker 的组成

1.镜像 images

docker 镜像就好比一个目标。可以通过这个目标来创建容器服务。
tomcat镜像-> run -> 容器(提供服务)
镜像可以创建多个容器(最终的项目运行和服务运行是运行在容器中的)

2.容器 container

Docker利用容器技术。独立运行一个或者一组应用,通过镜像来创建。
启动,停止,重启 基本命令
容器可以理解成一个简易 阉割版的Linux系统

3.仓库 repository

仓库就是存放镜像的地方。
仓库分为公有仓库和私有仓库
Docker Hub 是 国外的


三、底层原理

1.Docker 是怎样工作的

Docker是一个Client-Server结构的系统,Docker的守护进程运行在主机上。通过Socket从客户端访问!
Docker-Server接收到Docker-Client的指令,就会执行这个命令!

2.Docker 为什么比 VM 快

1、docker有着比虚拟机更少的抽象层。由于docker不需要Hypervisor实现硬件资源虚拟化,运行在docker容器上的程序直接使用的都是实际物理机的硬件资源。因此在CPU、内存利用率上docker将会在效率上有明显优势。
2、docker利用的是宿主机的内核,而不需要Guest OS。
GuestOS: VM(虚拟机)里的的系统(OS);
HostOS:物理机里的系统(OS);
因此,当新建一个 容器时,docker不需要和虚拟机一样重新加载一个操作系统内核。然而避免引导、加载操作系统内核是个比较费时费资源的过程,当新建一个虚拟机时,虚拟机软件需要加载GuestOS,新建过程是分钟级别的。而docker由于直接利用宿主机的操作系统,则省略了这个复杂的过程,因此新建一个docker容器只需要几秒钟。

四、Docker常用命令

1.命令

帮助命令:
		docker version			查看版本
		docker info					显示dacker的系统信息,包括镜像和容器的数量
		docker --help				帮助命令
镜像命令:
					REPOSITORY				镜像的仓库源
					TAG								镜像的标签
					IMAGE ID 					镜像的ID
					CREATED						镜像的创建时间
					SIZE							镜像的大小
					NAME              镜像名称
					DESCRIPTION       镜像说明            
					STARS  						点赞数量  
					OFFICIAL  				是否是官方的
					AUTOMATED					是否自动构建的
		docker images				查看本机上的主机上所有镜像
						-a					列出所有镜像
						-q					只显示镜像ID
		docker search				搜索
						--filter=STARS=3000

    	docker pull 				下载 : 分层下载,docker Image 的核心,联合文件系统
						:tag				版本 如果不写 tag 默认就是 latest				
		docker rmi					删除
						-f					指定删除
						-f $(docker images -qa)  删除所有
				
容器命令
		docker run 					启动容器
						--name="Name"		容器名称,用来区分容器
						-d							后台方式运行
						-it							使用交互方式运行,进入容器查看内容
						-P							指定容器端口
								-p: 主机端口:容器端口
								-p: 容器端口
								-p ip: 主机端口:容器端口
								容器端口
						-p							随机指定端口
		docker ps 					查看正在运行的容器
						-a							正在运行的容器+会带出历史运行过的容器
						-n=?						显示最近创建的容器
						-q							只显示容器的编号
		exit								容器停止并且退出
		control + q + p     容器不停止且退出
		docker attach 容器ID   	进入容器
		docker rm 容器ID				删除容器 不能删除正在运行的容器
		docker rm -f $(docker ps -aq)			强制删除全部容器 包括正在运行
		docker ps -qa | xargs docker rm   删除全部容器
				
		docker start 容器ID					启动一个容器
		docker restart 容器ID				重启一个容器
		docker stop 容器ID					停止一个容器
		doeker kill 容器ID 					杀掉一个容器
	
docker 后台启动 常见问题
	命令: docker run -d mysql 
	命令: docker ps 
	发现mysql容器停止了。
	docker 容器使用后台运行,就必须要有一个前台进程。docker发现没有应用。就会自动停止
	nginx 容器启动后 发现自己没有提供服务就会立即停止。就是没有程序了。
	
查看日志
	docker logs -ft --tail 10 容器ID
	shell 脚本写入日志 docker run -d mysql /bin/sh -c "wheil true;do echo shangqing;sleep 1;done"
查看容器中进程信息
	docker top 容器ID
查看镜像中的元数据
	docker inspect 容器ID
进入当前正在运行的容器
	docker exec -it 容器ID /bin/bash : 进入容器后开启一个新的终端
	docker attach 容器ID : 进入容器正在执行的终端
从容器内拷贝文件到宿主机
	docker cp 容器ID:容器内路径  主机路径
portainer 工具

docker commit 提交一个镜像
	-a	作者
	-m	描述

2.Docker可视化 portainer

docker run -d -p 8080:9000 \
--restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true
portainer/portainer

五、Docker镜像

1.镜像是什么

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

UnionFs (联合文件系统)

我们下载的时候看到一层层的下载就是这个。
UnionFs(联合文件系统):Union文件系统(UnionFs)是一种分层、轻量级并且高性能的文件系统,他支
持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(
unite several directories into a single virtual filesystem)。Union文件系统是
Docker镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应
用镜像。
特性
一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系
统叠加起来,这样最终的文件系统会包含所有底层的文件和目录。

Docker镜像加载原理

docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统UnionFS。
boots(boot file system)主要包含 bootloader和 Kernel, bootloader主要是引导加 kernel,
Linux刚启动时会加bootfs文件系统,在 Docker镜像的最底层是 boots。这一层与我们典型的
Linux/Unix系统是一样的,包含boot加載器和内核。当boot加载完成之后整个内核就都在内存中了,此时内存的使用权已由 bootfs转交给内核,此时系统也会卸载bootfs。
rootfs(root file system),在 bootfs之上。包含的就是典型 Linux系统中的/dev,/proc,/bin,/etc等标准目录和文件。 rootfs就是各种不同的操作系统发行版,比如 Ubuntu,Centos等等。

平时我们安装进虚拟机的CentOS都是好几个G,为什么Docker这里才200M?

对于个精简的OS,rootfs可以很小,只需要包合最基本的命令,工具和程序库就可以了,因为底层直接用Host的kernel,自己只需要提供rootfs就可以了。由此可见对于不同的Linux发行版, boots基本是一致的, rootfs会有差別,因此不同的发行版可以公用bootfs.
虚拟机是分钟级别,容器是秒级!

2.分层理解

我们可以去下载一个镜像,注意观察下载的日志输出,可以看到是一层层的在下载 。
最大的好处,我觉得莫过于资源共享了!比如有多个镜像都从相同的Base镜像构建而来,那么宿主机只需在磁盘上保留一份base镜像,同时内存中也只需要加载一份base镜像,这样就可以为所有的容器服务了,而且镜像的每一层都可以被共享。
查看镜像分层的方式可以通过docker image inspect 命令
Docker 镜像都是只读的,当容器启动时,一个新的可写层加载到镜像的顶部!
这一层就是我们通常说的容器层,容器之下的都叫镜像层!,

3.commit镜像

docker commit 提交容器成为一个新的副本
# 命令和git原理类似
docker commit -m=
"描述信息"
-a=
"作者" 容器id 目标镜像名:[TAG]

4.Dockerfile

dockerfile 是用来构建docker镜像的文件!命令参数脚本!
构建步骤:
1、 编写一个dockerfile文件
2、 docker build 构建称为一个镜像
3、 docker run运行镜像
4、 docker push发布镜像(DockerHub 、阿里云仓库)
基础知识:
1、每个保留关键字(指令)都是必须是大写字母
2、执行从上到下顺序
3、#表示注释
4、每一个指令都会创建提交一个新的镜像曾,并提交!

# DockerFile常用指令
FROM 
# 基础镜像,
一切从这里开始构建
MAINTAINER 
# 镜像是谁写的, 姓名+邮箱
RUN 
# 镜像构建的时候需要运行的命令
ADD 
# 步骤,tomcat镜像,这个tomcat压缩包!添加内容 添加同目录
WORKDIR 
# 镜像的工作目录
VOLUME 
# 挂载的目录
EXPOSE 
# 保留端口配置
CMD 
# 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代。
ENTRYPOINT 
# 指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD 
# 当构建一个被继承 DockerFile 这个时候就会运行ONBUILD的指令,触发指
令。
COPY 
# 类似ADD,将我们文件拷贝到镜像中
ENV 
# 构建的时候设置环境变量!
# 1.编写Dockerfile文件
vim mydockerfile-centos
FROM centos
MAINTAINER cheng<1204598429@qq.com>
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN yum -y install vim
RUN yum -y install net-tools
EXPOSE 80
CMD echo $MYPATH
CMD echo "
-----end----
"
CMD /bin/bash
# 2、通过这个文件构建镜像
# 命令 docker build -f 文件路径 -t 镜像名:[tag] .
docker build -f mydockerfile-centos -t mycentos:0.1 .
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值