Docker Notes
T

文件的复制和目录操作

  • 往镜像里复制文件有两种方式,COPYADD , 在 COPY 和 ADD 指令中选择的时候,可以遵循这样的原则,所有的文件复制均使用 COPY 指令,仅在需要自动解压缩的场合使用 ADD。
  • 镜像目录 WORKDIR,相当于 cd [folder],后续 ADD COPY 命令会添加文件到此文件夹。

复制普通文件

COPYADD 都可以把 local 的一个文件复制到镜像里,如果目标目录不存在,则会自动创建。

编写 hello.py, hello.py.add.Dockerfilehello.py.copy.Dockerfile 文件,然后根据 Dockerfile 构建镜像。

# hello.py
print("hello docker, hello jaime~")

# hello.py.add.Dockerfile
FROM python:3.10-alpine3.15
ADD hello.py /app/

# hello.py.copy.Dockerfile
FROM python:3.10-alpine3.15
COPY hello.py /app/

使用 docker image lsdocker image history 查看镜像大小和分层情况。ADDCOPY 改动的文件一样。

dockerfile-add-copy-py

复制压缩文件

ADDCOPY高级一点的地方就是,如果复制的是一个 gzip 等压缩文件时,ADD 会帮助我们自动去解压缩文件。

编写 hello.py.add.Dockerfilehello.py.copy.Dockerfile 文件,将 hello.py 压缩为 hello.tar.gz,然后根据 Dockerfile 构建镜像。

# hello.py
print("hello docker, hello jaime~")

# hello.py.add.Dockerfile
FROM python:3.10-alpine3.15
ADD hello.py /app/

# hello.py.copy.Dockerfile
FROM python:3.10-alpine3.15
COPY hello.py /app/
  • 使用 docker image lsdocker image history 查看镜像大小和分层情况。ADDCOPY 改动的文件不一样。
  • 使用 docker container run -it [image-name]:[tag] ls /app 查看容器 /app 目录的内容。COPY 内文件为 hello.tar.gzADD 内文件为 hello.py

dockerfile-add-copy-gz

目录操作

镜像目录 WORKDIR,相当于 cd [folder],后续 ADD COPY 命令会添加文件到此文件夹。

编写 hello.py.workdir.Dockerfile 文件,然后根据 Dockerfile 构建镜像。

# hello.gz.workdir.Dockerfile
FROM python:3.10-alpine3.15
WORKDIR /app/
ADD hello.tar.gz .
COPY hello.tar.gz .

使用 docker container run -it [image-name]:[tag] ls /app 查看容器 /app 目录的内容。COPY 内文件为 hello.tar.gzADD 内文件为 hello.py

dockerfile-workdir

Show Graph Visualisation