DockerFile的介绍

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

初识Dockerfile
Dockerfile 就是用来构建docker镜像的构建文件,就是一个命令脚本,通过这脚本可以生成镜像,镜像是一层一层的,脚本就是一个个的命令,

> # 创建一个dockerfile文件,名字可以随意,建议用dockerfile  
> # 文件中内容,指令都是大写,参数  
> FROM centos  
> VOLUME ["volume01","volume02"]  
> CMD echo "---end----"  
> CMD /bin/bash  
>   
> # 这里的每个命令就是镜像的一层  
> **本人的理解类似于windows系统的批处理文件**  
>   
> root@liuxiaoweideAir docker-test-volume # docker build -f /Users/liuxiaowei/docker-test-volume/dockerfile1 -t  bruceliu/centos:1.0 .  
> [+] Building 1.6s (5/5) FINISHED                                                  
>  => [internal] load build definition from dockerfile1                      0.5s  
>  => => transferring dockerfile: 120B                                       0.0s  
>  => [internal] load .dockerignore                                          0.5s  
>  => => transferring context: 2B                                            0.0s  
>  => [internal] load metadata for docker.io/library/centos:latest           0.0s  
>  => [1/1] FROM docker.io/library/centos                                    0.4s  
>  => exporting to image                                                     0.1s  
>  => => exporting layers                                                    0.0s  
>  => => writing image sha256:9ec777f9328b3414e208ee19b30072b218f5c6bfb152a  0.0s  
>  => => naming to docker.io/bruceliu/centos:1.0                             0.0s  
>   
> Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them  
> root@liuxiaoweideAir docker-test-volume # ls  
> dockerfile1
# 启动该容器
root@liuxiaoweideAir liuxiaowei # docker images
REPOSITORY                        TAG                                        IMAGE ID       CREATED         SIZE
tomcat01                          1.0                                        3694687aedfe   20 hours ago    684MB
nginx                             latest                                     605c77e624dd   10 days ago     141MB
tomcat                            9.0                                        b8e65a4d736d   2 weeks ago     680MB
tomcat                            latest                                     fb5657adc892   2 weeks ago     680MB
mysql                             5.7                                        c20987f18b13   2 weeks ago     448MB
docker/getting-started            latest                                     26d80cd96d69   5 weeks ago     28.5MB
ubuntu                            latest                                     ba6acccedd29   2 months ago    72.8MB
centos                            latest                                     5d0da3dc9764   3 months ago    231MB
bruceliu/centos                   1.0                                        9ec777f9328b   3 months ago      231MB  # dockerfile生成的镜像
docker/dev-environments-default   stable-1                                   7c85b0303242   5 months ago    607MB
docker/desktop-git-helper         5a4fca126aadcd3f6cc3a011aa991de982ae7000   efe2d67c403b   5 months ago    44.2MB
portainer/portainer               latest                                     580c0e4e98b0   9 months ago    79.1MB
scrapinghub/splash                latest                                     9364575df985   16 months ago   1.89GB
ubuntu                            15.10                                      9b9cb95443b5   5 years ago     137MB
training/webapp                   latest                                     6fae60ef3446   6 years ago     349MB
root@liuxiaoweideAir liuxiaowei # docker run -it 9ec777f9328b /bin/bash
[root@6c7b9856d5de /]# ls
bin  etc   lib      lost+found  mnt  proc  run   srv  tmp  var       volume02
dev  home  lib64  media       opt  root  sbin  sys  usr  volume01

image.png

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

FROM centos
VOLUME ["volume01","volume02"]  # 匿名挂载
CMD echo "----end----"

# 查看一下卷挂载的路径
docker inspect 容器id    
"Mounts": [
            {
   
                "Type": "volume",
                "Name": "7b40488c0291a9cc8858a2b831fc11e24807b66794fbcb5e0130fd28eb97955d",
                "Source": "/var/lib/docker/volumes/7b40488c0291a9cc8858a2b831fc11e24807b66794fbcb5e0130fd28eb97955d/_data",
                "Destination": "volume01",  # 对应匿名卷
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            },
            {
   
                "Type": "volume",
                "Name": "2a9464346288b8be9bc62743b05aa3cb1652c7167afad3847e0c617027a00847",
                "Source": "/var/lib/docker/volumes/2a9464346288b8be9bc62743b05aa3cb1652c7167afad3847e0c617027a00847/_data",
                "Destination": "volume02",  # 对应匿名卷
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation
}
]

在此提个问题,也是我遇到的 ,这个挂载卷路径在mac系统是不存在的,通过查阅资料,有一种解决方法就是更新docker之后,然后执行screen 路径,就可以了。但是我尝试了还是不行。

不过在centos环境,不存在这个问题

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

数据卷容器
多个mysql同步数据

启动3个容器,通过我们自己写的脚本生成的镜像bruceliu/centos:1.0启动,下面是在centos7环境执行

[root@localhost]# docker run -it --name docker01 bruceliu/centos:1.0

image.png

# 启动第二个容器继承docker01
[root@localhost]# docker run -it --name docker02 --volumes-from docker01 bruceliu/centos:1.0

image.png
image.png

Docker01 创建文件docker01同步到docker02里面的volume01,如图:

# 只要通过--volumes-from就可以实现容器间的数据共享

image.png

# 测试:可以删除docker01,查看一下docker02和docker03是否还可以访问这个文件 。结果是可以的。

多个mysql实现数据共享

root@liuxiaoweideAir ~ # docker run -d -p 3310:3306 -v /Users/liuxiaowei/mysql/conf:/etc/mysql/conf.d -v /Users/liuxiaowei/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456  --name mysql01 mysql:5.7

root@liuxiaoweideAir ~ # docker run -d -p 3310:3306  -e MYSQL_ROOT_PASSWORD=123456 --name mysql02 --volumes-from mysql01 mysql:5.7 

# 可以实现两个容器数据同步

结论:

容器之间配置信息的传递,数据卷容器的生命周期一直持续到没有容器使用为止。

但是一旦持久化到了本地,这个时候,本地的数据是不会被删除的

DockerFile
DockerFile的介绍
dockerfile 是用来构建docker镜像的文件,命令参数脚本。
构建步骤:
1、编写一个dockerfile文件
2、docker build 构建成一个镜像
3、docker run 运行镜像
4、docker push 发布镜像(DockerHub、阿里云镜像仓库 )
查看一下官网是怎么做的?
image.png

很多官方镜像都是基础包,很多功能没有。

我们自己的镜像文件可以根据需求构建

dockerfile的命令,通过百度搜索图片。“dockerfile命令”

image.png

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
20天前
|
应用服务中间件 nginx Docker
Dockerfile
【11月更文挑战第01天】
47 10
|
1月前
|
Java 应用服务中间件 Docker
|
6月前
|
Java Linux 开发工具
|
11月前
|
缓存 Shell Go
dockerfile介绍与使用
dockerfile介绍与使用
102 1
|
缓存 Shell C语言
Dockerfile完全指南
Dockerfile完全指南
300 2
|
Linux 应用服务中间件 开发工具
dockerfile
dockerfile
104 0
|
Go 容器
一文了解 Dockerfile 鲜为人知的一面
Hello folks,今天给大家介绍一下如何在 Dockerfile 中进行 Go 代码编写及运用(备注:此处暂不关注所部署的容器大小及性能问题)。
92 0
|
缓存 Shell Go
DockerFile文件详解
DockerFile文件详解
203 0
|
应用服务中间件 Shell nginx
|
Ubuntu Shell 开发工具
DockerFile
DockerFile
87 0