Docker 快速入门(二)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: Docker 快速入门

Docker 快速入门(一)https://developer.aliyun.com/article/1469454


Docker镜像讲解

镜像是什么

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

所有的应用,直接打包docker镜像,就可以直接跑起来

如何获得镜像:

  • 从远程仓库下载
  • 朋友拷贝
  • 自己制作镜像dockerfile

Docker镜像加载原理

UnionFS 联合文件系统

Docker镜像加载的原理

分层理解

分层的镜像

我们可以去下载一个镜像,注意观察下载的日志输出,可以看到一层层的下载,

我们会发只会下载一些新的,之前老的都是可以复用的

Docker的分层

每个操作系统都有自己的储存方式

docker上我们的操作可以是再镜像层面的基础上新加了一层,

docker镜像的特点

docker的镜像一般都是只读状态的,我们run起来的容器,都是再容器层面,新写的层面会被加到顶部。

所以我们的所有操作都是基于容器的,容器基于一个基本的镜像,

理解了这些我们再去提交一个属于自己的镜像

COMMIT镜像

docker commit 提交哦让其成为一个新的副本
#命令和git的原理类似
docker commit -m = “提交的描述i星系” -a =“作者” 容器id 目标的镜像名字:【tag】

实战测试:打包一个webapps下有文件的 tocmat上去

#1 启动一个tomcat 
#2 之前发现的问题,我们的tomcat下默认是没有文件的,都放在 webapps.dist虚下,每次我们都需要去将这个文件夹中的东西去复制到webapps中,十分的麻烦。
#3我自己将文件拷贝到了基本文件
#4 我自己拷贝的镜像我提交了。这个比较好用,我直接提交上去用我提交的我觉得舒服的镜像

到了这里就算是入门Docker

容器数据卷

什么是容器的数据卷

docker的理念回顾

将应用环境打包成一个镜像!

数据 如果数据在容器中,我们容器删除的话,数据也会跟着消失  需求 :需要持久化

MySql 容器删除=删库跑路 需求:MySql数据可以存储到本地!

容器之间可以有一个数据空想的技术,docker容器中产生的数据,同步到本地

删除容器数据不会消失,这个就是卷技术

目录的挂载,将我们的容器内的目录,挂在到linux上!

容器需要持久化和同步操作,容器间也可以数据共享

使用数据卷

方式1:直接使用命令来挂在 -v

docker run -it -v  主机目录:容器目录
#挂载测试
docker run -it -v /dockerTest/ceshi/:/home centos /bin/bash
#查看容器元数据
docker inspcet 容器id

可以看到卷的挂载信息

绑定信息确认之后,我们来试试是不是真的成功了

绑定成功,之后我们测试,就是是不是容器停止下来数据还能有数据嘛?

我们这里在服务器的testjava文件中写点内容

之后去启动容器看看是否 同步

同步成功!!!

到这里我们就实现了数据卷的数据持久化操作,只要容器不消失,关闭之后再次打开也是可以看更改的内容的。

实战安装mysql

mysql持久话的问题

#拉去mysql的镜像 
docker pull mysql:5.7
#启动挂载mysql的容器 mysql是必须要有密码的
#官方的测试
 docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
 # -e 我们这里可以看到,我们需要配置环境的时候,就可以用-e来配置
 
docker run -d -p 3310:3306 
-v /dockerTest/mysql/conf:/etc/mysql/conf.d
-v /dockerTest/mysql/data:/var/lib/mysql 
-e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
#-d 是后台挂在
#-p 映射端口
#-v 卷挂载
#--name 容器名字
#--e 配置环境,mysql密码
#启动成功之后打开数据库连接工具连接docker的mysql
#navicat 连接 服务器的3310(映射的docker 3306)连接成功
#测试本地创建数据库,查看是否data的内容映射到成功

哪怕我们将容器删除,我们挂载到本地的数据是不会丢失的,这就实现了容器持久化。

具名挂载和匿名挂载

#匿名挂载
-v 容器内路径
docker run -d -P --name nginx01 -v /etc/nginx nginx
#查看卷(volume)的信息
docker volume ls
#这里发现数据都是没有名字的,这里我们没有设置本机的路径,-v只写了容器内的路径,这个就是匿名挂载
#具名挂载
docker run -d -P -v juming-nginx:/etc/nginx nginx
查看卷信息
docker volume ls
local     10f1524cc8295a9e7dfd75c88dab113395da11959756738bf121b5733ac2be70
local     24439de8b83f5493f971314bc3e5ca0e8f60d14a338ee19c7e35910403ade730
local     juming-nginx
可以看到我们刚才的设置的
#通过 -v 卷名 : 容器内路径
#查看一下这个卷

所有的docker容器内的卷,,没有指定目录,就都会放在/var/lic/docker/volumes/xxx/_data

我们通过具名挂载可以很轻松拿出来配置。大多数的时候我们都是具名挂载

#如何区分具名挂载,匿名挂载,和绝对路径挂载
-v 容器内路径  #匿名挂载
-v 卷名 :容器内路径 #具名挂载
-v /宿主机路径:容器路径 #指定路径挂载

拓展

#通过 -v 容器内的路径ro ow改变读写权限
ro readonly #只读
rw redwrite #可读可写
#一旦设置了容器权限,容器对我们挂载出来的内容就有限顶了
#ro 只要看到ro就说明这个路径只能通过宿主机来操作,容器内部是无法操作的

初识dockerfile

dockerfile 就是通过构建docker 镜像的构建文件,命令脚本,

通过脚本可以生成镜像,镜像是一层一层的,脚本就是一个个命令,每个命令就是一层

#创建一个dockerfile 的文件,名字可以随意,建议dockerfile
#文件中的内容 大写
FROM centos
VOLUME ["volume01","volume02"]
CMD echo "------end-------"
CMD /bin/bash
#这里的每个指令就是镜像的一层

启动i自己的容器

这个卷和外部一定有一个同步的目录

这个是匿名挂载

我们要找的话一定是一段很长的乱码

找到卷挂载的命令

容器同步成功

这种方式我们未来使用的十分多,因为我们通常会构建自己的镜像

假设构建的时候没有挂载卷,要手动镜像挂载,-v 卷名:容器路径!

数据卷容器

容器之间同步数据

我们要打开三个容器,启动第一个:可以看到我们挂载的两个容器

这里我们跑起来容器

docker run -it --name docker02 --volumes-from docker01 2dd933a342b1

挂载我们的docker01

我们可以看到docker02的里面也有之前两个挂载的容器

我们在docker01新增volume01新建个文件夹 docker01,在docker02中也可以看见

这里是docker02查看volume1 的内容

可以看出已经很明显了,挂载成功,这个时候我们docker01就是数据卷容器同时也是docker01容器

只要还有容器在挂载数据就不会丢失

多个mysql实现数据共享

docker run -d -p 3310:3306 
-v /etc/mysql/conf.d
-v /var/lib/mysql 
-e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
#mysql02挂载mysql01
docker run -d -p 3310:3306 
-e MYSQL_ROOT_PASSWORD=123456 --name mysql01 --volumes-from mysql01  mysql:5.7

结论:

容器之间配置信息,数据卷容器的生命周期一直持续到没有容器位置

但是一旦持久化到了本地, 就不会消失

dockerfile

dockerfile介绍

用来构建docker 镜像的

构建步骤:

  • 编写一个docker file 文件
  • docker build 构建成一个镜像
  • docker run 运行镜像
  • docker push 发布镜像(Docker hub 阿里云镜像)

我们来看看官方是怎么做的

很多官方的镜像都是基础包,很多功能没有,我们通常会自己搭建自己的镜像

官方可以制作镜像,那我们也可以

DockerFile构建过程

基础知识

  • 每个保留关键字,指令都必须是大写字母
  • 执行从上到下执行
  • #表示注释
  • 每个指令都会创建提交一个新的镜像层

dockerfile是面向开发的,我i们以后需要发布项目,做镜像,就需要编写dockerfile文件,这个文件十分简单。

我们要掌握dockerfile 就基本可以掌握常用的docker镜像企业交付了

dockerfile :构建文件,定义了一切步骤,源代码

dockerimages:通过dockerfile生成的镜像,最终发布和运行的产品

docker容器:容器就是镜像运行起来,提供服务的

Dockerfile的指令

FROM            # 基础镜像,一切从这里开始构建
MAINTAINER      # 镜像是谁写的, 姓名+邮箱
RUN             # 镜像构建的时候需要运行的命令
ADD             # 步骤, tomcat镜像, 这个tomcat压缩包!添加内容
WORKDIR         # 镜像的工作目录
VOLUME          # 挂载的目录
EXPOSE          # 保留端口配置
CMD             # 指定这个容器启动的时候要运行的命令,只有最后一个会生效可被替代
ENTRYPOINT      # 指定这个容器启动的时候要运行的命令, 可以追加命令
ONBUILD         # 当构建一个被继承DockerFile 这个时候就会运行 ONBUILD 的指令,触发指令
COPY            # 类似ADD, 将我们文件拷贝到镜像中
ENV             # 构建的时候设置环境变量!


Docker 快速入门(三)https://developer.aliyun.com/article/1469457

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
4月前
|
关系型数据库 MySQL Java
【Docker最新版教程】一文带你快速入门Docker常见用法,实现容器编排和自动化部署上线项目
Docker快速入门到项目部署,MySQL部署+Nginx部署+docker自定义镜像+docker网络+DockerCompose项目实战一文搞定!
|
6月前
|
应用服务中间件 nginx Docker
单机编排工具之docker-compose快速入门使用
这篇文章是关于如何使用docker-compose进行单机编排的快速入门指南,包括了镜像准备、docker-compose安装、使用教程以及验证服务生效的步骤。
100 2
单机编排工具之docker-compose快速入门使用
|
6月前
|
Ubuntu Linux Docker
docker swarm快速入门篇
关于Docker Swarm集群部署和验证高可用性的快速入门教程。
86 2
|
7月前
|
数据采集 存储 Docker
Docker快速入门指南
Docker快速入门指南
68 1
|
7月前
|
Ubuntu Shell Linux
docker快速入门教程
docker快速入门教程
118 0
|
9月前
|
Linux 开发工具 Docker
【Docker】快速入门手册
【Docker】快速入门手册
150 1
|
9月前
|
Java Linux Shell
docker 打包 springboot 项目快速入门
docker 打包 springboot 项目快速入门
88 0
|
10月前
|
jenkins Java 持续交付
Jenkins 快速入门 (含Jenkins + Docker + Git 简单的自动化实操)(上)
Jenkins 快速入门 (含Jenkins + Docker + Git 简单的自动化实操)
|
10月前
|
Java 应用服务中间件 Linux
Docker 快速入门(三)
Docker 快速入门
87 1
|
10月前
|
运维 应用服务中间件 Linux
Docker 快速入门(一)
Docker 快速入门
132 1