1-4 Dockerfile编写
最后更新于:2022-04-02 07:36:56
#### 制作容器基本步骤
```
1. 确保程序运行环境(版本,插件,依赖)
2. 测试代码和拷贝
3. 运行程序
```
#### 制作一个包含程序的镜像
```
FROM python:3.6
LABEL maintainer="Ptyhon3.6 dinghe@outlook.com"
RUN pip3 install flask
COPY app.py /app/
WORKDIR /app
EXPOSE 5000
CMD ["python3","app.py"]
```
制作并运行
```
cd /opt/dinghe/flask-hello/
docker build -t dinghe/flask-hello .
# 前台执行 docker run dinghe/flask-hello
# 后台执行 docker run -d dinghe/flask-hello
```
#### FROM确定引用还是制作
```
# 尽量使用官方Image
FROM scratch
FROM centos:7
```
#### LABEL定义镜像元信息
```
# 必须要有
LABEL maintainer="dinghe_1985@126.com"
LABEL version=0.1
LABEL deacription="Dev Basic PHP 5.3/5.6/7.2"
```
#### Shell和Exec格式
Shell
```
# 默认在bash环境中执行所有命令
RUN yum install -y vim
CMD echo "hello Ding"
ENTRYPOINT echo "hello Ding"
```
Exec
```
# 第一个参数是命令,后面的全是值
RUN ["yum", "install", "-y", "vim"]
CMD ["/bin/echo", "hello Ding"]
ENTRYPOINT ["/bin/echo", "hello Ding"]
# 如果要在bash环境执行,需要调整
# 注意,最后要执行的命令放在一对""里面
ENV name Ding
ENTRYPOINT ["/bin/sh/", "-c", "/bin/echo hello $name" ]
```
#### RUN CMD 和 ENTRYPOINT
RUN
```
# 每运行一次RUN,就会生成一层
# 多条命令合并为一行,回行使用 \
# 注意清理Cache文件,避免镜像过大
RUN yum update && yum install vim \
python -dev
```
CMD
```
# 容器启动时执行的命令
# 多个CMD只有最后一个会执行
# docker run image默认执行最后一个CMD
# docker run -it image /bin/bash 忽略CMD
```
ENTRYPOINT
```
# 让容器以一个应用程序或者服务的形式运行
# 不会忽略,一定执行
# shell脚本使用
```
#### WORKDIR设置工作目录
```
# 如果没有会创建并进入
# 不要用RUN cd,尽量使用绝对路径
推荐:WORKDIR /opt/lnmp
WORKDIR /opt/
WORKDIR lnmp
# pwd /opt/lnmp/
```
#### COPY和ADD的区别
```
# COPY仅支持复制(推荐使用)
# ADD 支持解压,wget,会根据目标类型判断覆盖还是放入
WORKDIR /opt
ADD hello.sh lnmp/
# pwd /opt/lnmp/hello.sh
```
#### 声明变量
```
ENV MYSQL_VERSION 5.6
yum install "${MYSQL_VERSION}"
```
#### VOLUME
#### EXPOSE
';