Docker的基本使用 2

简介: Docker的基本使用

3 . docker容器的数据卷

3.1 数据卷概念

思考:

• Docker 容器删除后,在容器中产生的数据也会随之销毁

• Docker 容器和外部机器可以直接交换文件吗?

• 容器之间想要进行数据交互?

数据卷

  • 数据卷是宿主机中的一个目录或文件
  • 当容器目录和数据卷目录绑定后,对方的修改会立即同步
  • 一个数据卷可以被多个容器同时挂载
  • 一个容器也可以被挂载多个数据卷

数据卷的作用

• 容器数据持久化

• 外部机器和容器间接通信

• 容器之间数据交换

3.2 配置数据卷

创建启动容器时,使用 –v 参数 设置数据卷

docker run ... –v 宿主机目录(文件):容器内目录(文件) ...

注意事项:

  1. 目录必须是绝对路径
  2. 如果目录不存在,会自动创建
  3. 一个容器可以挂载多个数据卷
  4. 一个数据卷也可以被多个容器挂载
  5. 两个容器可以挂载同一个容器

在宿主机中实现与容器目录的挂载:

在c1容器中的root目录下就可以看到data_container文件夹:如下图

同时我们我们回到宿主机中,可以在data文件夹下创建一个文件oldlu.txt ,可以发现在容器中也会生成oldlu.txt文件:如下图

  1. 数据卷的持久化:

当我们把c1容器删除后,宿主机中的数据卷依然存在。 所以当我们重新创建一个容器的同时依然可以挂载宿主机中的data文件夹,对应data里的数据依然同步到容器中。

  1. 一个容器可以挂载多个数据卷

  1. 多个容器可以挂载同一个数据卷

分别创建两个容器,两个容器都挂载宿主机中data目录,当 修改c3容器的data目录c4会实现同步。

从而实现两个容器之间的交互。

3.3 配置数据卷容器

多容器进行数据交换

  1. 多个容器挂载同一个数据卷
  2. 数据卷容器

步骤:

1.创建启动c3数据卷容器,使用 –v 参数 设置数据卷

docker run –it --name=c3 –v /volume centos:7 /bin/bash

创建启动 c1 c2 容器,使用 –-volumes-from 参数 设置数据卷

docker run –it --name=c1 --volumes-from c3 centos:7 /bin/bash
docker run –it --name=c2 --volumes-from c3 centos:7 /bin/bash

3.4 数据卷小结

  1. 数据卷概念
    •宿主机的一个目录或文件
  2. 数据卷作用
    • 容器数据持久化
    • 客户端和容器数据交换
    • 容器间数据交换
  3. 数据卷容器
    • 创建一个容器,挂载一个目录,让其他容器继承自该容器( --volume-from )。

• 通过简单方式实现数据卷配置

4. 应用部署

参考资料中docker应用部署

5. Dockerfile

前面的课程中已经知道了,要获得镜像,可以从Docker仓库中进行下载。那如果我们想自己开发一个镜像,那该如 何做呢?答案是:Dockerfifile

Dockerfifile其实就是一个文本文件,由一系列命令和参数构成,Docker可以读取Dockerfifile文件并根据Dockerfifile文 件的描述来构建镜像。

5.1 Docker 镜像原理(了解)

思考:

  1. Docker 镜像本质是什么?
    是一个分层文件系统
  2. Docker 中一个centos镜像为什么只有200MB,而一个centos操作系统的iso文件要几个个G? ?
    Centos的iso镜像文件包含bootfs和rootfs,而docker的centos镜像复用操作系统的bootfs,只有rootfs和其他镜像层
  1. Docker 中一个tomcat镜像为什么有500MB,而一个tomcat安装包只有70多MB? ?

由于docker中镜像是分层的,tomcat虽然只有70多MB,但他需要依赖于父镜像和基础镜像,所有整个对外暴露的

tomcat镜像大小500多MB

Linux操作系统:文件系统

Linux : 内核态 (cpu),用户态(内存,硬盘)

5.2 镜像制作

5.2.1 容器转为镜像

  1. 使用docker commit命令可以将容器保存为镜像。

命令形式:docker commit 容器名称 镜像名称

eg:
docker commit 381827f60f70 itheima_tomcat:1.0
  1. 使用docker save命令可以将已有镜像保存为tar 文件。

命令形式:docker save –o tar文件名 镜像名

docker save -o itheima_tomcat:1.0.tar
  1. 使用docker load命令可以根据tar文件恢复为docker镜像。

命令形式:docker load -i tar文件名

# 加载恢复镜像
docker load -i itheima_tomcat.tar 
# 在镜像恢复之后,基于该镜像再次创建启动容器 
docker run -di --name=new_tomcat -p 8080:8080 itheima_tomcat:1.0

注意:新的镜像制作后,原本容器中挂载的目录将失效, 索引一般在恢复镜像创建容器容器的时候需要重新挂载。

5.3 Dockerfile 概念

  • Dockerfile 是一个文本文件
  • 包含了一条条的指令
  • 每一条指令构建一层,基于基础镜像,最终构建出一个新的镜像
  • 对于开发人员:可以为开发团队提供一个完全一致的开发环境
  • 对于测试人员:可以直接拿开发时所构建的镜像或者通过Dockerfile文件
    构建一个新的镜像开始工作了
  • 对于运维人员:在部署时,可以实现应用的无缝移植

Dochub网址:https://hub.docker.com

关键字:

关键字 作用 备注
FROM 指定父镜像 指定dockerfile基于哪个image构建
MAINTAINER 作者信息 用来标明这个dockerfile谁写的
LABEL 标签 用来标明dockerfile的标签 可以使用Label代替Maintainer 最终都是在docker image基本信息中可以查看
RUN 执行命令 执行一段命令 默认是/bin/sh 格式: RUN command 或者 RUN [“command” , “param1”,“param2”]
CMD 容器启动命令 提供启动容器时候的默认命令 和ENTRYPOINT配合使用.格式 CMD command param1 param2 或者 CMD [“command” , “param1”,“param2”]
ENTRYPOINT 入口 一般在制作一些执行就关闭的容器中会使用
COPY 复制文件 build的时候复制文件到image中
ADD 添加文件 build的时候添加文件到image中 不仅仅局限于当前build上下文 可以来源于远程服务
ENV 环境变量 指定build时候的环境变量 可以在启动的容器的时候 通过-e覆盖 格式ENV name=value
ARG 构建参数 构建参数 只在构建的时候使用的参数 如果有ENV 那么ENV的相同名字的值始终覆盖arg的参数
VOLUME 定义外部可以挂载的数据卷 指定build的image那些目录可以启动的时候挂载到文件系统中 启动容器的时候使用 -v 绑定 格式 VOLUME [“目录”]
EXPOSE 暴露端口 定义容器运行的时候监听的端口 启动容器的使用-p来绑定暴露端口 格式: EXPOSE 8080 或者 EXPOSE 8080/udp
WORKDIR 工作目录 指定容器内部的工作目录 如果没有创建则自动创建 如果指定/ 使用的是绝对地址 如果不是/开头那么是在上一条workdir的路径的相对路径
USER 指定执行用户 指定build或者启动的时候 用户 在RUN CMD ENTRYPONT执行的时候的用户
HEALTHCHECK 健康检查 指定监测当前容器的健康监测的命令 基本上没用 因为很多时候 应用本身有健康监测机制
ONBUILD 触发器 当存在ONBUILD关键字的镜像作为基础镜像的时候 当执行FROM完成之后 会执行 ONBUILD的命令 但是不影响当前镜像 用处也不怎么大
STOPSIGNAL 发送信号量到宿主机 该STOPSIGNAL指令设置将发送到容器的系统调用信号以退出。
SHELL 指定执行脚本的shell 指定RUN CMD ENTRYPOINT 执行命令的时候 使用的shell

5.4 Dockerfile 案例

需求1:

自定义centos7镜像。要求:

  1. 默认登录路径为 /usr
  2. 可以使用vim

实现步骤

① 定义父镜像:FROM centos:7

② 定义作者信息:MAINTAINER itheima itheima@oldlu.cn

③ 执行安装vim命令: RUN yum install -y vim

④ 定义默认的工作目录:WORKDIR /usr

⑤ 定义容器启动执行的命令:CMD /bin/bash

⑥ 通过dockerfile构建镜像:docker bulid –f dockerfile文件路径 –t 镜像名称:版本

Dockerfile文件:

文件编写完成执行命令构建:

docker build -f ./centos_dockerfile -t itheima_centos:1 .

需求2:

定义dockerfile,发布springboot项目

实现步骤

① 定义父镜像:FROM java:8

② 定义作者信息:MAINTAINER itheima itheima@oldlu.cn

③ 将jar包添加到容器: ADD springboot.jar app.jar


④ 定义容器启动执行的命令:CMD java –jar app.jar


⑤ 通过dockerfile构建镜像:docker bulid –f dockerfile文件路径 –t 镜像名称:版本

文件编写完成执行命令构建:

docker build -f ./springboot_dockerfile -t app .

6. 服务编排

6.1 服务编排概念

微服务架构的应用系统中一般包含若干个微服务,每个微服务一般都会部署多个实例,如果每个微服务都要手动启停,维护的工作量会很大。

  • 要从Dockerfile build image 或者去dockerhub拉取image
  • 要创建多个container
  • 要管理这些container(启动停止删除)
  • 服务编排: 按照一定的业务规则批量管理容器

6.2 Docker Compose 概述

6.2.1 Docker Compose

Docker Compose是一个编排多容器分布式部署的工具,提供命令集管理容器化应用的完整开发周期,包括服务构建 ,启动和停止。使用步骤:

  1. 利用 Dockerfile 定义运行环境镜像
  2. 使用 docker-compose.yml 定义组成应用的各服务
  3. 运行 docker-compose up 启动应用

6.2.2 Docker Compose 安装使用

参考《docker-compose》

7. Docker 私有仓库

Docker官方的Docker hub(https://hub.docker.com)是一个用于管理公共镜像的仓库,我们可以从上面拉取镜像 到本地,也可以把我们自己的镜像推送上去。但是,有时候我们的服务器无法访问互联网,或者你不希望将自己的镜 像放到公网当中,那么我们就需要搭建自己的私有仓库来存储和管理自己的镜像。


搭建参考《docker 私有仓库.md》

8. Docker相关概念

docker容器虚拟化 与 传统虚拟机比较:

dubbo和rockeMQ有什么区别,分不清楚准备用现成的

知道做了什么,命令记不住, -e之类的缩写记不住意思.独立完成困难

目录
相关文章
|
Ubuntu Linux Docker
[笔记]Centos/Ubuntu/Windows/Docker 安装使用Aria2及Aria2基本使用
[笔记]Centos/Ubuntu/Windows/Docker 安装使用Aria2及Aria2基本使用
505 0
|
存储 安全 Linux
Docker 离线安装与基本使用
Docker 离线安装与基本使用
2160 0
Docker 离线安装与基本使用
|
4月前
|
Java Linux Shell
Docker的基本使用
Docker的基本使用
36 0
|
6月前
|
运维 Linux Shell
Docker详解(五)——Docker基本使用
Docker详解(五)——Docker基本使用
37 0
|
6月前
|
Ubuntu Linux Docker
Docker 安装与基本使用
Docker 安装与基本使用
94 0
|
关系型数据库 MySQL 应用服务中间件
Docker基本使用
初识Docker 什么是Docker 微服务虽然具备各种各样的优势,但服务的拆分通用给部署带来了很大的麻烦。 分布式系统中,依赖的组件非常多,不同组件之间部署时往往会产生一些冲突。 在数百上千台服务中重复部署,环境不一定一致,会遇到各种问题 应用部署的环境问题 大型项目组件较多,运行环境也较为复杂,部署时会碰到一些问题: 依赖关系复杂,容易出现兼容性问题 开发、测试、生产环境有差异 例如一个项目中,部署时需要依赖于node.js、Redis、RabbitMQ、MySQL等,这些服务部署时所需要的函数库、依赖项各不相同,甚至会有冲突。给部署带来了极大的困难。 Docker解决依赖兼
46 1
|
Ubuntu NoSQL Linux
一文讲明Docker的基本使用,常见Docker命令使用 、Docker的安装使用等
1、Docker的基本概念 2、常用的Docker命令 3、虚拟机安装Docker
|
Ubuntu Linux 测试技术
Docker的基本使用 1
Docker的基本使用
138 1
|
Java Linux Docker
Spring Boot入门(二十六) 之 Docker的安装与基本使用
Spring Boot入门(二十六) 之 Docker的安装与基本使用
|
Ubuntu NoSQL Linux
Docker 安装与基本使用
Docker 安装与基本使用
522 0