文章内容来自黑马Java,侵权请联系删除

一、认识Docker

Docker是一个快速交付应用、运行应用的技术:

  1. 可以将程序及其依赖、运行环境一起打包为一个镜像,可以迁移到任意Linux操作系统
  2. 运行时利用沙箱机制形成隔离容器,各个应用互不干扰
  3. 启动、移除都可以通过一行命令完成,方便快捷

Docker如何解决依赖的兼容问题的?

  • 将应用的Libs(函数库)、Deps(依赖)、配置与应用一起打包
  • 将每个应用放到一个隔离容器去运行,避免互相干扰

Docker如何解决不同系统环境的问题?

  • Docker将用户程序与所需要调用的系统(比如Ubuntu)函数库一起打包
  • Docker运行到不同操作系统时,直接基于打包的库函数,借助于操作系统的Linux内核来运行

Docker和虚拟机的差异:

  • docker是一个系统进程;虚拟机是在操作系统中的操作系统
  • docker体积小、启动速度快、性能好;虚拟机体积大、启动速度慢、性能一般

镜像和容器

  • 镜像(Image):Docker将应用程序及其所需的依赖、函数库、环境、配置等文件打包在一起,称为镜像。
  • 容器(Container):镜像中的应用程序运行后形成的进程就是容器,只是Docker会给容器做隔离,对外不可见。

Docker架构

Docker是一个CS架构的程序,由两部分组成:

  • 服务端(server):Docker守护进程,负责处理Docker指令,管理镜像、容器等
  • 客户端(client):通过命令或RestAPI向Docker服务端发送指令。可以在本地或远程向服务端发送指令

二、镜像基本操作

  • docker images
  • docker rmi
  • docker pull
  • docker push
  • docker save
  • docker load

容器基本操作

docker run命令的常见参数有哪些?

  • –name:指定容器名称
  • -p:指定端口映射
  • -d:让容器后台运行

查看容器日志的命令:

  • docker logs
  • 添加 -f 参数可以持续查看日志

查看容器状态:

  • docker ps 添加-a参数查看所有状态的容器

删除容器:

  • docker rm 不能删除运行中的容器,除非添加 -f 参数

进入容器:

  • 命令是docker exec -it [容器名] [要执行的命令]

exec命令可以进入容器修改文件,但是在容器内修改文件是不推荐的

数据卷

数据卷(volume)是一个虚拟目录,指向宿主机文件系统中的某个目录。

数据卷的作用:

  • 将容器与数据分离,解耦合,方便操作容器内数据,保证数据安全

数据卷操作:

  • docker volume create
  • docker volume ls
  • docker volume inspect
  • docker volume rm
  • docker volume prune

挂载数据卷

我们在创建容器时,可以通过 -v 参数来挂载一个数据卷到某个容器目录

  • -v volumeName: /targetContainerPath

如果容器运行时volume不存在,会自动被创建出来

文件挂载的方式

  1. docker run的命令中通过 -v 参数挂载文件或目录到容器中:

    ①-v volume名称:容器内目录

    ②-v 宿主机文件:容器内文件

    ③-v 宿主机目录:容器内目录

  2. 数据卷挂载与目录直接挂载的区别

    ①数据卷挂载耦合度低,由docker来管理目录,但是目录较深,不好找

    ②目录挂载耦合度高,需要我们自己管理目录,不过目录容易寻找查看

三、镜像自定义

镜像的结构

镜像是分层结构,每一层称为一个Layer

  • BaseImage 层:包含基本的系统函数库、环境变量、文件系统
  • Entrypoint:入口,是镜像中应用启动的命令
  • 其它:在BaseImage基础上添加依赖、安装程序、完成整个应用的安装和配置

Dockerfile

Dockerfile就是一个文本文件,其中包含一个个的指令(Instruction),用指令来说明要执行什么操作来构建镜像。每一个指令都会形成一层Layer。

指令 说明 示例
FROM 指定基础镜像 FROM centos:6
ENV 设置环境变量,可在后面指令使用 ENV key value
COPY 拷贝本地文件到镜像的指定目录 COPY ./mysql-5.7.rpm /tmp
RUN 执行Linux的shell命令,一般是安装过程的命令 RUN yum install gcc
EXPOSE 指定容器运行时监听的端口,是给镜像使用者看的 EXPOSE 8080
ENTRYPOINT 镜像中应用的启动命令,容器运行时调用 ENTRYPOINT java -jar xx.jar
  1. Dockerfile的本质是一个文件,通过指令描述镜像的构建过程
  2. Dockerfile的第一行必须是FROM,从一个基础镜像来构建
  3. 基础镜像可以是基本操作系统,如Ubuntu。也可以是其他人制作好的镜像,例如:java:8-alpine

四、DockerCompose

  • Docker Compose可以基于Compose文件帮我们快速的部署分布式应用,无需一个个微服务去构建镜像和部署;
  • Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。

五、Docker镜像仓库

镜像仓库( Docker Registry )有公共的和私有的两种形式:

  • 公共仓库:例如Docker官方的 Docker Hub,国内也有一些云服务商提供类似于 Docker Hub 的公开服务,比如 网易云镜像服务、DaoCloud 镜像服务、阿里云镜像服务等。
  • 除了使用公开仓库外,用户还可以在本地搭建私有 Docker Registry。企业自己的镜像最好是采用私有Docker Registry来实现。

总结:

  1. 推送本地镜像到仓库前都必须重命名(docker tag)镜像,以镜像仓库地址为前缀
  2. 镜像仓库推送前需要把仓库地址配置到docker服务的daemon.json文件中,被docker信任
  3. 推送使用docker push命令
  4. 拉取使用docker pull命令

【微服务】认识Docker及其基本操作相关推荐

  1. 中间件和微服务,Docker以及原生云架构的关系

    IT世界的技术更新非常迅速.一年前我曾写过一篇关于:微服务是否是企业服务总线和其他中间件的死亡魔法.本文章是之前文章的后续以及关于微服务.容器和原生云架构的中间件关系讨论的更新.各种规模的企业正在以令 ...

  2. re.containerbase.startinternal 子容器启动失败_微服务架构:基于微服务和Docker容器技术的PaaS云平台架构设计(微服务架构实施原理)...

    走过路过不要错过 点击蓝字关注我们 基于微服务架构和Docker容器技术的PaaS云平台建设目标是给我们的开发人员提供一套服务快速开发.部署.运维管理.持续开发持续集成的流程.平台提供基础设施.中间件 ...

  3. curl查看swift状态命令_微服务之——docker高级命令

    微服务之--docker高级命令 一.映射端口 1.先下载 nginx 镜像 [root@localhost ~]# docker pull nginx:1.12.2 1.12.2: Pulling ...

  4. 基于微服务和Docker的PaaS云平台架构设计

    基于微服务架构和Docker容器技术的PaaS云平台建设目标是给我们的开发人员提供一套服务快速开发.部署.运维管理.持续开发持续集成的流程.平台提供基础设施.中间件.数据服务.云服务器等资源,开发人员 ...

  5. docker的文件流处理_迁移到微服务与DevOps,微服务和Docker容器的全面实用指南

    迁移到微服务与DevOps,改变软件开发效能! 一如既往,技术行业正处于巨大的转变之中,物联网.软件定义网络以及软件即服务(SaaS)仅为其中几例.由于这些创新,对能够改进应用开发和部署过程的平台和架 ...

  6. consul命令行查看服务_Go语言微服务架构实战:第十三节 微服务管理--Docker安装及运行consul节点...

    微服务管理--Docker安装及运行consul节点 搭建集群 在真实的生产环境中,需要真实的部署consul集群.在一台机器上想要模拟多台集群部署的效果,有两种方案:一种是借助虚拟机,另一种是借助容 ...

  7. 基于微服务和Docker容器技术的PaaS云平台架构设计

    本文讲的是基于微服务和Docker容器技术的PaaS云平台架构设计[编者的话]在系统架构上,PaaS云平台主要分为微服务架构.Docker容器技术.DveOps三部分,这篇文章重点介绍微服务架构的实施 ...

  8. Docker基础篇 - (六)Docker 网络Spring Boot微服务打包Docker镜像

    ⑦ Docker 网络 7.1 理解Docker0 清空下前面的docker 镜像.容器 # 删除全部容器 [root@cVzhanshi tomcat-diy]# docker rm -f $(do ...

  9. [转]微服务与Docker

    在Docker上运行微服务 在过去的两年里,微服务架构已经成了非常热门的名词,它出现在很多论坛.视频.演讲中.作为一种更灵活.可靠.开放的架构,其应用实践也越来越多.近日,来自七牛云存储.DaoClo ...

  10. 小D课堂 - 新版本微服务springcloud+Docker教程_汇总

    小D课堂 - 新版本微服务springcloud+Docker教程_1_01课程简介 小D课堂 - 新版本微服务springcloud+Docker教程_1_02技术选型 小D课堂 - 新版本微服务s ...

最新文章

  1. ubuntu右键在当前位置打开终端
  2. BC div2补题以及 复习模除 逆元__BestCoder Round #78 (div.2)
  3. 排序下---(冒泡排序,快速排序,快速排序优化,快速排序非递归,归并排序,计数排序)
  4. jeecg 分布式部署附件共享问题(linux下配置共享磁盘nfs服务)
  5. Firewalld防火墙转换成Iptables
  6. 索尼高清影视技术学院参观观后感
  7. 阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第5节 线程池_2_线程池的代码实现...
  8. JAVA微信小程序购物商城系统毕业设计 开题报告
  9. 微信公众服务号如何快速申请注册并认证开通支付功能
  10. 企业IT管理员IE11升级指南【4】—— IE企业模式介绍
  11. 少年中国说 梁启超
  12. 男人40岁后的健康生活方式
  13. python用matplotlib作图时,x轴为时间轴,如何让x轴每隔几个点显示一次?
  14. ContentProvider使用Demo
  15. 利达主机联网接线端子_利达主机怎么编辑中文 利达主机接线端子说明
  16. ES7-ES11新特性汇总
  17. 咸鱼APP产品使用报告体验分析
  18. libcurl 库的编译
  19. 5G时代金融服务如何升级?网易云信助力银行数字化建设
  20. 使用kinect2.0做动作识别和重量颜色识别

热门文章

  1. 关于jsp中用css无法显示背景图片的问题
  2. 鲸鱼出动支持Eth 2.0,单日向存款合约地址存入10万枚ETH
  3. Github 创建分支
  4. 每日一道 LeetCode (51):盛最多水的容器
  5. JAVA程序入门--基础知识(运算规则)
  6. C#关于JArray和JObject封装JSON对象
  7. 【c/c++】Old Bill
  8. 对比学一下HTML和Latex的常用输入输出——图像与表格
  9. 一个月把热门关键词做到百度第3经验分享
  10. 通过计算机培养学生的应用能力,计算机教学如何培养学生的应用能力