(一)Dockerfile
- ①编写Dockerfile
mkdir mynginx
cd mynginx
vi Dockerfile
FROM nginx
RUN echo '<h1>Hello,World,Dockerfile</h1>' > /usr/share/nginx/html/index.html
- ②构建镜像
docker build -t nginx:v0 .
- ③该镜像历史
docker history nginx:v0
(二)Dockerfile命令合集
- ①FROM
FROM <image>
FROM <image>:<tag>
FROM <image>@<digest>
FROM scratch #制作base Image
FROM centos #使用base Image
FROM centos:7.9
FROM mysql:5.6
- ②LABEL
LABEL maintainer="394498036@qq.com"
LABEL version="1.0"
LABEL description="This is description \
欢迎关注:编程坑太多"
- ③RUN
#不建议使用
RUN yum update
RUN yum install -y vim
RUN python-dev
#建议使用
RUN yum update && yum install -y vim \
python-dev #反斜线换行
RUN apt-get update && apt-get install -y perl \
pwgen --no-install-recommends && rm -rf \
/var/lib/apt/lists/* #注意清理cache
- ④ENV
ENV MYSQL_VERSION 5.6
E-NV apt-get install -y mysql-server = "${MYSQL_VERSION}" \
&& rm -rf /var/lib/apt/lists/* #引用常亮
- ⑤COPY
COPY ["", ""]
COPY nginx.conf /etc/nginx/nginx.conf
- ⑥WORKDIR
WORKDIR /test #如果没有会自动创建test目录
WORKDIR idig8
RUN pwd #输出结果应该是/test/idig8
- ⑦ENTRTYPOINT
- ⑧CMD
PS:一般来说,应该会将 Dockerfile 置于一个空目录下,或者项目根目录下。如果该目录下没有所需文件,那么应该把所需文件复制一份过来。如果目录下有些东西确实不希望构建时传给 Docker 引擎,那么可以用 .gitignore 一样的语法写一个.dockerignore,该文件是用于剔除不需要作为上下文传递给 Docker 引擎的。
基本思路:
1.编写.dockerignore文件
2.容器只运行单个应用
3.将多个RUN指令合并为一个
4.基础镜像的标签不要用latest
5.每个RUN指令后删除多余文件
6.选择合适的基础镜像(alpine版本最好)