不同环境下Dockerfile配置示例

整体示例

NodeJS

Dockerfile

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
LABEL maintainer="psvmc <psvmc@outlook.com>"

# Pull base image
FROM centos:7

# Set Charset
ENV LANG=en_US.UTF-8
ENV LANGUAGE=en_US:en
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

# 安装 wget
RUN yum -y install wget

# YUM镜像
RUN wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
RUN yum makecache

# 安装ffmpeg
RUN yum install epel-release -y
RUN yum update -y
RUN rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
RUN rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm
RUN yum install ffmpeg ffmpeg-devel -y

# 安装Python
RUN yum install -y epel-release
RUN yum install -y python2

# 安装 gcc
RUN yum -y install gcc+ gcc-c++ automake autoconf libtool make

# 安装 nodejs
RUN wget https://mirrors.huaweicloud.com/nodejs/v10.24.0/node-v10.24.0-linux-x64.tar.xz
RUN tar -xvf node-v10.24.0-linux-x64.tar.xz
RUN mv node-v10.24.0-linux-x64 /usr/local/nodejs10
RUN rm -rf node-v10.24.0-linux-x64.tar.xz
ENV NODE_HOME /usr/local/nodejs10
ENV PATH $PATH:$NODE_HOME/bin

# NPM镜像
RUN npm config set registry https://registry.npmmirror.com/
RUN npm config set disturl https://npm.taobao.org/mirrors/node/
RUN npm config set sass_binary_site https://npm.taobao.org/mirrors/node-sass/
RUN npm config set electron_mirror https://npm.taobao.org/mirrors/electron/
RUN npm config set python_mirror https://npm.taobao.org/mirrors/python/
RUN npm cache clean -f

# 安装 node-gyp
RUN npm install -g node-gyp@6.1.0

# 项目配置
RUN mkdir /data
RUN mkdir /data/school_live_record
RUN cd /data
ADD startup.sh /data/school_live_record/startup.sh
RUN chmod +x /data/school_live_record/startup.sh
ADD record /data/school_live_record/record
ADD server /data/school_live_record/server
RUN wget https://download.agora.io/ardsdk/release/Agora_Recording_SDK_for_Linux_v3.0.5_20210106-1609927649_793.tar.gz
RUN tar zxvf Agora_Recording_SDK_for_Linux_v3.0.5_20210106-1609927649_793.tar.gz
RUN mkdir /data/school_live_record/record/src/sdk/
RUN mv ./Agora_Recording_SDK_for_Linux_FULL/* /data/school_live_record/record/src/sdk/
RUN rm -rf zxvf Agora_Recording_SDK_for_Linux_v3.0.5_20210106-1609927649_793.tar.gz
RUN cd /data/school_live_record/record && chmod +x /data/school_live_record/record/build_debug.sh && /data/school_live_record/record/build_debug.sh
RUN cd /data/school_live_record/server && mkdir -p /data/school_live_record/server/output/liverecord && npm install

# Expose ports.
EXPOSE 7000

# Define default command.
WORKDIR /data/school_live_record/
ENTRYPOINT ./startup.sh

如果build_debug.sh构建的时候进度不动,可以把

1
RUN cd /data/school_live_record/record && chmod +x /data/school_live_record/record/build_debug.sh && /data/school_live_record/record/build_debug.sh

替换为

1
ADD agorasdk.node /data/school_live_record/record/agorasdk.node

把别的服务器上容器内的agorasdk.node放在Dockerfile同级

Python3.8

方式1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# Pull base image
FROM python:3.8.10

LABEL maintainer="psvmc <psvmc@outlook.com>"

# Set Charset
ENV LANG=en_US.UTF-8
ENV LANGUAGE=en_US:en
ENV LC_ALL=en_US.UTF-8
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

# Python
RUN mkdir -p /root/.pip
RUN echo "[global]" > /root/.pip/pip.conf && \
echo "index-url = https://mirrors.huaweicloud.com/repository/pypi/simple" >> /root/.pip/pip.conf
RUN pip install pipenv
RUN pip install cmake

# 安装图形化库
RUN apt update
RUN apt install -y libgl1-mesa-dev

# 项目配置
RUN mkdir /opt/z-card-recognize/
COPY . /opt/z-card-recognize/
RUN chmod 755 /opt/z-card-recognize/main.py
RUN chmod 755 /opt/z-card-recognize/startup.sh

# Define WORKDIR.
WORKDIR /opt/z-card-recognize/
# Install Dependence
RUN pipenv install --skip-lock

# Expose ports.
EXPOSE 8000

ENTRYPOINT ["pipenv", "run", "python", "main.py"]

方式2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# Pull base image
FROM centos:7

MAINTAINER psvmc "psvmc@outlook.com"

# Set Charset
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:en
ENV LC_ALL en_US.UTF-8

# Set TimeZone
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

# YUM镜像
RUN curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.huaweicloud.com/repository/conf/CentOS-7-anon.repo
RUN yum makecache

# 安装图形化库
RUN yum install -y mesa-libGL-devel

# 安装Python
RUN yum install -y gcc openssl-devel bzip2-devel libffi-devel wget make

RUN cd /root && curl -o Python-3.8.10.tgz https://cdn.npmmirror.com/binaries/python/3.8.10/Python-3.8.10.tgz && tar xzf Python-3.8.10.tgz
RUN cd /root/Python-3.8.10 && ./configure --enable-optimizations && make altinstall

# pip镜像
RUN echo "[global]\nindex-url = https://mirrors.huaweicloud.com/repository/pypi/simple" > /etc/pip.conf
RUN pip3.8 install pipenv

# 项目配置
RUN mkdir /opt/z-card-recognize/
COPY . /opt/z-card-recognize/
RUN chmod 755 /opt/z-card-recognize/main.py
RUN chmod 755 /opt/z-card-recognize/startup.sh

# Define WORKDIR.
WORKDIR /opt/z-card-recognize/
# Install Dependence
RUN pipenv install --skip-lock

# Expose ports.
EXPOSE 8000

ENTRYPOINT /opt/z-card-recognize/startup.sh

Python3.9

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# Pull base image
FROM python:3.9.0

LABEL maintainer="psvmc <psvmc@outlook.com>"

# Set Charset
ENV LANG=en_US.UTF-8
ENV LANGUAGE=en_US:en
ENV LC_ALL=en_US.UTF-8
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

# Python
RUN mkdir -p /root/.pip
RUN echo "[global]" > /root/.pip/pip.conf && \
echo "index-url = https://mirrors.huaweicloud.com/repository/pypi/simple" >> /root/.pip/pip.conf
RUN pip install pipenv
RUN pip install cmake

# Project
RUN mkdir /opt/face-recognition/
ADD ./* /opt/face-recognition/
ADD ./web /opt/face-recognition/web
RUN chmod 755 /opt/face-recognition/main.py
RUN chmod 755 /opt/face-recognition/startup.sh
RUN cd /opt/face-recognition/ && pipenv install --skip-lock

# Expose ports.
EXPOSE 8000

# Define default command.
WORKDIR /opt/face-recognition/
ENTRYPOINT ["/opt/face-recognition/startup.sh"]

构建运行

构建

1
docker build -t psvmc/z-card-recognize .

如果构建一直失败可以禁用缓存

1
docker build --no-cache -t psvmc/z-card-recognize .

运行

1
docker run -d -p 8000:8000 --name z-card-recognize --restart=always psvmc/z-card-recognize

查看启动日志

1
docker logs z-card-recognize

删除

1
2
docker stop z-card-recognize
docker rm z-card-recognize

删除中间镜像

在 Docker 中,有时候会存在一些没有标签的镜像(即 REPOSITORYTAG 都是 <none> 的镜像),这些镜像通常是构建过程中产生的中间镜像或者是没有正确打标签的镜像。

删除这些镜像可以帮助清理 Docker 环境并减少磁盘空间占用。

查看所有镜像

首先,使用以下命令查看所有镜像:

1
docker images -a

您会看到类似以下的输出:

1
2
3
REPOSITORY          TAG       IMAGE ID        CREATED         SIZE
<none> <none> abcdef123456 2 weeks ago 500MB
myrepo/myimage latest 123456abcdef 1 week ago 400MB

删除所有 <none> 镜像

您可以使用以下命令删除所有 REPOSITORYTAG 都是 <none> 的镜像:

方法 1:使用 docker rmi

1
docker rmi $(docker images -f "dangling=true" -q)

解释:

  • docker images -f "dangling=true":过滤出所有没有标签的镜像(即 dangling 镜像)。
  • -q:只显示镜像的 ID。
  • docker rmi:删除指定 ID 的镜像。

方法 2:使用 docker image prune

1
docker image prune -f

解释:

  • docker image prune:删除未使用的镜像。
  • -f--force:强制执行,不需要确认。

注意事项

  • docker image prune -f 会删除所有未被容器使用的 dangling 镜像,因此请确保没有其他容器在使用这些镜像。
  • 如果您只想删除特定镜像,可以使用镜像的 ID 直接删除:
1
docker rmi <IMAGE_ID>

其他清理操作

如果您需要清理更多未使用的 Docker 资源(如容器、网络、卷等),可以使用以下命令:

清理所有未使用的容器、网络、卷和镜像

1
docker system prune -f

清理未使用的卷

1
docker volume prune -f

通过这些步骤,您可以有效地清理 Docker 环境中的 <none> 镜像和未使用的资源,释放磁盘空间。