Docker 高级管理--Dockerfile镜像制作
二:Dockerfile 语法基础
1:基础指令
(1)FROM
指定基础镜像,所有的 Dockerfile 都必须以 FROM 指令开头,它定义了新镜像基于哪个基础镜像构建。
FRoM ubuntu:20.04
(2)MAINTAINER(已奔用,推荐使用LABEL)
用于指定镜像的维护者信息。不过在较新的Docker版本中,推荐使用 LABEL 指今来替代
MAINTAINER John Doe <johndoe@example.com>
(3)LABEL
为镜像添加元数据,这些元数据可以是任何信息,如作者、版本、描述等,方便对镜像进行管理和识别。
LABEL version="1.0" description="This is a sample image"
maintainer="John'
2:环境设置指令
(1)ENV
设置环境变量,这些环境变量会在容器运行时持续存在,并且可以被容器内的应用程序使用。
ENV MYSOL_ROOT_PASSWORD=password
(2)ARG
定义在构建镜像时可以传递的参数,这些参数只在镜像构建过程中有效。
ARG VERSION=1.0
3:文件操作指令
(1)CPOY
将本地文件或目录复制到镜像中。
COPY app.py /app/
(2)ADD
与 COPY 类似,也是将文件或目录复制到镜像中,但 ADD 还支持从远程 URL 下载文件和自动解压玉缩文件。
ADD http://example.com/file.tar.gz /app/
3)WORKDIR
设置工作目录,后续的 RUN、CMD、ENTRYPOINT、COPY 和 ADD 等指令都会在这个工作目录下执行。
WORKDIR /app
4:执行命令指令
(1)RUN
在构建镜像的过程中执行命令,常用于安装软件包、配置环境等操作。
RUN apt-get update && apt-get install -y python3
(2)CMD
为容器提供默认的执行命令。一个 Dockerfile 中只能有一个 CMD 指令,如果有多个,只有最后个会生效。当使用 docker run 启动容器时,如果没有指定其他命令,就会执行 CMD 指定的命令。
CMD ["python3","app.py"]
3)ENTRYPOINT
配置容器启动时执行的命令,与 CMD 类似,但 ENTRYPOINT 的命令不会被 docker run 后面的命令覆盖,而是将 docker run 后面的命令作为参数传递给 ENTRYPOINT 命令。
ENTRYPOINT ["python3"]
CMD ["app.py"]
5:网络和暴露端口指令
(1)EXPOSE
声明容器在运行时会监听的端口,但这只是一个声明,并不会实际进行端口映射。在使用 dockerrun 启动容器时,需要使用-p或-P选项进行端口映射。
EXPOSE 8080
6:容器挂载指令
(1)VOLUME
创建一个可以从本地主机或其他容器挂载的挂载点,用于持久化数据或共享数据
VOLUME ["/app/data"]
三:Dockerfile 系例实施
1:案例 1--构建 nginx 容器
(1)拉取 centos 镜像
docker pull centos:7
(2)创建 dockerfile 工作目录
(3)创建 dockerfile
(4)编写nginx 启动脚本
(5)用dockerfile 创建镜像
(6)启动容器
(7)访问nginx 网站
http://192.168.10.101:8083
2:案例 2--构建 Tomcat 容器
(1)创建工作目录
(2)创建 dockerfile 文件
(3)创建启动脚本
(4)用dockerfile 生成镜像
(5)运行容器
docker run -d -i -p 8080:8080 --name tomcat01 mytomcat
(6)访问 tomcat 网站
3:案例 3--构建 mysq1 容器
(1)创建工作目录
(2)创建 dockerfile 文件
(3)编写mysq1 初始化脚本
(4)生成镜像
docker bulid -t mysql .
(5)创建容器
docker run -id -p 3306:3306 mysql
yum -y install mysql
mysql -uroot -p123456 -h 192.168.10.101 -p 3306
4:案例 4--构建 php
(1)创建工作目录
mkdir /opt/php
cd /opt/php
(2)创建dockerfile(yum 安装安装)
vim dockerfile
(3)生成镜像
docker build -t myphp .
(4)启动容器
docker run -d -i -p 9000:9000 myphp /bin/bash