介绍

docker是容器技术,在容器技术没有出现之前,我们都是使用虚拟机技术
虚拟机:虚拟化技术,在Windows中安装一个VM,通过这个软件可以虚拟出一台或者多台电脑,笨重
docker:也是一种虚拟化技术

vm:Linux centos原生镜像(一个电脑),隔离,需要开启多个虚拟机,几个G大小,启动需要几分钟
docker:隔离,镜像(最核心的环境4M大小)小巧,运行镜像就可以了,几M、KB 秒级启动
1、先删除之前安装的docker版本
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
4、更新yum软件包索引
yum  makecache fast
5、安装最新docker
yum install docker-ce docker-ce-cli containerd.io
6、启动docker
systemctl start docker
#查询版本
docker version
7、运行helloworld查看
docker run hello-world

8、查看一下下载的helloworld镜像

9、设置国内镜像源,

创建 /etc/docker/daemon.json文件

{"registry-mirrors": ["http://hub-mirror.c.163.com"]
}
systemctl restart docker.service

国内加速地址有:

Docker中国区官方镜像
https://registry.docker-cn.com

网易
http://hub-mirror.c.163.com

ustc
https://docker.mirrors.ustc.edu.cn

中国科技大学
https://docker.mirrors.ustc.edu.cn

底层原理

docker是怎么工作的

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

Docker为什么比VM快?

1、Docker有着比虚拟机更少的抽象层.
2、docker利用的是宿主机的内核,vm需要是Guest Os.
所以说,新建一个容器的时候,docker不需要想虚拟机一样重新加载一个操作系统内核,避免引导。虚拟机是加载Guest O5,分钟级别的,而docker是利用宿主机的操作系统吗,省略了这个复杂的过程,秒级!

常用命令

镜像命令

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

# docker images
解释标签:
REPOSITORY  镜像的仓库源
TAG         镜像的标签
IMAGE ID    镜像的id
CREATED     镜像的创建时间
SIZE        镜像的大小
#可选项
-a,--all             列出所有镜像
-q, --quiet        只显示镜像的ID

docker search 搜索镜像

可选项-f, --filter filter
docker search mysql -f=stars=3000  #根据收藏数来搜索

docker pull 下载镜像

docker rmi 删除镜像
docker rmi -f  容器ID  #删除指定ID的镜像
docker rmi -f  容器ID 容器ID 容器ID #删除多个容器ID
docker rmi -f  $(docker images -aq)  #删除所有的镜像

容器命令

说明:有了镜像才可以创建容器,下载一个centos镜像测试学习

docker pull centos

新建容器并启动

docker run [可选参数] image#参数说明
--name="Name" 容器名字 Tomcat1 Tomcat2,用来区分容器
-d             后台方式运行
-it           使用交互方式运行,进入容器查看内容
-p            指定容器的端口  -p   8080:8080-p  ip:主机端口:容器端口-p  主机端口:容器端口(常用)-p  容器端口容器端口
-P         随机指定容器端口
# 测试,启动并进入容器
[root@localhost /]#docker run -it centos /bin/bash
[root@e4edddd54575 /]#  ls  #查看容器内的centos,基础版本,很多命令不完善#从容器中退出
[root@e4edddd54575 /]# exit

列出所有运行的容器

#docker ps 命令
空 #列出当前正在运行的容器
-a #列出当前正在运行容器+历史运行过的容器
-n=? #显示最近创建的容器,例如 -n=1,最新创建的容器
-q #只显示容器的编号

退出容器

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

删除容器

docker rm 容器id        #删除指定的容器
docker rm  -f  $(docker ps -aq)  #删除所有的容器

启动和停止容器

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

其他常用命令

后台启动容器

# docker run -d 镜像名
[root@localhost /]# docker run -d centos
#问题docker ps,发现centos停止了
#常见的坑,docker日容器使用后运行,就必须要一个前台进程,docker发现没有应用,就会自动停止

显示日志

docker logs -tf --tail 容器id
-tf            #显示日志
--tail num     #要显示日志条数
[root@localhost /]# docker logs -tf --tail 10 dedfd8878

查看容器中进程信息

#命令  docker top 容器id
[root@localhost /]# docker top dce898989

查看镜像元数据

#命令
docker inspect 容器id[root@localhost /]# docker inspect dce343434

进入当前正在运行的容器

#我们通常容器都是使用后台方式运行的,需要进入容器,修改一些配置
#命令1
docker exec -it 容器id  bashShell#测试
[root@localhost /]# docker exec -it dce787878 /bin/bash#命令2
docker attach 容器id#测试
[root@localhost /]# docker attach dce343434docker exec   #进入容器后开启一个新的终端,可以在里面操作
docker attach # 进入容器正在执行的终端,不会启动新的进程

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

docker cp 容器id:容器内路径  目的主机路径[root@localhost /]# docker cp b4343343:/home/test.java /home

练习

docker 安装Nginx

1、搜索镜像 search 建议大家去dockerhub搜索,可以看到帮助文档
2、下载镜像 pull
3、运行测试
#查看本地镜像

[root@localhost wyh]#docker images

#运行Nginx

[root@localhost wyh]# docker run -d --name nginx01 -p 3344:80 nginx
[root@localhost wyh]# docker ps

#测试

[root@localhost wyh]# curl localhost:3344

#进入容器

[root@localhost wyh]# docker exec -it nginx01 /bin/bash

#查看配置文件

root@343434323:/#whereis nginx

问题:每次改动Nginx配置文件,都需要进入容器内部,我们可以在容器外部提供一个映射路径,达到容器修改文件名,容器内部就可以自动修改,-v 数据卷!

安装Tomcat

docker pull tomcat
docker run -d -p 3355:8080 --name tomcat01 tomcat

#测试访问没有问题
#进入容器

docker exec -it tomcat01 /bin/bash

#发现问题,1、Linux命令少了,2、没有webapps,阿里云镜像的原因,默认是最小的镜像,所有不必要的都剔除,保证最小可运行的环境

部署es+kibana

#es 暴露的端口很多
#es 十分的耗内存
#es 的数据一般需要放置到安全目录,挂载
#启动elasticsearch

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

#查看CPU状态

docker stats

#增加内存限制,修改配置文件 -e 环境配置修改

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

将镜像发布到dockerhub上

1、登录docker

2、发布

镜像原理和联合文件系统

镜像是什么

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

docker镜像加载原理

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

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

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

commit镜像

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

测试
启动Tomcat
默认的Tomcat webapps下没有文件。拷贝基本文件进去

docker学习1--docker基础学习相关推荐

  1. 医用计算机基础学习心得,计算机基础学习心得.doc

    计算机基础学习心得 计算机基础学习心得一:计算机基础学习心得 当今社会,到处充满机会与挑战.知识是我们面对这一切的筹码,而计算机知识则更为重要.如何在本科函授这样一种形式下,学好计算机课程,这是摆在我 ...

  2. 学习笔记-零基础学习人工智能(0)

    学习笔记-零基础学习人工智能(0) 背景 规划 背景 作为物理专业的大龄青年,由于兴趣爱好想学习下人工智能.主要感兴趣的方向是对抗样本生成.自己也做了一些了解,但是发现千头万绪,不懂的东西太多.为了梳 ...

  3. Python学习教程(Python学习路线_Python基础学习教程_Python视频教程):初学者新手怎样快速入门Python

    Python学习教程(Python学习路线_Python基础学习教程_Python视频教程):初学者新手怎样快速入门Python? 人生苦短,我用Python!!!短短几个字,现在在各大学习类平台随处 ...

  4. Scala学习(一)--Scala基础学习

    Scala基础学习 摘要: 在篇主要内容:如何把Scala当做工业级的便携计算器使用,如何用Scala处理数字以及其他算术操作.在这个过程中,我们将介绍一系列重要的Scala概念和惯用法.同时你还将学 ...

  5. 全栈学习之CSS基础学习

    CSS基础学习 1. CSS导入方式 行内样式 内部样式 外部样式 2. 三种基本选择器 2.1 标签选择器 2.2 类选择器 2.3 id选择器 2.4 关联 3. 层次选择器 3.1 后代选择器 ...

  6. ①小白学习Linux之基础学习★

    Linux基础学习√ 1.centos6和7的变化 1.1.文件系统 1.2.防火墙.内核版本.默认数据库 1.3.时间同步,修改时区,修改语言 1.4.主机名 1.5.网络服务管理 1.6.网络设置 ...

  7. 愣头青法学习openstack——零基础学习openstack的建议

    由于收到很多人的私信,问我如何高效快速学习openstack,今天在这里就给大家分享一下我的openstack学习心得. 我也是刚入门学习openstack的小黑,所以先写几句话放在前面,应该很合逻辑 ...

  8. 【中间件学习】Fluentd基础学习教程

    文章目录 引言 安装 推荐的安装方式: 其他安装方式的采坑 测试验证 学习过程 1. 先学习一个简单的采集示例: 2. 学习一下fluentd相关的关键字配置. 日志接入实践 总结 引言 Fluent ...

  9. 素描学习入门零基础学习静物素描的几种方法

    在讲之前我们先来简单了解一下静物素描的定义:"静物写生是对形体质感表现的一种形式,主要利用笔触.线条和调子和明暗关系的变化." 比如在画坚硬物体-铁骑.陶瓷.玻璃等的时候,线条要严 ...

  10. 新人学习笔记-分布式基础学习-分布式文件系统

    所谓分布式,在这里,很狭义的指代以Google的三驾马车,GFS.Map/Reduce.BigTable为框架核心的分布式存储和计算系统.通常如我一样初学的人,会以Google这几份经典的论文作为开端 ...

最新文章

  1. CF803C Maximal GCD
  2. Filling Shapes
  3. react构建_您应该了解的有关React的一切:开始构建所需的基础知识
  4. 第一范式,第二范式,第三范式,BCNF范式理解
  5. hdu 1018 Big Number(n!求位数)
  6. linux用户登录失败,锁定用户
  7. C语言中的undefined behavior系列(2)-- lifetime of object
  8. JDBC的API与德鲁伊Druid连接池配置
  9. php独立环境的安装:apache php mysql
  10. 跑通LSD-SLAM
  11. Django 安装使用
  12. 最详细!!!软考:初级程序员—思维导图
  13. 正确重启计算机的方法,电脑不定时自动重启的处理方法
  14. matlab2016对硬件要求,matlab2016b配置libsvm的各中坑及解决办法
  15. 苹果小企业项目申请App Store Small Business Program
  16. 云计算数据中心运维管理的五大重点
  17. python常用英语词汇(持续更新)
  18. python如何学 Python主要能做什么
  19. Qlist+QMap+QVariant使用
  20. 物联网到底为什么这么火?

热门文章

  1. 产品设计实战(上):Axure9绘制高保真原型
  2. 每节课都是一个项目 手把手用STM32打造联网气象站-9-用LCD显示中文英文和图片
  3. 第四篇:UE4视角切换节点,Possess和Set View Target With Blend的区别
  4. android flex 开发环境搭建,Android6.0 MTK6737 开发环境搭建 · Younix’s Studio
  5. QQ群排名,引流营销做推广的好方法
  6. JVM调优-GC基本原理和调优关键分析
  7. 空间句法高阶技能sDNA
  8. Java_定义一个圆类,提供输出面积和周长的方法,定义一个测试类使用
  9. TextView 悬挂缩进实现及解析
  10. netty案例,netty4.1中级拓展篇六《SpringBoot+Netty+Elasticsearch收集日志信息数据存储》