0%

docker学习

前言

为了告别配置环境配一天啥也搞不了的问题,决定学习使用以下docker正好我这篇需要复现的多传感器融合的代码有他自己的dockerfile可以作为学习的尝试和检验。顺便也尝试利用官方的英文文档进行学习,提高一下自己的学习能力。本文参考教程

首先来看看docker的优点:

  1. 应用于更快速的交付和部署
  • 传统:通过大量的帮助文档,安装程序!
  • Docker:打包镜像发布测试,一键运行!
  1. 更便捷的升级和扩缩容
  • 通过使用Docker,部署应用 如同搭积木一样!
  1. 更简单的系统运维
  • 使用容器化之后,开发和测试环境是高度一致的
  1. 更高效的计算资源利用
  • Docker是内核级别的虚拟化,可以在一个物理机上运行很多的容器,让服务器的性能可以压榨到极致!

docker的基本组成:

simple

镜像(Image):

docker镜像就好比一个模板,我们可以通过这个模板来创建容器服务,tomcat镜像===>run==>tomcat01容器(提供服务器),通过这个镜像可以创建多个容器(最终服务运行或者项目运行就是在容器中的)。

容器(container):

docker利用容器技术,独立运行一个或者一组应用 通过镜像来创建

启动,停止,删除,基本命令!
目前就可以把这个容器理解为就是一个简易的linux系统

仓库(repository):

仓库就是存放 镜像(image)的地方!

仓库又可以分为 公有仓库和私有仓库

安装Docker

可以打开安装网址按照下列指令进行安装。

主要进行curl -fsSL https://get.docker.com -o install-docker.shsudo sh install-docker.sh需要版本特定要求再细致安装。

拉取镜像

这个很简单就行git拉源码一样使用sudo docker pull 镜像地址就可以进行下载

诺出现网络问题可以通过更换代理的办法进行解决:
打开配置文件:

1
sudo vi /etc/docker/daemon.json

修改输入下列内容保存退出:
1
2
3
4
5
6
7
{
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://docker.1panel.live",
"https://hub.rat.dev"
]
}

重启docker:
1
sudo service docker restart

管理镜像

列出所有的docker镜像

1
sudo docker images

删除对应的镜像
1
sudo docker rmi 镜像名称

使用镜像创建并运行一个容器

1
sudo docker run 镜像名称


1
sudo docker run -d 镜像名称 


1
sudo docker run -p 宿主机端口:容器端口 镜像名称 


1
sudo docker run -v 宿主机目录:容器目录(绑定挂载)卷的名字:容器目录(命名卷挂载) 镜像名称 

-d不会占用当前终端,-p是将宿主主机端口转发到容器端口实现访问。需要注意某些容器运行时需要-e添加对应参数才能进行(项目手册基本会有说明)--name myname可以给容器自定义唯一名字。-it 让我的终端进入容器工作 --rm当容器停止就删除容器。--restart always/unless-stopped前者是只要容器停止就重启后者手动关闭容器不重启。

查看正在运行的容器:

1
sudo docker ps

如果加上-a就是查看所有容器无论是否在运行

docker创建挂载卷:

1
docker volume create 卷的名字

这样就可以在宿主机部分直接使用挂载卷名字了,同时也可以查看挂载卷在宿主机上的目录:

1
sudo docker volume imspect 挂载卷名字

tip:进入该目录需要sudo -i进入root用户才能够进行

关于卷的管理

查看所有创建过的卷:

1
sudo docker volume list

删除一个卷:
1
sudo docker volume rm 卷名

删除所有没有容器使用的卷
1
sudo docker volume prune -a

删除容器

1
sudo docker rm -f ps中显示的容器id

正在运行的容器必须是使用-f

控制容器状态

因为使用docker run默认是会创建一个容器,那麽控制一个容器的启动和停止运用以下指令:
终止

1
sudo docker stop 容器名/id

启动
1
sudo docker start 名字/id

查看容器信息

1
sudo docker inspect 名称/id

查看容器日志:

1
sudo docker logs id

后面加上-f可以滚动查看日志

在容器中执行linux命令

1
docker exec id linux命令

深入调试:

1
docker exec id /bin/sh

容器内软件安装

查看容器linux发行版本

1
cat /etc/os-release

然后按照发行版的安装办法进行安装就行

Dockerfile

为你的项目创建一个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
# 指定基础镜像(推荐使用官方镜像)
FROM python:3.11-slim-bullseye

# 设置元数据(可选)
LABEL maintainer="your.email@example.com"
LABEL version="1.0"
LABEL description="Production-ready Python application"

# 设置环境变量(推荐使用ENV)
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
ENV APP_HOME=/app

# 创建工作目录并设置为工作路径
WORKDIR $APP_HOME

# 安装系统依赖(apt示例)
RUN apt-get update && \
apt-get install -y --no-install-recommends \
build-essential \
libpq-dev \
&& apt-get clean && \
rm -rf /var/lib/apt/lists/*

# 复制依赖文件并安装Python依赖(利用Docker缓存层)
COPY requirements.txt ./
RUN pip install --no-cache-dir --upgrade pip && \
pip install --no-cache-dir -r requirements.txt

# 复制应用代码(放在依赖安装之后以利用缓存)
COPY . .

# 设置非root用户(安全最佳实践)
RUN groupadd -r appuser && useradd -r -g appuser appuser
USER appuser

# 暴露端口(容器运行时监听端口)
EXPOSE 8000

# 设置健康检查(容器健康状态监控)
HEALTHCHECK --interval=30s --timeout=3s \
CMD curl -f http://localhost:8000/health || exit 1

# 设置容器启动命令(使用数组形式)
CMD ["gunicorn", "--bind", ":8000", "app.wsgi"]