容器相关知识

一. 容器与虚拟对比图

在这里插入图片描述

  • 容器特点:
    1.容器是一种特殊的进程(没有被封装)。由Linux Namae space, Linux Cgroups, rootfs 这三种技术构建而成。
    2.Linux Namae space 负责隔离,原理为让容器不能看到宿主机的进程信息。
    3.Linux Cgroups 负责容器使用的资源。
    4.rootfs 是一个包含操作系统文件/目录/配置,但是不包含内核,因此内核将被众多容器共享使用。

二. Docker 容器示意图

在这里插入图片描述
rootfs 由只读层/Init层/可读写层,三层构成。
只读层:即封装镜像是包含文件和内容。
Init层:由可临时修改的文件构成,但不会被打包到新的镜像中。
可读写层:数据的存放,即应用级别的更新。

三. Docker 常用命令

1.启动容器示例:
docker run -d --name my-container \
  -p 8080:80 \
  -v /path/to/host:/path/to/container \
  -e MY_VAR=My_Value \
  -w /path/to/workdir \
  --rm \
  --attach my-existing-container \
  my-image
  • 参数解释:
    -d:后台运行容器。这意味着 Docker 容器将在启动时运行在后台模式。
    --name my-container: 为容器指定一个友好的名称。这样可以方便地通过这个名称来管理和停止容器。
    -p 8080:80:将宿主机的端口8080映射到容器内部的端口80。这允许你从外部访问容器中的服务。
    -v /path/to/host:/path/to/container: 绑定宿主机的目录到容器内部。这样可以共享文件和数据之间的容器与宿主机之间。
    -e MY_VAR=My_Value:设置环境变量。这个值在容器内可用,用于配置应用程序。
    -w /path/to/workdir: 为容器指定工作目录。这是容器内部命令执行和文件操作的起点。
    --rm: 在容器停止后自动删除它。这可以帮助管理磁盘空间,确保只存在活跃的容器。
    --attach my-existing-container:附加到已经存在的容器。这个参数允许你在新启动的容器中继承现有容器的标准输入、输出和错误(STDIN, STDOUT 和 STDERR)。
    my-image: 指定要使用的 Docker 镜像名称或 ID。这是 Docker 容器将基于的基础镜像。
2.列出所有容器 :

docker ps:显示当前正在运行的容器列表。
docker ps --all:包括所有历史记录的容器。

3.创建或删除容器 :

docker run <image_name>:创建并启动一个新的容器,从指定的镜像开始。
docker rm <container_id>:移除一个或多个已停止的容器。

4.查看和编辑容器日志 :

docker logs <container_name>:查看容器日志。
docker exec -it <container_name> bash:进入正在运行的容器并打开 shell。

5.列出所有镜像 :

docker images:显示本地存储的镜像列表。

6.创建或删除镜像 :

docker build -t <image_name> .:从当前目录构建一个新的镜像。
docker rmi <image_id>:移除一个或多个镜像。

7.导出和导入容器或镜像 :

docker save <image_id> > image.tar:将镜像保存到文件中。
docker load < image.tar:从文件中加载镜像。

8.检查资源使用情况 :

docker system df:显示 Docker 系统的磁盘使用情况。
docker stats <container_name>:查看容器的实时资源使用情况。

9.创建和删除网络 :

docker network create <network_name>:创建一个新的 Docker 网络。
docker network rm <network_id>:移除一个或多个网络。

10.其他命令 :

docker info:显示 Docker 引擎的信息。
docker version:显示 Docker 的版本信息。

四. Dockerfile 的编写

# 基础镜像,通常是最新的稳定版本
FROM python:latest

# 设置工作目录到 /app
WORKDIR /app

# 复制当前目录内容到容器的 /app 目录中
COPY . /app

# 安装依赖
RUN pip install -r requirements.txt

# 使命令在启动时运行 hello_world.py
CMD ["python", "hello_world.py"]
  • 以下是 Dockerfile 中每一行代码的解释:
    FROM python:latest:指定了这个镜像应该基于官方 Python 镜像的最新稳定版本。使用 :latest 可以确保你总是使用最新版本的 Python。
    WORKDIR /app:设置了容器内部的工作目录为 /app。所有后续的命令和复制都会在这个目录下执行。
    COPY . /app:复制当前构建上下文中的内容到容器内部的 /app 目录中。这意味着你可以在 Dockerfile 的同一目录下放置你的应用程序代码和任何依赖文件,然后在运行 docker build 命令时,Docker 会将这些文件复制到容器中。
    RUN pip install -r requirements.txt:这个命令会在构建镜像的过程中运行。它会读取 /app/requirements.txt 文件中的依赖项,并使用 pip 安装它们。这通常包含了你应用程序所需的所有外部库。
    CMD ["python", "hello_world.py"]:这指定了容器启动时应该执行的默认命令。这里,我们告诉 Docker 使用 Python 解释器来运行 /app/hello_world.py 文件。这个命令将会在没有提供其他命令的时候自动运行。
1. 构建镜像:

docker build -t my-python-app .
这条命令会在当前目录下查找 Dockerfile,并根据其中的指令构建一个名为 my-python-app 的镜像。. 表示构建上下文,即 Dockerfile 所在的文件夹及其内容。

2.运行容器:

docker run -it --name my-container my-python-app
这条命令将启动一个新容器,使用名称 my-container,并且会保持连接(-it),这样你可以看到容器内部的输出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值