docker学习1--docker基础学习
介绍
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基础学习相关推荐
- 医用计算机基础学习心得,计算机基础学习心得.doc
计算机基础学习心得 计算机基础学习心得一:计算机基础学习心得 当今社会,到处充满机会与挑战.知识是我们面对这一切的筹码,而计算机知识则更为重要.如何在本科函授这样一种形式下,学好计算机课程,这是摆在我 ...
- 学习笔记-零基础学习人工智能(0)
学习笔记-零基础学习人工智能(0) 背景 规划 背景 作为物理专业的大龄青年,由于兴趣爱好想学习下人工智能.主要感兴趣的方向是对抗样本生成.自己也做了一些了解,但是发现千头万绪,不懂的东西太多.为了梳 ...
- Python学习教程(Python学习路线_Python基础学习教程_Python视频教程):初学者新手怎样快速入门Python
Python学习教程(Python学习路线_Python基础学习教程_Python视频教程):初学者新手怎样快速入门Python? 人生苦短,我用Python!!!短短几个字,现在在各大学习类平台随处 ...
- Scala学习(一)--Scala基础学习
Scala基础学习 摘要: 在篇主要内容:如何把Scala当做工业级的便携计算器使用,如何用Scala处理数字以及其他算术操作.在这个过程中,我们将介绍一系列重要的Scala概念和惯用法.同时你还将学 ...
- 全栈学习之CSS基础学习
CSS基础学习 1. CSS导入方式 行内样式 内部样式 外部样式 2. 三种基本选择器 2.1 标签选择器 2.2 类选择器 2.3 id选择器 2.4 关联 3. 层次选择器 3.1 后代选择器 ...
- ①小白学习Linux之基础学习★
Linux基础学习√ 1.centos6和7的变化 1.1.文件系统 1.2.防火墙.内核版本.默认数据库 1.3.时间同步,修改时区,修改语言 1.4.主机名 1.5.网络服务管理 1.6.网络设置 ...
- 愣头青法学习openstack——零基础学习openstack的建议
由于收到很多人的私信,问我如何高效快速学习openstack,今天在这里就给大家分享一下我的openstack学习心得. 我也是刚入门学习openstack的小黑,所以先写几句话放在前面,应该很合逻辑 ...
- 【中间件学习】Fluentd基础学习教程
文章目录 引言 安装 推荐的安装方式: 其他安装方式的采坑 测试验证 学习过程 1. 先学习一个简单的采集示例: 2. 学习一下fluentd相关的关键字配置. 日志接入实践 总结 引言 Fluent ...
- 素描学习入门零基础学习静物素描的几种方法
在讲之前我们先来简单了解一下静物素描的定义:"静物写生是对形体质感表现的一种形式,主要利用笔触.线条和调子和明暗关系的变化." 比如在画坚硬物体-铁骑.陶瓷.玻璃等的时候,线条要严 ...
- 新人学习笔记-分布式基础学习-分布式文件系统
所谓分布式,在这里,很狭义的指代以Google的三驾马车,GFS.Map/Reduce.BigTable为框架核心的分布式存储和计算系统.通常如我一样初学的人,会以Google这几份经典的论文作为开端 ...
最新文章
- CF803C Maximal GCD
- Filling Shapes
- react构建_您应该了解的有关React的一切:开始构建所需的基础知识
- 第一范式,第二范式,第三范式,BCNF范式理解
- hdu 1018 Big Number(n!求位数)
- linux用户登录失败,锁定用户
- C语言中的undefined behavior系列(2)-- lifetime of object
- JDBC的API与德鲁伊Druid连接池配置
- php独立环境的安装:apache php mysql
- 跑通LSD-SLAM
- Django 安装使用
- 最详细!!!软考:初级程序员—思维导图
- 正确重启计算机的方法,电脑不定时自动重启的处理方法
- matlab2016对硬件要求,matlab2016b配置libsvm的各中坑及解决办法
- 苹果小企业项目申请App Store Small Business Program
- 云计算数据中心运维管理的五大重点
- python常用英语词汇(持续更新)
- python如何学 Python主要能做什么
- Qlist+QMap+QVariant使用
- 物联网到底为什么这么火?
热门文章
- 产品设计实战(上):Axure9绘制高保真原型
- 每节课都是一个项目 手把手用STM32打造联网气象站-9-用LCD显示中文英文和图片
- 第四篇:UE4视角切换节点,Possess和Set View Target With Blend的区别
- android flex 开发环境搭建,Android6.0 MTK6737 开发环境搭建 · Younix’s Studio
- QQ群排名,引流营销做推广的好方法
- JVM调优-GC基本原理和调优关键分析
- 空间句法高阶技能sDNA
- Java_定义一个圆类,提供输出面积和周长的方法,定义一个测试类使用
- TextView 悬挂缩进实现及解析
- netty案例,netty4.1中级拓展篇六《SpringBoot+Netty+Elasticsearch收集日志信息数据存储》