Study notes:docker
Study notes:docker
笔者虽然写过一堆时尚小垃圾,还写了像模像样的README文档,但实际上笔者只是借Claude3.5狐假虎威,自己基本不会啥代码。所以,这篇Note是为我自己梳理docker的结构,以便于更好地作为甲方向Claude提要求用的,里面记录的东西对各位读者大能来说估计没什么用😸看个乐子吧。
Docker简介
Docker是一个开源的容器化平台,让开发者能够将应用程序及其依赖项打包到一个可移植的容器中,以确保应用在任何环境中都能一致运行。
Docker的核心概念
- 镜像:一个独立的包含项目所有运行依赖的只读软件包,在构建时可以通过各种安装命令(如apt、pip等)向里面添加package,使得项目可以完全依赖这个环境来运行。镜像可以自己构建,也可以?从Docker Hub拉取。
- Dockerfile:构建镜像的脚本。我的一个用于NAS同步远程服务器上计算化学数据项目的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
FROM python:3.9-slim # 通常使用轻量级python环境为基础构建docker WORKDIR /app # 设置工作目录 # RUN表示安装进docker镜像,此处先使用apt来安装所需的包。例如,核心rsync,同步时需要的openssh,适应远程中文目录的locales等 RUN apt-get update && \ apt-get install -y rsync openssh-client locales procps && \ sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen && \ sed -i -e 's/# zh_CN.UTF-8 UTF-8/zh_CN.UTF-8 UTF-8/' /etc/locale.gen && \ locale-gen && \ apt-get clean && rm -rf /var/lib/apt/lists/* && \ ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \ echo "Asia/Shanghai" > /etc/timezone #安装完毕后使用apt-get clean删除不再需要的缓存,以减小docker镜像体积 # 设置环境变量 ENV LANG=zh_CN.UTF-8 ENV LC_ALL=zh_CN.UTF-8 # 创建项目目录 RUN mkdir -p /app/keys /app/sync_data /app/templates /app/Orb_Viewer # 复制项目文件到镜像内 COPY app.py requirements.txt /app/ COPY templates /app/templates/ COPY Orb_Viewer /app/Orb_Viewer/ # 使用pip向docker内安装python包 RUN pip install --no-cache-dir -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn -r requirements.txt || \ pip install --no-cache-dir -r requirements.txt # 设置环境变量 ENV FLASK_APP=app.py ENV FLASK_ENV=production # 为了保存同步下来的数据,进行卷挂载 VOLUME ["/app/sync_data", "/app/keys"] # 如有web服务,可以对外暴露端口 EXPOSE 5001 5011 # 应用入口,大致表示启动镜像时该运行什么命令 CMD ["python", "app.py"]
- 容器:是镜像的运行载体,运行时通常不改变镜像内容。容器内的文件除非做永久化,否则是临时的。
在打包完成后,docker镜像可以轻松移植到各种平台使用,而无需担心环境问题。同时,NAS服务器上允许对docker容器进行远程管理,很适合用来部署一些web服务。
同时,docker也可以用来管理宿主机的环境,使用卷挂载允许容器内的程序处理宿主机的文件,并将结果写回宿主机。
Docker基本命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# docker pull从docker hub拉取镜像
docker pull nginx
# docker build自己构建镜像
sudo docker build -t rsync-sync-nas .
# docker run运行容器
# -p是映射到宿主机的端口设置
# -v是映射到宿主机的目录设置
sudo docker run -d \
--name rsync-sync \
-p 5010:5001 \
-p 5011:5011 \
-v $(pwd)/sync_data:/app/sync_data \
-v $(pwd)/templates:/app/templates \
-v $(pwd)/app.py:/app/app.py \
rsync-sync-nas
# docker ps查看运行中的容器
docker ps
This post is licensed under CC BY 4.0 by the author.