dockerfile是专门用于构建镜像的文本语言,可使用dockerfile来构建我们自己的镜像
常用语法- FROM 选择要使用的镜像
- WORKERDIR 设置工作目录
- ADD 将文件/目录拷贝到容器目录中,会自动解压
- COPY 将文件/目录拷贝到容器目录中,不会自动解压
- RUN 运行所需要执行的命令
- EXPOSE 提供暴露的端口号
- ENV 设置环境变量
- MAINTAINER 维护者信息
- USER 执行用户
- ARG 运行时变量
- CMD 容器启动时运行的命令
- ENTRYPOINT 容器启动时运行的命令
CMD和ENTRYPOINT的区别
CMD是制定启动时要运行的命令,在使用docker run时指定了执行命令会把CMD的命令覆盖
ENTRYPOINT则相当于允许一个进程,进程结束了,相应的docker容器也就结束运行了。运行日志可以通过 docker logs -f xxx 查看。cmd运行的环境在所有$PATH目录的环境下,而entrypoint只在/usr/bin环境下
构建自己的docker镜像语法
docker build -t he/java .
- -t 指定镜像的名称,并读取当前目录中Dockerfile文件
- -f 指定Dockerfile的名称
- –build-arg=[] :设置镜像创建时的变量; --build-arg http_proxy=http://10.188.61.2:8118
- –cpu-shares :设置 cpu 使用权重;
- –cpu-period :限制 CPU CFS周期;
- –cpu-quota :限制 CPU CFS配额;
- –cpuset-cpus :指定使用的CPU id;
- –cpuset-mems :指定使用的内存 id;
- –disable-content-trust :忽略校验,默认开启;
- –force-rm :设置镜像过程中删除中间容器;
- –isolation :使用容器隔离技术;
- –label=[] :设置镜像使用的元数据;
- -m :设置内存最大值;
- –memory-swap :设置Swap的最大值为内存+swap,"-1"表示不限swap;
- –no-cache :创建镜像的过程不使用缓存;
- –pull :尝试去更新镜像的新版本;
- –quiet, -q :安静模式,成功后只输出镜像 ID;
- –rm :设置镜像成功后删除中间容器;
- –shm-size :设置/dev/shm的大小,默认值是64M;
- –ulimit :Ulimit配置。
- –squash :将 Dockerfile 中所有的操作压缩为一层。
- –network: 默认 default。在构建期间设置RUN指令的网络模式
我们来写个实例
启动一个mysql,并指定my.cnf与初始化sql,将默认密码设定为123456
先攥写Dockerfile文件
FROM mysql:5.7
MAINTAINER ZC hellohesir@gmail.com
ENV MYSQL_ROOT_PASSWORD 123456
ENV LANG="en_US.utf8"
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
&& echo 'Asia/Shanghai' >/etc/timezone
COPY ./my.cnf /etc/mysql/mysql.conf.d/my.cnf
COPY ./sql/ /docker-entrypoint-initdb.d/
EXPOSE 3306
构建并执行容器
docker build -t my-mysql:latest .
docker run -d --name my-mysql
--restart=always
-p 3306:3306
-v ${PWD}/my.cnf:/etc/mysql/conf.d/my.cnf # 将配置文件关联宿主机
-v ${PWD}/data:/var/lib/mysql # 将数据文件映射到宿主机,防止数据丢失
my-mysql:latest
更多示例可参考我的开源项目:https://gitee.com/DaysCrafte/docker-installed



