初识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
这两个卷和外部一定有一个是 和外部同步的目录
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
# 启动第二个容器继承docker01
[root@localhost]# docker run -it --name docker02 --volumes-from docker01 bruceliu/centos:1.0
Docker01 创建文件docker01同步到docker02里面的volume01,如图:
# 只要通过--volumes-from就可以实现容器间的数据共享
# 测试:可以删除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、阿里云镜像仓库 )
查看一下官网是怎么做的?
很多官方镜像都是基础包,很多功能没有。
我们自己的镜像文件可以根据需求构建
dockerfile的命令,通过百度搜索图片。“dockerfile命令”