6. Docker 配置阿里镜像加速服务

6.1 docker 运行流程

6.2 docker配置阿里云镜像加速

查看自己的镜像加速地址(链接直达):https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

  • 访问阿里云登录自己账号查看docker镜像加速服务
# 在自己的Linux上运行:
sudo mkdir -p /etc/docker               # 在自己机器的/etc下创建docker文件夹# 往 /etc/docker/daemon.json 中写入下面这段话
(直接运行下面命令即可,[""]里面写自己的阿里云镜像加速链接)sudo tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://7iw3ne9w.mirror.aliyuncs.com"]
}
EOF# 重新启动自己的docker(执行下面那两段代码)
sudo systemctl daemon-reload
sudo systemctl restart docker
  • 验证docker的镜像加速是否生效
# 执行 docker info 命令查看镜像加速是否生效[root@localhost ~]# docker info         ..........127.0.0.0/8Registry Mirrors:'https://lz2nib3q.mirror.aliyuncs.com/'                # 在最后能找到这个镜像是阿里云说明配置成功Live Restore Enabled: falseProduct License: Community Engine

7.Docker的入门应用

7.1 docker 的第一个程序

docker run hello-world

[root@localhost ~]# docker run hello-worldHello from Docker!
This message shows that your installation appears to be working correctly.To generate this message, Docker took the following steps:1. The Docker client contacted the Docker daemon.2. The Docker daemon pulled the "hello-world" image from the Docker Hub.(amd64)3. The Docker daemon created a new container from that image which runs theexecutable that produces the output you are currently reading.4. The Docker daemon streamed that output to the Docker client, which sent itto your terminal.To try something more ambitious, you can run an Ubuntu container with:$ docker run -it ubuntu bashShare images, automate workflows, and more with a free Docker ID:https://hub.docker.com/For more examples and ideas, visit:https://docs.docker.com/get-started/

8.常用命令

8.1 辅助命令
# 1.安装完成辅助命令docker version           --------------------------  查看docker的信息docker info                  --------------------------  查看更详细的信息docker --help               --------------------------  帮助命令
8.2 Images 镜像命令
# 1.查看本机中所有镜像docker images       或   docker image ls     --------------------------  列出本地所有镜像-a          列出所有镜像(包含中间映像层)-q         只显示镜像iddocker images 和 docker images -a 效果一样docker images -q     ----------------- 只显示所有镜像的iddocker images 镜像名   --------------- 代表只查看指定的镜像名的相关镜像docker images -q 镜像名:版本号   ------  查看指定版本的镜像的iddocker images -q 镜像名 或 docker images 镜像名 -q ---   查看本地仓库的指定镜像的所有版本的id注:(有时候)相关命令只写镜像不写版本号代表是最新版本 latest# 2.搜索镜像(搜索 docker hub 上相关镜像,但是不能展示有哪些版本,查看版本还是到 docker hub 看)docker search [options] 镜像名     ------------------- 去dockerhub上查询当前镜像-s 指定值     列出收藏数不少于指定值的镜像--no-trunc      显示完整的镜像信息例如:  docker search redis     -------------------- 只能看当前镜像是否存在,不能列出版本
# 3.从仓库下载镜像docker pull 镜像名:版本号docker pull 镜像名     <========>    docker pull 镜像名:latest     下载最新版本例如: docker pull tomcat:8.0
注:docker hub上并不是有所有版本的,所以我们要先看看docker hub有没有相应版本# 4.删除镜像
正常删除:要求必须是没有运行过的镜像docker rmi 镜像名:版本号                             --------------------------  删除镜像docker rmi 镜像id                      --------------------------  删除镜像或docker image rm 镜像名:版本号   docker image rm 镜像id强制删除:在删除镜像的同时把对应的容器也删除docker rmi -f 镜像名:版本号docker rmi -f 镜像id    或docker image rm -f 镜像名:版本号 docker image rm -f 镜像id批量删除:docker image rm -f $(docker images tomcat -q)            -- 删除本地仓库指定镜像的所有版本docker image rm -f $(docker images tomcat -q)先查询tomcat相关的所有版本的id 再删除例如: docker rmi tomcat:9.0docker rmi tomcat      <=====>    docker rmi tomcat:latestdocker rmi -f hello-world
8.3 Contrainer 容器命令
# 1.运行容器docker run -d -p 宿主机端口:容器内端口 --name 指定容器名字 镜像名:版本号或docker run -d -p 宿主机端口:容器内端口 --name 指定容器名字 镜像id--name         容器名称                            --------->   别名为容器起一个名字-d                                                 --------->   启动守护式容器(在后台启动容器)-p             宿主机端口:容器内端口    --------->    将宿主机端口和容器端口做一个映射这些参数的顺序没有要求在docker中 容器id 和 容器名称 都是可以唯一标识一个容器的东西,所以容器名字和id都唯一在相关需要 容器id 的地方,只需要写 前几位id 就可以了,只要能 唯一标识 一个容器即可推荐:docker run -d -p 8082:8080 --name tomcat01 tomcat:8.0 后台启动+端口映射+指定容器名字不推荐:docker run tomcat:8.0                   直接启动,外部无法访问(不推荐)docker run -p  8080:8080 tomcat:8.0     端口映射docker run -p 8081:8080 -d tomcat:8.0   后台启动+端口映射docker run tomcat:8.0     这种方式直接运行容器,容器内的容器是无法访问的,容器相当于另一个操作系统,外部无法访问,操作系统级别的隔离,所以这种方式启动我们一般不会使用,我们应该让容器中的端口与宿主机的端口做一个映射才可以,在建立宿主机和容器之间的端口映射时,需要用到防火墙的一些东西,所以我们要记得把防火墙打开(容器运行的时候会自动把容器端口加到防火墙开放端口的列表里),如何建立映射:加上-p 参数注:宿主机的一个端口只能映射一个容器端口使用但是容器的一个端口可以映射宿主机的多个端口使用    1对多关系如果一个服务启动需要多个端口 -p 也是可以映射多个端口的  -p 15672:15672 -p 5672:5672一些例子:docker run -p  8080:8080 tomcat:8.0                     端口映射docker run -p  8081:8080 tomcat:8.0                     端口映射# 2.查看运行的容器docker ps                   --------    列出所有正在运行的容器docker ps -a      --------  查看正在运行和已经停止的容器(没运行过的不会显示)docker ps -q            --------  列出正在运行的容器的iddocker ps -a -q   --------  查看正在运行和已经停止的容器的iddocker ps -aq     --------- 查看正在运行和已经停止的容器的id-a          正在运行的和历史运行过的容器-q            静默模式,只显示容器id# 3.停止|关闭|重启容器在docker中 容器id 和 容器名称 都是可以唯一标识一个容器的东西在相关需要 容器id 的地方,只需要写 前几位id 就可以了,只要能 唯一标识 一个容器即可docker start    容器名或者容器id    ------------- 开启容器(可以先查看历史运行过的容器然后启动)docker restart  容器名或者容器id    ------------- 重启容器docker stop     容器名或者容器id    ------------- 正常停止容器运行docker kill     容器名或者容器id    ------------- 立即停止容器运行docker pause    容器名或者容器id    ------------- 暂停(挂起)容器运行docker unpause  容器名或者容器id    ------------- 恢复暂停(挂起)的容器# 4.删除容器docker rm    容器id或容器名     --------------- 只能删除已经停止的容器docker rm -f 容器id或容器名     --------------- 正在运行的和已经停止的都能删除docker rm -f $(docker ps -aq)    ---------------- 删除所有容器# 5.查看容器内进程docker top 容器id或容器名 ------------------ 查看容器内的进程# 6.查看查看容器内部细节docker inspect 容器id或容器名      ------------------ 查看容器内部细节# 7.查看容器的运行日志docker logs [OPTIONS] 容器id或容器名  ------------------ 查看容器日志-f             ----实时监控日志,跟随最新的日志打印-t               ----加入时间戳--tail 数字  ----显示日志最后多少条docker logs  容器id或容器名          ------------------- 查看容器全部日志docker logs  -f    容器id或容器名    ------------------- 实时监控容器日志注:参数可以写多个# 8.进入容器内部docker exec -it  容器id或容器名  bash   -------  进入容器以容器中的bash窗口方式与容器进行交互进入容器后:exit                                                                  -------  退出容器所谓的镜像就是一个精简的Linux操作系统+一个服务,所以进入容器内部也是一个Linux操作系统,可以执行Linux命令例: docker exec -it  tomcat01  bashdocker exec [options] 容器id bash ------------------ 进入容器执行命令-i     以交互模式运行容器,通常与-t一起使用-t        分配一个伪终端    shell窗口   bash # 9.容器和宿主机之间复制文件资源路径可以是文件,也可以是文件夹容器名字和容器id都可以唯一标识容器,所以容器id处也可以换成容器名字路径写相对路径或者绝对路径都可以docker cp 宿主机资源路径 容器id:容器路径           ----------------   将宿主机复制到容器内部docker cp 容器id:容器中资源路径 宿主机目录路径  ----------------  将容器内资源拷贝到宿主机上例: 将容器内部资源拷贝到宿主机拷贝文件docker cp tomcat01:/usr/local/tomcat/RUNNING.txt /root 将容器内指定资源拷贝到宿主机指定目录拷贝文件夹docker cp tomcat01:/usr/local/tomcat/webapps /root将宿主机内部资源拷贝到容器内部拷贝文件docker cp /root/readme.txt tomcat01:/usr/local/tomcat拷贝文件夹也是同样的道理如何部署一个web项目:将war包放在tomcat容器的/usr/local/tomcat/webapps下docker cp /root/test.war tomcat01:/usr/local/tomcat/webapps# 10.数据卷(volum)实现与宿主机共享目录数据卷使用必须在容器首次启动时同时设置(也就是说,如果一个容器曾经启动过,再设置数据卷就不好使)docker run -d -p 8082:8080 --name tomcat01  -v 宿主机的路径:容器内的路径  tomcat:8.0 参数-v 宿主机的路径或任意别名:容器内的绝对路径 1. 使用绝对路径设置数据卷docker run -v 宿主机绝对路径:容器内绝对路径 ·······   这种方式宿主机和容器会相互影响docker run -v 宿主机绝对路径:容器内的路径:ro  ·······ro : read only 如果在设置数据卷时指定ro,代表日后容器内路径是只读的,代表只会让宿主机的变化影响到容器,容器不可写,容器不会影响到宿主机注意这种方式会将容器路径的原始内容全部清空,始终以宿主机路径为主2.  使用别名方式设置数据卷docker run -v 别名:容器内的路径 ·······根据别名创建的目录默认在 /var/lib/docker/volumes/docker run -v aaaa:/usr/local/tomcat/webapps ·······别名创建的目录在:   /var/lib/docker/volumes/aaaa宿主机路径 /var/lib/docker/volumes/aaaa/_data 和 容器内路径对应注意: 1.如果这个别名存在docker直接使用,别名不存在自动创建别名2.使用别名方式创建会保留容器内路径原始内容,前提别名对应路径不能存在内容注意:
1.如果是宿主机路径必须是绝对路径,宿主机目录会覆盖容器内目录内容
2.如果是别名则会在docker运行容器时自动在宿主机中创建一个目录,并将容器目录文件复制到宿主机中什么时候用到数据卷:日后但凡运行的服务它自身要持有数据的都要用到数据卷,比如:tomcat、mysql数据库、redis、es这些都要用到数据卷,日后如果容器被删除,数据还有,宿主机还有数据# 11.容器打包成新的镜像(日后在另一台机器运行的话直接运行打包好的镜像,数据也在里面)docker commit -m "描述信息" -a "作者信息"   容器id或者名称名称   打包的镜像名称:版本例:  docker commit -m "test project" -a "小陈"  tomcat01 tomcat-test:8.0 # 12.将镜像打包成tar包备份镜像:  docker save 镜像名:版本 -o 名称.tar例   docker save tomcat:8.0 -o tomcat-8.0.tar# 13.将打包成tar包的镜像还原成镜像恢复镜像:  docker load  -i  名称.tar例 docker load  -i   tomcat-8.0.tar

9.docker的镜像原理

9.1 镜像是什么?

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

9.2 为什么一个镜像会那么大?

镜像就是花卷

  • UnionFS(联合文件系统):

    Union文件系统是一种分层,轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下。Union文件系统是Docker镜像的基础。这种文件系统特性:就是一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录 。

9.3 Docker镜像原理

docker的镜像实际是由一层一层的文件系统组成。

  • bootfs(boot file system)主要包含bootloader和kernel,bootloader主要是引导加载kernel,Linux刚启动时会加载bootfs文件系统。在docker镜像的最底层就是bootfs。这一层与Linux/Unix 系统是一样的,包含boot加载器(bootloader)和内核(kernel)。当boot加载完,后整个内核就都在内存中了,此时内存的使用权已由bootfs转交给内核,此时会卸载bootfs。

  • rootfs(root file system),在bootfs之上,包含的就是典型的linux系统中的/dev,/proc,/bin,/etc等标准的目录和文件。rootfs就是各种不同的操作系统发行版,比如Ubuntu/CentOS等等。

  • 我们平时安装进虚拟机的centos都有1到几个GB,为什么docker这里才200MB?对于一个精简的OS,rootfs可以很小,只需要包括最基本的命令,工具,和程序库就可以了,因为底层直接使用Host的Kernal,自己只需要提供rootfs就行了。由此可见不同的linux发行版,他们的bootfs是一致的,rootfs会有差别。因此不同的发行版可以共用bootfs。

9.4 为什么docker镜像要采用这种分层结构呢?

最大的一个好处就是资源共享

  • 比如:有多个镜像都是从相同的base镜像构建而来的,那么宿主机只需在磁盘中保存一份base镜像。同时内存中也只需要加载一份base镜像,就可以为所有容器服务了。而且镜像的每一层都可以被共享。Docker镜像都是只读的。当容器启动时,一个新的可写层被加载到镜像的顶部。这一层通常被称为容器层,容器层之下都叫镜像层。

docker配置阿里云镜像加速、镜像和容器常用命令、docker镜像原理相关推荐

  1. docker配置阿里云镜像加速并更改镜像和容器的存储位置及常见的docker bug解决方法

    配置阿里云镜像加速 使用docker容器管理服务,总结下来就三个重要概念: 镜像,容器,数据卷.在之前的博文中我们已经讲述了如何在linux服务器上安装docker,并运行docker服务了. 这篇文 ...

  2. docker配置阿里云镜像加速(官方指南)

    使用docker容器管理服务,总结下来就三个重要概念: 镜像,容器,数据卷.在之前的博文中我们已经讲述了如何在linux服务器上安装docker,并运行docker服务了. 这篇文章将讲述在使用doc ...

  3. CentOS 安装docker配置阿里云镜像加速

    1.首先登陆root用户 2.如果之前有安装过先执行以下命令进行卸载 yum remove docker \ docker-client \ docker-client-latest \ docker ...

  4. docker 配置阿里云镜像加速

    阿里云地址:https://cr.console.aliyun.com/ windows: 点击镜像加速器 复制链接 docker setting >Daemon > registry 粘 ...

  5. Docker安装并配置阿里云镜像加速

    环境 基于Centos7安装Docker. 内核版本: 步骤 先卸载原本的Docker依赖 yum remove docker \docker-client \docker-client-latest ...

  6. 【docker】macOS系统下安装并配置阿里云镜像加速

    [docker]macOS系统下安装并配置阿里云镜像加速 提示:博主取舍了很多大佬的博文并亲测有效,分享笔记邀大家共同学习讨论 参考安装链接 文章目录 [docker]macOS系统下安装并配置阿里云 ...

  7. Docker Hub的使用以及配置阿里云镜像加速

    Docker Hub是一个由Docker公司负责维护的公共注册中心,它包含了超过15,000个可用来下载和构建容器的镜像,并且还提供认证.工作组结构.工作流工具(比如webhooks).构建触发器以及 ...

  8. ubuntu安装docker详细教程以及配置阿里云镜像加速

    ubuntu环境: Distributor ID: Ubuntu Description:    Ubuntu 16.04.2 LTS Release:        16.04 Codename: ...

  9. Docker安装卸载配置阿里云镜像加速超详细步骤

    环境准备 需要会点linux基础 (不会的话看一遍就会了) CentOS 7 (本文操作系统) 使用Xshell或其它软件连接远程服务器进行操作 环境查看 [root@iZwz98goak0taot3 ...

最新文章

  1. linux内置变量大全,Linux进阶之bash编程四(内置变量)
  2. Windows 2008-IIS 7.0-SSL操作大全
  3. IE8下submit表单没反应
  4. [BZOJ1503][NOI2004]郁闷的出纳员 无旋Treap
  5. 【JVM】浅谈双亲委派和破坏双亲委派
  6. python requests是什么_如何基于Python + requests实现发送HTTP请求
  7. 软件开发的“三重门”
  8. 前端学习笔记之 创建节点 与 添加节点案例
  9. Struts1.x系列教程(19):LookupDispatchAction类处理一个form多个submit
  10. c++ 11 新特性讲解大全
  11. 在C#中使用消息队列RabbitMQ
  12. bp神经网络预测模型实例,bp神经网络模型的建立
  13. WORD图标显示为白色解决办法
  14. 568A与568B 线序
  15. 【冬瓜哥归来】传统存储老矣,新兴存储能当大任否?
  16. [VC] 【Visual Studio】2005~2015中文完整旗舰版(附序列号)
  17. 智能无人避障系统学习路线
  18. 基于小程序开发的藏书馆
  19. VBS 常用总汇 (http://blog.csdn.net/sgear/article/details/1380223)
  20. [编程题]走斜线Java

热门文章

  1. 【方法】树莓派摄像头使用教程
  2. 基于全志A10\A20产品跑分测试结果对比
  3. python 下载道客巴巴文档
  4. 有关于操作系统下载的方法(免费)
  5. python调用微信客户端_python模拟微信客户端打开链接Python Logging 模块研究
  6. DOSBOX运行QBASIC和Turbo PASCAL
  7. 使用scaffold-eth脚手架快速构建 Web3 Dapp 应用
  8. Android 获取外接储存的设备路径(如挂载的U盘)
  9. TheBrain8破解方式
  10. 软文管家_怎么在新闻媒体上发稿?怎样才能联系权威媒体记者?