文章目录

  • 1.Docker三要素
  • 2.Docker的是怎么工作的?
  • 3.Docker run 。。。的运行流程
  • 4.Docker对比虚拟机的优势
  • 5.Docker安装(centos7)
  • 6.Docker命令
  • 7、Docker镜像
  • 8.容器数据卷(相当于redis的RDB和AOF)
  • 9.DockerFile
  • 10.Docker的常用安装
  • 11. 提交镜像到阿里云远程仓库
  • 12 真实项目应用

1.Docker三要素

镜像、容器、仓库

2.Docker的是怎么工作的?

首先,Docker是一个Client-Server结构的系统。
1. Docker有一个守护进程,运行在主机服务端,通过Socket连接客户端。
2.我们在客户端(Client)上执行 docker run … 命令时,守护进程会接受客户端的run命令,并管理运行在主机服务端的容器。

3.Docker run 。。。的运行流程

1.Docker先在本机寻找该镜像,如果有,直接通过该镜像生成容器实例运行
2.如果本机没有该镜像,去/etc下的配置中的仓库地址中找该镜像,并下载到本地,以该镜像为模板生成容器实例运行。

4.Docker对比虚拟机的优势

1.虚拟机因为有一套完整的虚拟化资源,和win10操作系统之间还有一个Hypervisor接口,在启动时过慢,略显笨重,与虚拟化技术耦合度高
2.docker去掉了Hypervisor,不需要实现硬件虚拟化,运行在docker容器上的程序直接都是实际物理机的硬件资源,因此在cpu和内存利用率上docker更有优势。
3.docker不用加载操作系统,比虚拟机快,docker直接利用宿主机的操作系统,而虚拟机有一套自己的操作系统,每次启动时,虚拟机需要加载自己的操作系统,时间是分钟级别的,docker启动时不需要加载操作系统,所以是秒级。

5.Docker安装(centos7)

在centos7上安装docker
1.确定你是centos7以上版本

cat /etc/redhat-release

2.yum安装gcc相关

yum -y install gcc
yum -y install gcc-c++

3.卸载旧版本(以前没装就不需要)

sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine
如果不是root权限需要加sudo,是root不需要加

4.安装需要的软件包

sudo yum install -y yum-utils  device-mapper-persistent-data lvm2  //安装工具

5.配置镜像仓库

(以下二选一)
sudo yum-config-manager \--add-repo \https://download.docker.com/linux/centos/docker-ce.repo    //从国外网站安装(不推荐,推荐使用阿里云的)sudo yum-config-manager \--add-repo \http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo    //从阿里云安装(推荐,速度快)

6.更新yum软件包索引(下载更快)

yum makecache fast

7.安装Docker CE社区版

yum -y install docker-ce

8.启动docker

systemctl start docker

9.测试docker

docker version
docker run hello-word

10 配置镜像加速(从阿里云或者网易云上下载镜像)
(1)建立文件夹
(2)编辑daemon.json,内容为:

(3)加载配置文件
(4)重启docker

11.卸载docker

6.Docker命令

1.帮助命令

docker version  / docker info           显示docker的版本,以及docker的容器、镜像等信息
docker --help                           docker的帮助命令,可以查询docker操作所需命令

2.镜像命令

(1)查找本地镜像

docker images                            列出本地主机镜像
docker images   -a                      列出本地所有镜像(包含中间映像层)
docker images   -q                      只显示镜像ID
docker images centos                    列出centos镜像

(2)搜索、拉取、删除镜像

docker search tomcat                     从Docker Hup上搜索tomcat镜像(并非阿里云)
docker pull tomcat                      从阿里云上拉tomcat镜像(如果配置了阿里云)不加:版本号默认是最新版
docker rmi -f tomcat                    删除tomcat本地镜像
docker rmi -f romcat nginx              删除多个本地镜像
docker rmi -f $(docker images -qa)     删除全部本地镜像

(3)新建并启动容器(交互式/守护式容器)

-----交互式容器
docker run -it --name mycentos01  centos        通过镜像centos创建并启动容器,并为容器命名为mycentos01
docker run -it 【IMAGE_ID】                       通过镜像id创建并启动容器
两者区别: 有无名字   -i:以交互方式启动容器  -t:启动后弹出当前容器的伪终端-----守护式容器
docker run -d centos
交互式、守护启动的区别:交互式终端会变成centos的伪终端,守护式只是返回一串字符,终端还是linux的

(4)显示docker中的正在运行的容器容器进程 ,等同于ps -ef

docker ps                    显示docker中所有运行中的容器进程
docker ps -a                    是查看所有容器(包括停止的)
docker ps -l                    显示最近创建的一个容器
docker ps -n 32                 显示最近创建的32个容器
docker ps -q                    (静默模式) 只显示容器编号
docker ps -lq                   显示最近创建的一个容器的容器编号

(5)退出容器

exit                             容器停止并退出
ctrl+P+Q                          容器不停止退出容器不停止退出后,想要再进入怎么办?
docker attach 容器ID              由linux终端又变成了容器伪终端
docker exec -it 容器ID ls -l /tmp   在linux终端操作容器内部信息,终端不变,不进入伪终端exec比arrach功能强大,因为他可以在外边对容器进行操作!

(6)启动/重启 容器(容器已经建立,没建立的话用run)

docker start 【容器id或容器名】         启动容器
docker restart 【容器id或容器名】       重启容器

(7)停止容器/强制停止容器

docker stop【容器id/容器名】                    温柔停止
docker kill 【容器id/容器名】                      强制停止

(8)删除容器(与删除镜像的rmi 相差一个i)

docker rm 容器ID                               删除容器(只能删除已停止的容器)
docker rm -f 容器ID                       强制删除容器
docker rm -f  $(docker ps -a -q)            一次性删除多个容器

(9)查看docker容器日志

docker logs -f --tail=100 容器id                  动态打印docker的100行log日志

(10)查看容器内运行状态监控(和linux的top一样)

docker top 容器id

(11)查看容器内部细节

docker  inspect 容器Id                  以json串的形式显示这个容器的所有细节

(12)把容器中的文件复制到宿主机里

docker cp 容器ID:/tmp/yum.log  /root   复制容器/tmp目录下的yum.log文件到linux的root目录下

(13)提交容器副本使之成为一个新的镜像

docker commit -m=“提交的描述信息” -a=“作者” 容器ID 要创建的目标镜像名:版本
docker commit -m="del tomcat docs"  -a="zy"  容器ID  tomcat1:1.2

7、Docker镜像

docker镜像实际上是由一层层的文件系统组成,被称为文件联合系统UnionFS,
例如一个tomcat镜像,由很多东西层层包裹,在docker镜像的最底层是bootfs,这一层与典型的linux是一致的,包含boot加载器和内核。在bootfs之上,就是rootfs,包含的就是/dev、/proc、/bin等标准目录和文件,rootfs就是不同操作系统的发行版,如 Centos、Ubuntn等。如下图所示:

tomcat镜像400多MB,就是因为他由一层层的文件系统堆叠而成。
docker镜像(镜像层)只能读,当容器启动时,一个新的可写层被加载到镜像的顶部(容器层)。

为什么docker采用这种联合文件系统?
最大的一个好处就是:共享资源
比如:有多个镜像都从相同的base镜像构建而来,宿主机只需要保存一份base镜像,同时内存种也只需加载一份base镜像,就可以为所有的容器服务,而且镜像的每一层都会被共享。
体现:第一次下载镜像时,会很慢,第二次第三次就变快了,因为有base镜像被加载到内存中了

8.容器数据卷(相当于redis的RDB和AOF)

作用:
1.容器数据的持久化
2.容器间共享数据
操作:使用 -v 绑定linux主机目录与容器目录的数据通道

----启动普通容器
docker run -it 镜像名----启动带数据卷的容器
docker run -it  -v /宿主机据对路径目录:/容器内目录 镜像名
docker run -it -v /mydate:/container centos
解释:在主机的mydate目录和centos容器的container目录建立数据卷通道,共享数据
作用:无论从主机还是容器上修改绑定目录下的数据,另一边也会同步刷新,保证数据一致----启动带权限的数据卷容器
docker run -it  -v /宿主机据对路径目录:/容器内目录:ro 镜像名
同上,不过加入了 ro :read only
作用:只能单方面主机修改更新数据,centos容器只可以查看,没有修改权限

容器和主机间存在数据共享,容器和容器间同样存在数据共享

容器间传递共享命令(--volumes -from)
docker run -it --name doc2 --volumes -from doc1 centos666(镜像名)
doc1为父容器 , doc2为子容器
无论删除修改子容器/父容器,容器间数据改变的共享功能会一直持续下去,直到删除所有相关联的容器!!

9.DockerFile

构建镜像的方式有两种:一种是基于容器制作,另一种就是通过Dockerfile。Dockerfile其实就是我们用来构建Docker镜像的源码,当然这不是所谓的编程源码,而是一些命令的组合,只要理解它的逻辑和语法格式,就可以编写Dockerfile了。

简要概括Dockerfile的作用:它可以让用户个性化定制Docker镜像。因为工作环境中的需求各式各样,网络上的镜像很难满足实际的需求。
  
  构建容器数据卷一种可以通过 -v 命令来构建,出于可移植和分享的考虑,用-v 主机目录:容器目录这种方法只能实现主机和虚拟机一对一的容器卷通道,如果要创建多个通道,可以通过DockerFile 命令构建多个数据卷通道
dockefile使用volume命令操作,构建多个容器卷通道,如下所示

8.1docker执行dockerfile的大致流程

1.docker从基础镜像运行一个容器
2.执行一条命令对容器做修改
3.执行类似docker commit操作提交一个新的镜像层
4.docker再基于刚提交的镜像运行一个新的容器
5.执行dockerfile的下一条指令直到所有指令都执行完成

8.2dockerfile、docker镜像、docker容器的区别

从应用软件角度来看
1.dockerfile是软件的原材料
2.docker镜像是软件的交付品
3.docker容器则认为是软件的运行状态
dockerfile面向开发,docker镜像成为交付标准,docker容器则涉及部署和运维,三者缺一不可,合力充当docker体系的基石

8.3 dockerfile各种保留字的解释


8.4 dockerfile构建镜像案例(以centos为例)
我们从阿里云上拉下来的centos镜像,是精简版,本身不带vim、ifconfig等命令,通过dockerfile的编写,可以构建一个具备这些命令的centos镜像!

步骤
1.编写dockerfile:

------自定义带 vim、ifconfig的dockerfile
FROM centos   //继承阿里云最基本的centos
MAINTAINER  zhb<1149513559@qq.com>     //作者信息ENV MYPATH  /usr/local
WORKDIR $MYPATH       //设置默认工作区为usr/localRUN yum -y install vim    //安装vim编辑器
RUN yum -y install net-tools   //安装ifconfigEXPOSE 80    //向外暴露80端口
CMD /bin/bash  //容器启动时要运行的命令

2.构建镜像

docker build -f /mydocker/Dockerfile2 -t mycentos:1.3
build                           ---构建镜像
-f                              ---file 后边跟dickerfile路径
/mydocker/Dockerfile2           ---Dockerfile的完整路径
-t                              ---tag 后边跟镜像的名字和版本
mycentos:1.3                    ---新镜像的名字和版本号

执行构建后,可以看到一条条的命令执行完毕,构建mycentos1.3镜像成功!

3.通过镜像构建容器并运行

docker run -it mycentos:1.3

8.5 dockerfile中CMD和ENTRYPOINT的区别和联系
联系:都是指定一个容器启动时要运行的命令
区别:Dockerfile中可以有多个CMD指令,但只有一个生效,CMD会被dokcer run后边的参数替换
例如:

正确的tomcat启动方式
dcoker run -it -p 8888:8080 tomcat
错误的tomcat启动方式
---tomcat 后边加了 ls -l会直接取代romcat的dockerfile中的启动命令,这样执行完发现tomcat并没有启动
dcoker run -it -p 8888:8080 tomcat ls -l

ENTRYPOINT docker run 后的命令会传递给ENTRYPOINT,形成一个新的命令组合
8.6 自定义一个tomcat
1.编写dockerfile

在centos的基础上,增加了tomcat、jdk等,通过add或copy添加到容器中!

2.通过dockerfile构建build镜像

docker  build -t zhbtomcat9   //这里没有加-f的原因是:在当前dockerfile目录下执行命令可以不用加

3.通过镜像运行容器

-d:以守护模式运行tomcat
-v:建立数据卷,以后项目放在本机就会自动共享到容器

10.Docker的常用安装

在使用docker时,一般不会自定义安装tomcat这些,想用的话直接从阿里云上拉取即可使用,总体步骤:
1.搜索镜像
2.拉取镜像
3.查看镜像
4.启动镜像
5.停止容器
6.移除容器

9.1安装tomcat

9.2 安装mysql
拉取:docker pull mysql:5.6
运行容器:

docker run -p 3306:3306 --name gulimallmysql
-v /mydate/mysql/log:/var/log/mysql
-v /mydate/mysql/date:/var/lib/mysql
-v /mydate/mysql/conf:/etc/mysql
-e MYSQL_ROOT_PASSWORD=root
-d mysql:5.7


接下来就可以在容器中的mysql上新建表,插入数据。win10的数据库图形化工具也可以连接到虚拟机机的mysql,共享容器中的表数据

mysql数据备份
把容器中的数据备份到本地zzyy。。。。

9.3 安装redis
拉取:docker pull redis:3.2
运行容器:并启动redis服务

mkdir -p /mydate/redis/conf
touch -p /mydate/redis/conf/redis.conf

docker run -p 6379:6379 --name gulimallredis
-v /mydate/redis/date:/date
-v /mydate/redis/conf/redis.conf:/etc/redis/redis.conf
-d redis redis-server /etc/redis/redis.conf


连接redis服务

docker exec -it  redis的ID redis-cli

即可进入redis
此时redis的数据并不是持久化额的,也就是当重启redis后,redis中的数据哦都会丢失
需要在主机的redis.conf中使用aof持久化方式

appendonly yes

9.4 安装ElasticSearch:7.4.2

 //下载 elasticsearch 镜像docker pull elasticsearch:7.4.2
//下载 kibana 镜像
docker pull kibana:7.4.2

新建两个本地挂载文件

mkdir -p /mydata/elasticsearch/config   //新建本地config文件挂载es中的config文件
mkdir -p /mydata/elasticsearch/data //新建本地data文件挂载es中的data文件
echo "http.host: 0.0.0.0">>/mydata/elasticsearch/config/elasticsearch.yml  //允许外网访问es

启动容器
–name elasticsearch:启动容器命名为elasticsearch
9200:es端口号
9300:集群通信端口
-e “discovery.type=single-node”:以单节点模式启动
-e ES_JAVA_OPTS="-Xms64m -Xmx128m":限制es最大占用空间
-v。。。 : 挂在本地文件到容器中的es
-d elasticsearch:7.4.2 :后台启动elasticsearch:7.4.2容器

docker run --name elasticsearch -p 9200:9200 -p 9300:9300 \
-e “discovery.type=single-node” \
-e ES_JAVA_OPTS="-Xms64m -Xmx128m" \
-v /mydata/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /mydata/elasticsearch/data:/usr/share/elasticsearch/data \
-v /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
-d elasticsearch:7.4.2

查看日志(启动后本机访问可能出错)

docker logs elasticsearch

出现 **java.nio.file.AccessDeniedException
发现是挂载在外部的文件,由于权限不足导致,如图

修改权限

 chmod -R 777 /mydata/elasticsearch/


重启容器即可访问

9.5 安装Kibana:7.4.2

docker run --name kibana -e ELASTICSEARCH_HOSTS=http://9.236.37.100:9200 -p 5601:5601 -d kibana:7.4.2

9.6 安装nginx:1.0

//这里可以直接 run (如果发现没有这个镜像,会自动下载镜像后再run 启动容器)
docker run -p 80:80 --name nginx -d nginx:1.10

以下为商城项目的操作(容器上边已启动)

进入 /mydata  ,创建nginx文件夹
mkdir  nginx//把niginx容器的配置文件 复制到 本地的nginx中
docker container cp nginx:/etc/nginx .  (注意后边的 .)//删除刚才启动的nginx容器//重新启动带有挂载文件的nginx
docker  run -p 80:80 --name nginx \
-v /mydata/nginx/html:/usr/share/nginx/html \
-v /mydata/nginx/logs:/var/log/nginx \
-v /mydata/nginx/conf:/etc/nginx \
-d nginx:1.10

11. 提交镜像到阿里云远程仓库

1.先根据容器创建一个新的本地镜像

docker commit -a zhb -m “new centos" c15646548b87  mynewcentos
-a:  作者
-m  提交信息说明
后边跟容器id ,最后边跟新镜像的名字

2.将本地镜像提交到阿里云

12 真实项目应用

①停止项目容器:docker stop point
②构建镜像:docker build -t “point:v2020070203” .
③运行容器:docker run -it -d -p 8081:8081 --name point point:v2020070203

Docker的使用、底层原理及常用软件docker下载相关推荐

  1. 【实用】windows常用软件及下载地址

    windows常用软件及下载地址 无损剪辑软件-losslesscut 官网:https://github.com/mifi/lossless-cut/releases FTP软件-filezilla ...

  2. Docker之镜像底层原理

    目录 一.镜像是什么 二.镜像的底层原理 三.增加镜像功能案例 3.1.从hub上下载ubuntu镜像到本地并成功运行 3.2.安装vim 3.3.commit一个新镜像 3.4.启动新镜像并和原来的 ...

  3. docker 6 docker运行的底层原理

    docker是一个client-server结构的系统,docker守护进程运行在主机上,然后通过socket连接从客户端访问,守护进程从客户端接收命令并管理运行在主机上的容器,是一个运行时的环境,就 ...

  4. Windows下的Java开发环境搭建+常用软件(含下载传送门)

    电脑硬盘坏掉了,要重新搭建开发环境- 文章目录 0x00 前言 0x01 环境 0x02 开发相关软件下载 0x03 其他常用软件 0x00 前言 如果是新电脑,个人建议的软件安装步骤是 谷歌浏览器- ...

  5. JAVA程序员常用软件整理下载

    ********为了大家学习方便,特意整理软件下载如下:************* Java类软件: ------------------------------- JDK7.0:http://pan ...

  6. 生活学习常用软件介绍下载

    potplayer 非常轻便的视频播放器,功能强大 Calibre 用于各种电子书格式转换,mobi转epub

  7. C#基础------常用软件官方下载

    类别 名称 下载地址 Microsoft   Micro$oft的一些东西   Windows Vista http://download.windowsvista.com/dl/preview/rc ...

  8. 学习办公常用软件分享下载

    学习类 1_Vc 6.0 2_Matlab 3_Python.Pycharm 4_数据库(Mysql.MongDB) 5_虚拟机搭建(VitrualBox及Centos .Vmware-works.X ...

  9. Docker圣经:大白话说Docker底层原理,6W字实现Docker自由

    说在前面: 现在拿到offer超级难,甚至连面试电话,一个都搞不到. 尼恩的技术社群(50+)中,很多小伙伴凭借 "左手云原生+右手大数据"的绝活,拿到了offer,并且是非常优质 ...

最新文章

  1. C/C++ 头文件作用
  2. jasper(二):制作饼状图和柱状图
  3. LeetCode算法题10:DFS/BFS-扫雷游戏
  4. 数论基础之快速幂(详细教程)
  5. php使用curl下载指定大小的文件
  6. 00075_BigInteger
  7. SpringMVC拦截器-知识小结
  8. Notepad++中用正则表达式匹配中文
  9. vue移动端html5页面根据屏幕适配的四种解决方法
  10. C#正则表达式开源工具
  11. onvif device manager 找不到ipc_Qt音视频开发32-Onvif网络设置
  12. WinAPI: CreatePen - 建立画笔
  13. final、finally 和 finalize的区别
  14. STL之map容器的详解
  15. 抖音记事本代码html,抖音记事本vbs弹窗表白代码怎么弄的?附教程
  16. class文件不能反编译
  17. FPGA verilog基本外设练习(五)-串口通信
  18. 用nmap查看局域网存活的主机
  19. 7款家用智能摄像头横评:小米、乐橙、TP-LINK、海康威视、360、智汀、华为
  20. 基岩版刷铁傀儡机制和Java_我的世界:刷铁机没有傀儡只刷猫?作为基岩版玩家,你的痛我都懂...

热门文章

  1. Java 面向对象:static的理解
  2. String常用方法大全(深入源码层面分析)
  3. MySql 5.7 json数据格式 增删改查 操作 (不定时更新)
  4. T-SQL:毕业生出门需知系列(七)
  5. Emacs sql-mode 自动连接数据库 (当前仅支持MySQL)
  6. 设计模式学习笔记——命令模式
  7. xcache安装配置
  8. 证监会依法对4宗案件作出行政处罚
  9. 麻雀虽小五脏俱全的Vue拉勾项目,看看应该有帮助
  10. k8s与监控--解读prometheus监控kubernetes的配置文件