一. 容器与虚拟对比图

- 容器特点:
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),这样你可以看到容器内部的输出。

1143

被折叠的 条评论
为什么被折叠?



