docker(四)docker
docker
1.虚拟化技术:将不同的资源和逻辑单元剥离,形成松耦合的关系的技术(gartner)
{将一个真实的机器进行虚拟地分割,然后分割出来的部分可以独立使用}
虚拟化,是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机上可以运行不同的操作系统,并且应用程序都可以相互独立的空间内运行而互不影响,显著提高计算机的工作效率。
虚拟化实现了用软件的方法重新划分和定义了IT资源,可以实现IT资源的动态分配、灵活调度、跨域共享,提高IT资源的利用率,使资源能够真正成为社会基础设施,服务于各行各业中灵活多变的应用需求。
虚拟化的目的就是要对IT基础设施进行简化,可以简化对资源以及对资源管理的访问
2.docker的优点
容器技术也能实现在一台硬件机器上虚拟出多个容器,每个容器中都可以放置一个互相隔离的服务器。所以,我们知道,容器其实也采用的是虚拟的方式进行,只不过,同等条件下,容器技术会比虚拟机技术效率要高,但是容器中没有包含独立的操作系统,虚拟机中包含独立的操作系统,所以每台虚拟机中的功能会比每个容器的功能要多些,正因为虚拟机带有很多东西,所以占的系统资源要大,效率要低些。
所以容器具有简明、轻快等特点
个人感觉
我觉得代码的环境分为运行环境和开发环境。运行环境不能直接修改,项目的代码越来越多的情况下,开发环境也会越来越不便测试。因此会有虚拟机这样的技术出现。但是虚拟机是模拟不同的系统环境,是在大的方面对项目代码测试。docker强调容器这一概念。就比如软件结构中的组件,docker容器中只运行其中一个组件的功能。因此测试代码问题会更加的精确。
3.docker的内部三大核心组件和运行步骤
3.1docker images
dockers images也叫做docker镜像,镜像一般是只读模板,用户不可以直接对其进行写入操作。使用镜像为了更好的保证数据的安全。
镜像就相当于java中的类,这个类可以自己写需要后面的dockerfile技术
3.2docker containers
dockers容器,容器与容器之间相互隔离,互不干扰容器可以进行开始,启动,删除,停止的操作。开发者快速地吧自己的应用打包到容器中进行发布
容器相当于是java中的对象
3.3docker register
docker仓库,下载上传镜像
这个就是相当于Java的类库了,当然了可以这么理解,但是之间肯定会有相应的区别。
下载
https://docs.docker.com/install/linux/docker-ce/centos/官网下载linux版本的docker-ce。
注意下载社区版的。跟着教程一步一步来就行。
docker 命令
systemctl enable docker开机自启动
/etc/docker/daemon.json 改镜像地址
$ docker ps // 查看所有正在运行容器
$ docker stop containerId // containerId 是容器的ID
$ docker ps -a // 查看所有容器
$ docker ps -a -q // 查看所有容器ID
$ docker stop $(docker ps -a -q) // stop停止所有容器
$ docker rm $(docker ps -a -q) // remove删除所有容器
Docker基本命令:
0.开启一个已停止的容器
docker start images-id
1.从DockerHub上检索(查询)镜像:docker search [options --no-trunc:完整镜像描述 -s:列出收藏不小于指定的镜像 --automated:只列出automated build类型的镜像]
2.拉取镜像 docker pull images_name[:TAG(版本号,若未指定,默认为latest(最新版)]
3.列出本地镜像 docker images [options -a 列出本地所有的镜像(含中间映像层)-q 只显示镜像id --digests 显示镜像的摘要信息 --no-trunc:显示完整的镜像信息]
选项说明(
REPOSITORY:表示镜像的仓库源
TAG:镜像的标签(版本)
IMAGEID:镜像ID
CREATED:镜像创建时间
SIZE:镜像大小
)
4.删除镜像
docker rmi -f images_name(or images_id)
docker rmi -f images_name1:TAg images_name2:TAG 多个删除
docker rmi -f $(docker images -wq) 删除全部镜像
删除出现多个删除:有多层
删除镜像时遇到:[No such container]
service docker stop
rm -rf /var/lib/docker
sudo service docker restart(重启docker服务)
注:
docker service docker stop(关闭docker服务)
docker service docker start(开启docker服务)
5.镜像变更历史
docker history images_id或者名称
6. docker save -o 镜像名称[Tag]
将镜像保存到本地磁盘
7.https://blog.csdn.net/magerguo/article/details/72514813/
将docker挂载目录
8.run命令基本参数
-p :指定容器暴露的端口
-v:给同期挂载存储卷,挂载到容器的某个目录
-d:指定容器运行于前台还是后台,默认为false(运行一个带命令在后台不断执行的容器,不直接展示容器内部信息)
-i:打开stdin用于控制台交互
-t:分配tty设备,可以支持终端登陆,默认为false
--rm:清除foreground容器,设置在容器退出时自动清理容器内部的文件系统,对detached容器无效,默认为true(容器在他的进程结束后姨妈自动删除)
-it:这是两个参数,一个是 -i:交互式操作,一个是 -t 终端。我们这里打算进入 bash 执行一些命令并查看返回结果,因此我们需要交互式终端。
9.退出容器
exit
CTRL +p+q
10.将容器挂到后台,docker run -dit openjdk /bin/bash
docker exec -it 933 bash
docker run -it -v /home/mushui/test_java:/home/code openjdk /bin/bash(将宿主机的目录挂载到虚拟机)
home/service/dockers-tomcat
11.docker 相关信息查询
容器中查看容器Linux版本
进入容器后,cat /etc/issue
查看docker容器或镜像的详细信息
docker inspect 容器id
容器占用查询
ps -ef|grep 容器id
root 7358 12956 0 09:14 ? 00:00:00 containerd-shim -namespace moby -workdir (示例输出)
top -p 7358(pid 进程的id)
参数说明:
PID:进程的ID
USER:进程所有者
PR:进程的优先级别,越小越优先被执行
NInice:值
VIRT:进程占用的虚拟内存
RES:进程占用的物理内存
SHR:进程使用的共享内存
S:进程的状态。S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值为负数
%CPU:进程占用CPU的使用率
%MEM:进程使用的物理内存和总内存的百分比
TIME+:该进程启动后占用的总的CPU时间,即占用CPU使用时间的累加值。
COMMAND:进程启动命令名称
12.docker system df
查看是否有容器,镜像在运行