DockerFile的介绍

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: 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

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
Java Linux Maven
Linux系统Docker部署Nexus Maven并实现远程访问本地管理界面
Linux系统Docker部署Nexus Maven并实现远程访问本地管理界面
291 3
|
存储 Linux 网络安全
借PVE8.0的Debian 12系统配置一下NFS服务器
借PVE8.0的Debian 12系统配置一下NFS服务器
|
缓存 NoSQL Java
java中实现定时给微信群中发送每日简报
java中实现定时给微信群中发送每日简报
|
11月前
|
Unix Shell Linux
常见的shell命令
shell常用命令
266 11
|
6月前
|
移动开发 安全 虚拟化
VMware ESXi 7.0 U3s 发布下载 - 领先的裸机 Hypervisor
VMware ESXi 7.0 U3s 发布下载 - 领先的裸机 Hypervisor
894 9
VMware ESXi 7.0 U3s 发布下载 - 领先的裸机 Hypervisor
|
jenkins 持续交付 Docker
docker之自定义制作镜像(python程序)
docker之自定义制作镜像(python程序)
|
12月前
|
存储 Go C语言
Python 的整数是怎么实现的?这篇文章告诉你答案
Python 的整数是怎么实现的?这篇文章告诉你答案
214 7
|
分布式计算 资源调度 Shell
如何开始使用Spark框架?
【8月更文挑战第31天】如何开始使用Spark框架?
303 2
|
Kubernetes 关系型数据库 MySQL
k8s部署nacos集群
k8s部署nacos集群
1171 1