您的位置:首页 > 文旅 > 旅游 > docker

docker

2024/10/6 8:27:00 来源:https://blog.csdn.net/weixin_63168851/article/details/140153771  浏览:    关键词:docker

1、docker 介绍

1、docker

Docker 是一个开源的平台,用于开发、部署和运行应用程序的容器化技术。它通过将应用程序及其所有依赖项打包到一个标准化的单元(容器)中,使得应用程序可以在任何环境中一致地运行,无论是开发环境、测试环境还是生产环境。Docker 的主要优势在于它简化了应用程序的分发和管理,提高了开发和运维的效率。

2、docker 的主要组件

Docker 引擎(Docker Engine)

  • Docker Daemon:运行在主机上的后台服务,负责管理 Docker 容器的创建、运行、停止和删除。
  • Docker Client:命令行工具,用于与 Docker Daemon 进行交互。
  • Docker API:提供编程接口,允许其他工具与 Docker 进行集成。

镜像(Images)

  • Docker 镜像是只读的模板,用于创建容器。镜像包含了运行应用程序所需的一切,包括代码、运行时、库和配置文件。用户可以从 Docker Hub 拉取公共镜像,或者根据自己的需要创建定制镜像。

容器(Containers)

  • 容器是运行时的实例,由镜像创建而来。每个容器是一个独立的进程空间,包含了运行应用程序所需的所有内容。容器之间相互隔离,但可以通过定义的接口进行通信。

仓库(Repositories)

  • 仓库用于存储和分发 Docker 镜像。Docker Hub 是一个公共的镜像仓库,用户可以在上面查找和下载各种官方和社区提供的镜像。此外,用户也可以搭建私有仓库来管理自己的镜像。

3、Docker 的主要功能和优势

  • 轻量级虚拟化

    • Docker 容器共享宿主机的操作系统内核,不需要像虚拟机那样启动一个完整的操作系统,因此启动速度快,占用资源少。
  • 一致性和可移植性

    • Docker 容器包含了应用程序运行所需的所有依赖项,因此可以在任何环境中一致地运行,从开发环境到生产环境都能保持一致。
  • 高效的资源利用

    • 由于容器共享操作系统内核,相比传统的虚拟机,Docker 容器更加高效地利用系统资源,能够在同样的硬件上运行更多的实例。
  • 简化的管理和部署

    • Docker 提供了强大的工具集和生态系统,简化了应用程序的构建、打包、分发和部署。通过 Docker Compose,可以定义和运行多容器应用,使得复杂的应用管理变得更加简单。

4、docker 的应用场景

  • 微服务架构

    • Docker 非常适合构建和部署微服务架构,每个微服务可以打包到一个独立的容器中,方便管理和扩展。
  • 持续集成和持续部署(CI/CD)

    • Docker 可以与 CI/CD 工具集成,实现自动化构建、测试和部署流程,提高开发和运维的效率。
  • 开发和测试环境

    • 开发人员可以使用 Docker 容器快速创建隔离的开发和测试环境,避免环境依赖问题,提高开发效率。
  • 混合云和多云部署

    • 由于容器的可移植性,Docker 可以方便地在不同的云环境中部署应用,实现混合云和多云策略。

2、容器操作基础命令

1、拉取镜像

# docker pull <image_name>:<tag>  # 不写<tag>,默认拉取最新版本

2、上传镜像

# docker push <image_name>:<tag>

3、运行容器

# docker run -it ubuntu:latest /bin/bash

4、列出正在运行的容器

# docker ps# docker ps -a   # 所有容器,包括停止的容器

5、停止容器

# docker stop <container_id_or_name>

6、启动已停止的容器

# docker start <container_id_or_name>

7、重启容器

# docker restart <container_id_or_name>

8、删除容器

# docker rm <container_id_or_name>

9、查看容器日志

# docker logs <container_id_or_name>

10、进入运行中的容器

# docker exec -it <container_id_or_name> /bin/bash

11、复制文件到容器

# docker cp <host_path> <container_id_or_name>:<container_path>

12、查看详细内容

# docker inspect <容器ID或名称>

3、Docker 镜像制作和管理

Docker 镜像是用于创建容器的模板文件,它包含了运行应用程序所需的所有内容(代码、运行时、库、环境变量等)。

1、制作镜像

1、使用 Dockerfile 创建镜像

# 使用官方的 Ubuntu 基础镜像
FROM ubuntu:latest# 维护者信息
MAINTAINER Your Name <your.email@example.com># 更新包列表并安装一些包
RUN apt-get update && apt-get install -y \python3 \python3-pip# 复制当前目录内容到容器中的 /app 目录
COPY . /app# 设置工作目录
WORKDIR /app# 安装 Python 依赖
RUN pip3 install -r requirements.txt# 暴露端口
EXPOSE 5000# 定义环境变量
ENV NAME World# 容器启动时运行的命令
CMD ["python3", "app.py"]

2、构建镜像

# docker build -t my-python-app .-t :指定镜像标签(名称)。
.  :上下文路径,当前目录。

3、使用已有容器创建镜像

# docker run -it ubuntu:latest /bin/bash在容器内进行修改,比如安装一些软件包。
提交容器创建镜像:
# docker commit <container_id> my_custom_ubuntu

2、管理 docker 镜像

1、列出本地镜像

# docker images

2、删除镜像

# docker rmi <image_id>

3、镜像打标签

# docker push my-repo/my-image:my-tag

3、制作和管理一个简单的 Nginx 应用镜像

1、创建项目目录和文件

# mkdir my-nginx-app
# cd my-nginx-app

2、创建 Nginx 配置文件

# nginx.confevents {}http {server {listen 80;server_name localhost;location / {root /usr/share/nginx/html;index index.html;}}
}----------------------------------------------------------------------------
不了解nginx,可以看如下完整的请求处理流程:
用户访问 http://localhost/。
Nginx 监听端口 80,匹配到 server 块,因为 server_name 是 localhost。
请求路径 / 与 location / 块匹配。
Nginx 在 root 指定的目录 /usr/share/nginx/html 中查找文件。
找到 index.html 文件,并根据 index 指令返回该文件内容。

3、创建静态文件

# 和 nginx.conf 同一目录创建静态文件<!-- index.html --><!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>My Nginx App</title>
</head>
<body><h1>Hello, Nginx!</h1><p>Welcome to my Nginx application.</p>
</body>
</html>

4、创建 Dockerfile

# Dockerfile# 使用官方的 Nginx 镜像作为基础镜像
FROM nginx:latest# 将自定义的 nginx.conf 文件复制到镜像中的 /etc/nginx/nginx.conf
COPY nginx.conf /etc/nginx/nginx.conf# 将 index.html 文件复制到镜像中的 /usr/share/nginx/html
COPY index.html /usr/share/nginx/html/index.html# 暴露容器的 80 端口
EXPOSE 80# 容器启动时自动运行 nginx
CMD ["nginx", "-g", "daemon off;"]

 5、构建 Docker 镜像

# docker build -t my-nginx-app .

 6、运行容器

# docker run -d -p 8080:80 my-nginx-app

 7、访问 Nginx 应用

打开浏览器访问 http://localhost:8080,应该能看到 index.html 中的内容。

4、Docker 数据管理

1、数据卷

数据卷是 Docker 中最常用的数据管理方式之一,它有以下特点:

  • 持久性:数据卷独立于容器生命周期,即使容器被删除,数据也可以保留。
  • 共享和重用:多个容器可以共享同一个数据卷,便于数据在不同容器间传递和共享。
# 创建一个名为 mydata 的数据卷
docker volume create mydata# 运行一个容器并将 mydata 数据卷挂载到 /data 目录
docker run -d --name mycontainer -v mydata:/data nginx

2、绑定挂载

绑定挂载允许将主机上的特定路径挂载到容器内部,这对于开发和调试特别有用,它具有以下特点:

  • 灵活性:可以直接使用主机文件系统中的数据,无需复制到容器中。
  • 实时性:对主机文件系统的更改立即在容器内部可见。
# 将主机上的 /opt/app 数据绑定挂载到运行的容器的 /app 目录
docker run -d --name app -v /opt/app:/app myapp:latest

3、匿名挂载

匿名挂载是一种临时的数据卷,Docker 会为其分配一个随机的路径,并在容器删除时自动清理。它适合存储临时数据或不需要持久化的数据。

# 创建一个使用匿名挂载的容器
docker run -d --name tempcontainer -v /data alpine

4、数据卷容器

数据卷容器是一种通过专门的容器来管理和共享数据卷的方式,其他容器可以通过挂载这个数据卷容器来访问数据。

# 创建一个数据卷容器
docker create -v /data --name datavolume alpine /bin/true# 使用数据卷容器在其他容器中共享数据
docker run -d --name container1 --volumes-from datavolume nginx
docker run -d --name container2 --volumes-from datavolume busybox

5、Docker 网络管理

1、none 网络模式

none 网络模式下,容器没有网络接口,只能使用 localhost 进行通信。适用于不需要网络功能的容器。

# 使用 none 网络模式运行容器
docker run -d --name nonet_container --network none nginx

2、bridge 网络模式

默认的桥接网络模式,为每个容器分配一个虚拟网络接口和 IP 地址,容器可以通过 IP 地址或容器名称相互通信。

# 使用默认的 bridge 网络模式运行容器
docker run -d --name bridge_container1 nginx
docker run -d --name bridge_container2 nginx# 检查容器的 IP 地址
docker inspect bridge_container1 | grep IPAddress
docker inspect bridge_container2 | grep IPAddress

3、container 网络模式

container 网络模式下,新的容器共享指定容器的网络命名空间,两个容器将共享同一个 IP 地址和网络配置。

# 先运行一个容器
docker run -d --name container_net1 nginx# 运行另一个容器,共享 container_net1 的网络命名空间
docker run -d --name container_net2 --network container:container_net1 busybox top# 检查两个容器的网络配置
docker inspect container_net1 | grep IPAddress
docker inspect container_net2 | grep IPAddress

4、host 网络模式

host 网络模式下,容器直接使用主机的网络命名空间,容器和主机共享网络接口。适用于需要高网络性能的场景。

# 使用 host 网络模式运行容器
docker run -d --name host_net_container --network host nginx

5、自定义网络(network-name

自定义网络允许用户创建和管理自己的 Docker 网络,并可以指定网络的子网、网关等配置,提供更多的灵活性和控制。

# 创建一个自定义网络 my_custom_network
docker network create my_custom_network# 在自定义网络中运行容器
docker run -d --name custom_net_container1 --network my_custom_network nginx
docker run -d --name custom_net_container2 --network my_custom_network nginx# 检查容器的 IP 地址
docker inspect custom_net_container1 | grep IPAddress
docker inspect custom_net_container2 | grep IPAddress

6、Docker Compose 容器单机编排 ( Kubernetes )

Docker Compose 是一个用于定义和运行多容器 Docker 应用的工具。通过一个 YAML 文件,您可以配置应用的服务、网络和卷,并使用简单的命令来管理整个应用的生命周期。

1、创建一个目录来存放 docker-compose.yml 文件和相关资源
# mkdir myapp
# cd myapp2、创建一个 docker-compose.yml 文件version: '3.8'services:web:image: nginx:latestports:- "8080:80"volumes:- ./html:/usr/share/nginx/htmlnetworks:- mynetworkdb:image: mysql:latestenvironment:MYSQL_ROOT_PASSWORD: exampleMYSQL_DATABASE: exampledbMYSQL_USER: exampleuserMYSQL_PASSWORD: examplepassvolumes:- db_data:/var/lib/mysqlnetworks:- mynetworkvolumes:db_data:networks:mynetwork:# 解释 docker-compose.yml
version: 指定 Docker Compose 文件的版本。
services: 定义应用中的两个服务 web 和 db。
web: 使用 Nginx 镜像,映射主机的 8080 端口到容器的 80 端口,并挂载主机目录 ./html 到容器的 /usr/share/nginx/html 目录。
db: 使用 MySQL 镜像,设置环境变量来配置数据库,并使用名为 db_data 的卷来存储数据库数据。
volumes: 定义持久化存储卷 db_data。
networks: 定义名为 mynetwork 的自定义网络,web 和 db 服务都将连接到这个网络。3、为了使 Nginx 服务能够找到 HTML 文件,需要创建 html 目录并添加一些文件
mkdir html
echo "<h1>Hello, Docker Compose!</h1>" > html/index.html4、启动应用
docker-compose up -d5、查看运行中的容器
docker-compose ps

7、Docker 仓库管理

Docker 仓库(Docker Registry)管理是指使用和管理存储 Docker 镜像的仓库。Docker Hub 是最广泛使用的公共 Docker 镜像仓库,但您也可以使用私有仓库。

1、Docker Hub

1、首先,需要登录 Docker Hub:docker login   # 输入您的 Docker Hub 用户名和密码2、推送镜像到 Docker Hub
docker build -t <your-username>/my-app:1.0 .  # 构建
docker push <your-username>/my-app:1.0        # 推送3、从 Docker Hub 拉取镜像
docker pull <your-username>/my-app:1.0

2、私有 Docker

如果您需要存储私有镜像,可以设置一个私有 Docker 注册表。Docker 提供一个官方的注册表镜像 registry,可以在本地或远程服务器上运行。

使用 Docker 启动一个私有注册表
docker run -d -p 5000:5000 --name my-registry registry:2构建 Docker 镜像:
docker build -t localhost:5000/my-app:1.0 .推送镜像到私有注册表:
docker push localhost:5000/my-app:1.0从私有注册表拉取镜像
docker pull localhost:5000/my-app:1.0

3、Docker 之分布式仓库 Harbor (我用Harbor多)

Harbor ( 港口 , 海港 ) 是一个用于存储和分发 Docker 镜像的企业级 Registry 服务器,由 VMware 开源,其通过添加一些企业必需的功能特性,例如安全、标识和管理等,扩展了开源 Docker Distribution 。作为一 个企业级私有 Registry 服务器, Harbor 提供了更好的性能和安全。提升用户使用 Registry 构建和运行环 境传输镜像的效率。 Harbor 支持安装在多个 Registry 节点的镜像资源复制,镜像全部保存在私有 Registry 中, 确保数据和知识产权在公司内部网络中管控,另外, Harbor 也提供了高级的安全特性,诸 如用户管理,访问控制和活动审计等
如果想安装,可以私信我。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com