Docker相关技术

# Docker的原理 

Docker是一种开源的容器化平台,旨在简化应用程序的部署和管理。其主要原理包括以下几个方面: 

1. 容器化技术:Docker使用容器(Containers)来隔离应用程序及其依赖环境。每个容器都是一个轻量级、独立的可运行环境,包含应用程序所需的所有依赖库。 

2. 镜像(Images):镜像是一个只读的模板,包含运行应用程序所需的所有内容(如代码、库、环境变量等)。容器是从镜像启动的。 

3. Docker引擎(Docker Engine):这是Docker的核心组件,负责构建、运行和管理容器。它包括守护进程(Docker Daemon),用于管理容器和镜像,以及命令行界面(CLI),用户通过它与Docker进行交互。 

4. 文件系统层(Union File System):Docker使用分层文件系统,如AUFS、OverlayFS等,每一层都是只读的,只有最上层是可写的。这种分层机制允许镜像复用,节省存储空间和加快构建速度。 

5. 网络和存储管理:Docker提供了一套完整的网络管理方案,包括桥接网络、覆盖网络和macvlan网络等,以及数据卷(Volumes)用于持久化存储。

 # Docker的安装 

## 在Linux上安装Docker 

1. 更新apt包索引并安装必要的软件包:

    sudo apt-get update

    sudo apt-get install apt-transport-https ca-certificates curl software-properties-common

 

2. 添加Docker官方GPG密钥:

    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -   

 

3. 设置稳定版的Docker仓库:

    sudo add-apt-repository \

       "deb [arch=amd64] https://download.docker.com/linux/ubuntu \

       $(lsb_release -cs) \

       stable"  

 

4. 安装Docker Engine:

    sudo apt-get update

    sudo apt-get install docker-ce docker-ce-cli containerd.io    

 

5. 验证安装是否成功:

    sudo docker --version   

 

## 在Windows上安装Docker 

1. 下载Docker Desktop:从Docker官网([Docker官方链接](https://www.docker.com/products/docker-desktop))下载Docker Desktop的安装包。 

2. 运行安装程序:按照提示完成安装。 

3. 启动Docker Desktop:安装完成后,启动Docker Desktop,并根据需要进行初始配置。

 4. 验证安装是否成功:

    docker --version   

 

# Docker常用指令 

以下是一些常用的Docker命令: 

1. 镜像管理:

    - 拉取镜像:

        docker pull <image_name>        

    - 查看本地镜像:

        docker images        

    - 删除本地镜像:

        docker rmi <image_name>       

 

2. 容器管理:

    - 启动容器:

        docker run -d --name <container_name> <image_name>        

    - 停止容器:

        docker stop <container_name>        

    - 启动已停止的容器:

        docker start <container_name>        

    - 查看运行中的容器:

        docker ps        

    - 查看所有容器(包括停止的):

        docker ps -a        

    - 删除容器:

        docker rm <container_name>      

 

3. 进入容器:

    - 进入正在运行的容器的终端:

        docker exec -it <container_name> /bin/bash       

 

4. 构建镜像:

    - 通过Dockerfile构建镜像:

        docker build -t <image_name> .       

 

5. 日志和监控:

    - 查看容器日志:

        docker logs <container_name>        

    - 实时监控容器资源使用情况:

        docker stats      

 

6. 网络管理:

 

    - 创建网络:

        docker network create <network_name>        

    - 查看网络:

        docker network ls        

    - 删除网络:

        docker network rm <network_name>      

 

通过掌握这些基本命令和原理,可以高效地使用Docker来管理和部署应用程序。

 

 

 版本二 

Docker 是一个开源的应用容器引擎,它允许开发者打包他们的应用以及应用的运行环境到一个可移植的容器中,然后可以在任何支持Docker的机器上运行这个容器。Docker 使用 Linux 容器(LXC)技术,但提供了比传统容器更加易用的工作流和用户界面。

# Docker 原理

1. 容器化:Docker 通过容器化技术将应用和其依赖打包在一起,实现应用的快速部署和迁移。 

2. 镜像:Docker 镜像是一个只读模板,包含了运行应用所需的所有内容(代码、运行时、库、环境变量和配置文件)。 

3. 容器:容器是镜像的运行实例,可以启动、停止、移动和删除。 

4. 仓库:Docker 仓库是集中存放镜像的地方,可以是公开的如 Docker Hub,也可以是私有的。 

5. Dockerfile:Dockerfile 是一个文本文件,包含了一系列的指令,用于自动化构建 Docker 镜像。 

# Docker 安装

Docker 的安装步骤因操作系统而异,以下是在 Ubuntu 和 CentOS 上安装 Docker 的基本步骤: 

1. 更新包索引: 

   - Ubuntu: sudo apt-get update 

   - CentOS: sudo yum update 

2. 安装依赖: 

   - Ubuntu: sudo apt-get install apt-transport-https ca-certificates curl software-properties-common 

   - CentOS: sudo yum install yum-utils device-mapper-persistent-data lvm2 

3. 添加 Docker 的官方 GPG 密钥:   

   curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - 

4. 设置 Docker 仓库: 

   - Ubuntu: sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" 

   - CentOS: sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo 

5. 再次更新包索引: 

   - Ubuntu: sudo apt-get update 

   - CentOS: sudo yum makecache fast 

6. 安装 Docker:

   - sudo apt-get install docker-ce 

7. 验证 Docker 是否正确安装: 

   - sudo docker run hello-world(这会下载一个测试镜像并运行一个容器) 

# Docker 常用指令 

以下是一些常用的 Docker 指令: 

- 查看 Docker 版本:docker --version 

- 启动 Docker 服务:sudo systemctl start docker 

- 停止 Docker 服务:sudo systemctl stop docker 

- 查看正在运行的容器:docker ps 

- 查看所有容器(包括停止的):docker ps -a 

- 运行一个容器:docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...} 

- 停止一个容器:docker stop CONTAINER_ID_OR_NAME

- 启动一个已停止的容器:docker start CONTAINER_ID_OR_NAME 

- 删除一个容器:docker rm CONTAINER_ID_OR_NAME 

- 查看容器日志:docker logs CONTAINER_ID_OR_NAME 

- 进入容器内部:docker exec -it CONTAINER_ID_OR_NAME /bin/bash 

- 构建镜像:docker build -t TAG_PATH . 

- 推送镜像到仓库:docker push USERNAME/REPOSITORY:TAG 

- 拉取镜像:docker pull USERNAME/REPOSITORY:TAG 

- 查看镜像列表:docker images 

- 删除镜像:docker rmi IMAGE_ID_OR_NAME 

这些只是 Docker 的一些基础概念和常用命令,Docker 的功能非常丰富,可以通过阅读官方文档或者使用 docker --help 来获取更多信息。

 Docker网络  

Docker中的网络管理功能是Docker容器通信和连接的关键部分。Docker提供了几种不同类型的网络,允许用户创建、管理和配置容器之间的网络连接。这些网络类型包括桥接网络(bridge)、主机网络(host)、无网络(none)和自定义用户定义网络(如覆盖网络overlay和macvlan)。 

# Docker 网络类型 

1. 桥接网络(Bridge Network): 

    - 描述:这是Docker默认创建的网络类型。每个容器都会连接到一个默认的桥接网络。 

    - 用途:适合多个容器在同一主机上通信。 

    - 命令:         

        docker network create --driver bridge my_bridge_network         

    - 示例:         

        docker run -d --name container1 --network my_bridge_network my_image 

        docker run -d --name container2 --network my_bridge_network my_image         

2. 主机网络(Host Network): 

    - 描述:容器将直接使用主机的网络堆栈,不会进行网络隔离。 

    - 用途:适合需要高性能网络通信的场景,但不适合需要网络隔离的情况。 

    - 命令:         

        docker run --rm -d --network host my_image         

3. 无网络(None Network): 

    - 描述:容器不连接到任何网络。 

    - 用途:适合完全独立的任务,不需要网络通信。 

    - 命令:         

        docker run --rm -d --network none my_image         

4. 覆盖网络(Overlay Network): 

    - 描述:用于跨多个Docker主机的容器通信,通常与Docker Swarm或Kubernetes配合使用。 

    - 用途:适合分布式集群和服务。 

    - 命令:         

        docker network create --driver overlay my_overlay_network         

5. macvlan网络(Macvlan Network): 

    - 描述:允许容器直接使用物理网络接口的MAC地址。 

    - 用途:适合需要直接与物理网络设备通信的场景。 

    - 命令:         

        docker network create -d macvlan \ 

        --subnet=192.168.1.0/24 \ 

        --gateway=192.168.1.1 \ 

        -o parent=eth0 my_macvlan_network 

# Docker 网络管理命令 

1. 创建网络: 

    - 创建桥接网络:         

        docker network create --driver bridge my_bridge_network         

    - 创建覆盖网络:         

        docker network create --driver overlay my_overlay_network 

2. 查看网络: 

    - 查看所有网络:         

        docker network ls         

    - 查看指定网络的详细信息:         

        docker network inspect my_bridge_network         

3. 连接容器到网络: 

    - 启动容器并连接到指定网络: 

        docker run -d --name my_container --network my_bridge_network my_image         

    - 将现有容器连接到指定网络:         

        docker network connect my_bridge_network my_container         

4. 断开容器与网络的连接: 

    - 断开容器与指定网络的连接:         

        docker network disconnect my_bridge_network my_container        

5. 删除网络: 

    - 删除指定网络:         

        docker network rm my_bridge_network         

通过这些命令和网络类型,Docker用户可以灵活地配置和管理容器之间的网络连接,满足不同应用场景的需求。

 

 Docker的文件系统

 

在Docker中,文件系统的管理和使用是通过镜像(Images)和容器(Containers)来实现的。每个Docker镜像包含一组分层的文件系统,这些文件系统会在容器启动时组合成一个统一的文件系统供容器使用。 

# Docker镜像和文件系统层次结构 

Docker镜像使用一种称为联合文件系统(Union File System)的技术,这种技术允许将多个文件系统层合并成一个。这些层是只读的,只有最上面的层是可写的,当一个容器从镜像启动时,会创建一个新的可写层。 

# 创建和管理Docker文件系统的步骤 

## 1. 创建Dockerfile 

Dockerfile是一个文本文件,包含了构建镜像的所有命令。每一条指令都会创建一个新的文件系统层。 

示例Dockerfile:

Dockerfile

# 使用官方的Ubuntu基础镜像

FROM ubuntu:latest 

# 维护者信息

MAINTAINER Your Name <your.email@example.com> 

# 更新并安装一些软件包

RUN apt-get update && apt-get install -y \

    curl \

    vim 

# 创建一个目录

RUN mkdir -p /usr/src/app 

# 设置工作目录

WORKDIR /usr/src/app 

# 复制当前目录内容到工作目录

COPY . /usr/src/app 

# 暴露端口

EXPOSE 8080 

# 运行命令

CMD ["echo", "Hello, Docker!"] 

## 2. 构建镜像 

使用Dockerfile构建镜像:

docker build -t my_ubuntu_image . 

此命令会读取当前目录中的Dockerfile,并基于其指令构建一个名为my_ubuntu_image的镜像。

 ## 3. 启动容器 

从镜像启动容器:

docker run -it --name my_ubuntu_container my_ubuntu_image 

此命令会启动一个名为my_ubuntu_container的容器,并进入交互模式。 

## 4. 管理容器的文件系统 

进入正在运行的容器:

docker exec -it my_ubuntu_container /bin/bash

在容器中查看和操作文件系统:

# 查看文件系统层

ls /usr/src/app 

# 创建新文件

touch /usr/src/app/new_file.txt 

# 编辑文件

vim /usr/src/app/new_file.txt 

## 5. 持久化数据 

容器内的数据默认是临时的,重启或删除容器会丢失数据。为了解决这个问题,可以使用卷(Volumes)或绑定挂载(Bind Mounts)。 

使用卷(Volumes):

docker volume create my_volume 

docker run -it --name my_ubuntu_container -v my_volume:/usr/src/app my_ubuntu_image 

此命令会创建一个名为my_volume的卷,并将其挂载到容器的/usr/src/app目录。 

使用绑定挂载(Bind Mounts):

docker run -it --name my_ubuntu_container -v /path/on/host:/usr/src/app my_ubuntu_image 

此命令会将主机上的/path/on/host目录绑定到容器的/usr/src/app目录。 

# 文件系统操作总结 

- Dockerfile:定义镜像的构建步骤,每个指令都会创建一个新的文件系统层。

- 镜像构建:通过docker build命令构建镜像,镜像由多个只读层组成。

- 启动容器:通过docker run命令启动容器,容器从镜像创建,并增加一个可写层。

- 管理文件系统:通过容器内的命令行操作文件系统,卷和绑定挂载用于数据持久化。 

通过这些步骤,您可以灵活地管理Docker容器的文件系统,确保数据的持久性和容器的高效运行。

posted @ 2024-06-22 15:57  Augustone  阅读(12)  评论(0)    收藏  举报