Docker概念及基础使用

这篇具有很好参考价值的文章主要介绍了Docker概念及基础使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Docker概念及基础使用


一,首先什么是Docker?

Docker是一种开源的容器化平台,用于快速,简单的构建,发布和运行应用程序。它可以将程序进行打包到一个为容器的独立环境运行。它可以在任何环境中以相同的方式运行。与虚拟机不同,容器共享主机操作系统内核,更加轻量级。

二,使用Docker的好处?

通过Docker,开发人员可以更加快速的构建环境。用于解决平时环境搭建,环境测试,集群测试,环境不同等问题。同时运维人员可以更加方便的进行扩展和管理应用程序。而且Docker所带来的隔离性对部署的环境也更加安全。

三,为什么说Docker安全?

Docker利用Linux内核命名空间和控制组功能来实现容器之间的隔离性。每个容器都有自己的文件系统,进程,网络等。与主机隔离从而减少攻击。其次轻量级意味这运行更快,资源消耗更低,同时减少了表面攻击。其次Docker提供了签名和验证的机制,确保镜像的完整性和来源可信性。

四,Docker基本组成及架构?

  1. Docker Client 客户端
  2. Docker daemon 守护进程
  3. Docker Container 容器
  4. Docker Image 镜像
  5. Docker Registry 仓库

Docker是C/S(客户端client-服务器server)架构模式。客户端连接守护进程,再通过命令向守护进程发起请求,守护进程通过一系列操作返回结果。客户端可以连接本地或远程的守护进程,客户端和服务器通过socket或API进行通信。

客户端——连接守护进程——守护进程对容器进行管理——容器的启动需要拉去镜像——镜像的存放地点是仓库
Docker概念及基础使用,docker,容器,运维

通俗说法:

主要记住:仓库,镜像,容器。

就好比你做一道菜(容器)——做出的菜谱(镜像)——菜谱量产公之于众(仓库)

指令与参数:
  1. docker run: 运行一个容器。
    • -d:在后台运行容器。
    • -it:交互式地运行容器。
    • --name:指定容器的名称。
    • --rm:容器停止后自动删除。
    • -v:挂载卷到容器。
    • -p:将主机端口映射到容器端口。
    • --network:指定容器连接的网络。
    • --env:设置环境变量。
    • --restart:设置容器重启策略。
  2. docker build: 根据 Dockerfile 构建一个镜像。
    • -t:给镜像指定一个标签。
  3. docker pull: 从镜像仓库拉取一个镜像。
  4. docker push: 将一个镜像推送到镜像仓库。
  5. docker images: 列出本地所有镜像。
  6. docker ps: 列出正在运行的容器。
    • -a:列出所有容器,包括停止的。
  7. docker logs: 查看容器的日志。
  8. docker exec: 在运行的容器中执行命令。
    • -it:交互式地执行命令。
  9. docker stop: 停止一个运行中的容器。
    • -t:指定等待容器停止的超时时间。
  10. docker start: 启动一个停止的容器。
  11. docker restart: 重启一个容器。
  12. docker rm: 删除一个容器。
    • -f:强制删除运行中的容器。
  13. docker rmi: 删除一个镜像。
    • -f:强制删除镜像。
  14. docker container prune: 清理所有停止的容器。
  15. docker image prune: 清理未被使用的镜像。
  16. docker network: 管理 Docker 网络。
  17. docker volume: 管理 Docker 卷。
  18. docker inspect: 查看 Docker 对象的详细信息。

指令运行示例:

docker run --name my-nginx-container -p 80:80 -d nginx

Docker-Compose


**作用:**是一个用于定义和运行多容器Docker的应用工具,运行使用YAML文件的形式来配置应用程序。然后通过命令可以启动所有服务。

特性:

  • 语法简单:使用简单的YAML文件定义应用程序,网络,卷。
  • 多容器管理:可以对容器进行批量操作,如启动,停止,启动删除。管理更加方便。
  • 服务依赖和连接:可指点服务之间进行依赖关系,确保正确顺序的启动和连接。
  • 环境配置和参数配置:支持使用环境变量和参数化配置使用更灵活。
  • 跨平台支持:可以在各种操作系统上运行,包括 Linux、Windows 和 macOS。
文件前缀:

(常用)

  1. version:指定 Docker Compose 文件的版本号。
  2. services:定义了 Docker 容器的服务列表,每个服务都可以包含一个或多个容器。
  3. image:指定容器所使用的镜像名称。
  4. container_name:定义容器的名称。
  5. ports:定义容器内部端口与主机端口的映射关系。
  6. volumes:定义容器的数据卷,用于持久化存储容器内部的数据。
  7. restart:定义容器退出后的重启策略。

(不常用)

  1. environment:设置容器的环境变量。
  2. networks:定义容器所连接的网络。
  3. depends_on:定义容器之间的依赖关系。
  4. build:指定 Dockerfile 的路径,用于构建镜像。
  5. command:指定容器启动时执行的命令。
  6. healthcheck:定义容器的健康检查。
  7. labels:为容器添加元数据标签。
  8. links:定义容器之间的链接关系。
  9. entrypoint:指定容器的入口点。
  10. logging:定义容器的日志配置。
  11. ulimits:设置容器的资源限制。
  12. tmpfs:将临时文件系统挂载到容器中。
  13. extra_hosts:为容器添加额外的主机名解析。

YAML示例:

version: '3'

services:
  # 定义 Nginx 服务
  nginx:
    image: nginx  # 使用的 Docker 镜像
    container_name: nginx  # 容器名称
    ports:
      - "80:80"  # 将主机的 80 端口映射到容器的 80 端口
    volumes:
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro  # 将主机的 nginx.conf 文件挂载到容器内的 /etc/nginx/nginx.conf,以只读模式
    restart: always  # 容器停止后总是重新启动

指令:(需要在当前yaml所在位置,或通过 -f 路径 进行指定)
  1. docker-compose up: 构建并启动所有服务。
  2. docker-compose down: 停止并移除所有服务。
  3. docker-compose start: 启动已创建但已停止的服务。
  4. docker-compose stop: 停止正在运行的服务,但不会移除容器。
  5. docker-compose restart: 重启所有服务。
  6. docker-compose pause: 暂停正在运行的容器。
  7. docker-compose unpause: 取消暂停正在运行的容器。
  8. docker-compose ps: 显示服务的状态。
  9. docker-compose logs: 查看服务的日志。
  10. docker-compose exec: 在服务容器内执行命令。
  11. docker-compose build: 构建服务。
  12. docker-compose pull: 拉取服务的镜像更新。
  13. docker-compose rm: 移除已停止的服务容器。
  14. docker-compose config: 验证并显示 Docker Compose 文件的配置。
  15. docker-compose version: 显示 Docker Compose 版本信息。

Dockerfile


**作用:**Dockerfile是用来定义docker-image(镜像)。里面包括了一系列指令,以及创建所需要的操作步骤。通过Dockerfile可以构建特定的应用程序。

特性:

  1. 可重复性: Dockerfile 中定义了创建 Docker 镜像步骤,确保了镜像的构建过程是可重复的。这意味着在不同的环境中,只要 Dockerfile 的内容不变,构建的镜像都会保持一致。
  2. 版本控制: Dockerfile 可以与版本控制系统(如 Git)一起使用,方便团队共享和管理。通过将 Dockerfile 存储在版本控制系统中,团队成员可以追踪镜像构建过程的变化,并在需要时进行修改和更新。
  3. 可读性: Dockerfile 使用简单的文本格式编写,易于阅读和理解。每个指令都描述了一个特定的操作步骤,使得整个构建过程清晰可见。
  4. 可定制性: Dockerfile 提供了丰富的指令和选项,允许开发人员对镜像的构建过程进行高度定制。可以根据实际需求选择不同的基础镜像、安装特定的软件包、设置环境变量等。
  5. 缓存机制: Docker 在构建镜像时会利用缓存,如果某个步骤的指令在之前已经执行过并且没有发生变化,那么 Docker 将会复用之前的结果,从而加快构建速度。这一特性使得 Dockerfile 可以高效地构建镜像,节省时间和资源。
  6. 可扩展性: Dockerfile 支持继承和多阶段构建等高级特性,使得构建过程更加灵活和可扩展。通过多阶段构建,可以将应用程序的不同组件分开构建,从而降低镜像的大小和复杂度。
文件前缀:
  1. FROM: 指定基础镜像,后面跟随基础镜像的名称和版本标签。
  2. MAINTAINER: 设置镜像的作者信息(已被弃用,建议使用 LABEL maintainer)。
  3. RUN: 在容器中执行命令,可以用于安装软件包、下载文件等操作。
  4. CMD: 容器启动时执行的默认命令。
  5. EXPOSE: 声明容器运行时监听的端口。
  6. ENV: 设置环境变量。
  7. ADD: 将文件或目录复制到容器中,功能类似于 COPY,但支持自动解压缩。
  8. COPY: 将文件或目录复制到容器中。
  9. ENTRYPOINT: 指定容器启动时执行的命令。
  10. WORKDIR: 设置工作目录,后续的命令都会在这个目录下执行。
  11. USER: 指定运行容器时的用户名或 UID。
  12. VOLUME: 创建一个挂载点,用于让容器访问宿主机上的目录。
  13. ARG: 定义构建参数,用于在构建过程中传递变量。
  14. ONBUILD: 在构建过程中为其他指令设置触发器,即构建子镜像时执行。
  15. STOPSIGNAL: 设置容器停止时发送的信号。
  16. HEALTHCHECK: 检查容器的健康状态。
  17. SHELL: 指定默认的 shell 环境。
  18. LABEL: 添加元数据标签。

构建过程:

这里只是打个比方,所以比较简单,拿go语言举例

第一步:目录建造和结构

go-gin/
├── Dockerfile//必须命名dockerfile
├── go.mod
├── go.sum
└── main.go//主文件

第二步:main.go内容

package main

import (
	"fmt"
	"github.com/gin-gonic/gin"
)

func main() {
	fmt.Println("Hello,Word!")//👈只留这行也可以,主要演示效果
	r := gin.Default()
	r.GET("/ping", func(c *gin.Context) {
		c.JSON(200, gin.H{
			"message": "pong",
		})
	})
	r.Run() // 监听并在 0.0.0.0:8080 上启动服务
}

第三步:dockerfile内容

# 阶段一
# 使用语言版本作为基础构建
FROM golang:1.20.3-alpine as builder

# 为构建阶段设置环境变量
ENV GOOS linux
ENV GOPROXY https://goproxy.cn,direct

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

# 将当前目录下的所有文件复制到工作目录
COPY . .

# 更新 go.mod 文件并下载依赖
RUN go mod tidy && go mod download

# 在构建阶段编译应用程序
RUN go build -o my-app main.go

# 阶段二
# 使用 alpine 镜像作为最终运行阶段
FROM alpine

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

# 从构建阶段复制编译好的 my-app 可执行文件到最终阶段的工作目录
COPY --from=builder /app/my-app /app

# 暴露容器的 8888 端口
EXPOSE 8080

# 在容器启动时运行 my-app 可执行文件
CMD ["./my-app"]

第四步:执行指令

docker build -t server .
  • -t 参数用于设置镜像的名称及标签。
  • server 是你为镜像设置的名称。
  • . 是 Dockerfile 所在的目录路径,因为是当前目录所以 . 就可以。

第五步:查看结果

查看一下容器ID

docker ps -a

打印一下容器日志看看,容器ID

docker logs ID

按上述操作正常流程的结果。第一行是可以看见Hello,Word!就是成功了。

Hello,Word!
[GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached.


[GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.
 - using env:   export GIN_MODE=release
 - using code:  gin.SetMode(gin.ReleaseMode)

[GIN-debug] GET    /ping                     --> main.main.func1 (3 handlers)
[GIN-debug] [WARNING] You trusted all proxies, this is NOT safe. We recommend you to set a value.
Please check https://pkg.go.dev/github.com/gin-gonic/gin#readme-don-t-trust-all-proxies for details.
[GIN-debug] Environment variable PORT is undefined. Using port :8080 by default
[GIN-debug] Listening and serving HTTP on :8080

Docker存在那些隐患或缺点


  1. 安全性风险: Docker 容器共享主机内核,如果容器中的应用程序存在漏洞,攻击者可能通过容器漏洞进一步入侵主机或其他容器。
  2. 容器逃逸: 在某些情况下,恶意用户可能会利用 Docker 容器的漏洞进行容器逃逸,即从容器中获取主机权限。
  3. 资源限制: Docker 容器共享主机资源,如果不正确配置容器的资源限制,可能会导致容器之间资源竞争,影响性能和稳定性。
  4. 容器生命周期管理: 随着容器数量的增加,管理和监控容器的生命周期可能变得复杂,特别是在大规模部署的情况下。
  5. 网络配置: Docker 容器需要适当的网络配置才能与其他容器和外部系统通信,不正确的网络配置可能导致网络故障或安全风险。
  6. 数据持久性: 默认情况下,Docker 容器的文件系统是临时的,容器停止后文件系统中的数据将会丢失。需要特别的配置来实现数据持久化。
  7. 版本控制和镜像管理: 镜像版本控制和管理可能会变得混乱,尤其是在多个团队或开发者之间共享镜像时。
  8. 复杂性: Docker 平台及其生态系统是庞大而复杂的,需要一定时间和精力来学习和掌握。

尽管存在这些隐患和挑战,但通过合适的配置和最佳实践,可以最大程度地减少 Docker 使用中的风险,并确保安全和可靠的容器化环境。


上述内容如果有开发经验,应该很快能明白,并且更加牢固。如果是新手也没关系,明白一些基础概念,了解一些指令基础也是好的文章来源地址https://www.toymoban.com/news/detail-853839.html

到了这里,关于Docker概念及基础使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【docker】Docker Swarm 核心概念及详细使用

    Docker Swarm 是 Docker 的原生集群管理工具。它的主要作用是将多个 Docker 主机集成到一个虚拟的 Docker 主机中,为 Docker 容器提供集群和调度功能。通过 Docker Swarm,您可以轻松地管理多个 Docker 主机,并能在这些主机上调度容器的部署。下面是 Docker Swarm 的一些核心功能和特点:

    2024年01月18日
    浏览(82)
  • K8S自动化运维容器化(Docker)集群程序

    1.什么是K8S K8S全程为Kubernetes,由于K到S直接有8个字母简称为K8S。 版本:目前一般是1.18~1.2.0,后续可能会到1.24-1.26,1.24版本后丢弃了docker(如需要使用需要第三方插件配合),目前最新版本是1.27 官网:https://kubernetes.io GitHub:GitHub - kubernetes/kubernetes: Production-Grade Container Schedul

    2024年02月10日
    浏览(64)
  • docker——数据卷(volume)概念及使用案例

    Docker的镜像是有⼀系列的只读层组合⽽来,当启动⼀个容器时,Docker加载镜像的所有只读层,并在最上层加⼊⼀个读写层。这个设计使得Docker可以提⾼镜像构建、存储和分发的效率,节省了时间和存储空间,然⽽也存在⼀些问题: 容器中的⽂件在宿主机上存在形式复杂,不能

    2024年02月03日
    浏览(32)
  • kubernetes(k8s)大白学习02:容器和docker基础、使用、架构学习

    简单说:容器(container)就是计算机上的一个沙盒进程,它与计算机上的所有其它进程相隔离。 这种隔离是怎么做到的呢?它利用了内核提供的 namespace 和 cgroup 这 2 种技术。这些技术能力在 Linux 中已经存在了很长时间。而 Docker 或容器技术致力于将这些功能更易于使用和更

    2024年02月07日
    浏览(66)
  • K8S:K8S自动化运维容器Docker集群

    (1)K8S全程为Kubernetes,由于K到S直接有8个字母简称为K8S。 (2)版本:目前一般是1.18~1.2.0,后续可能会到1.24-1.26,1.24版本后丢弃了docker(如需要使用需要第三方插件配合),目前最新版本是1.27 (3)官网:https://kubernetes.io GitHub:GitHub - kubernetes/kubernetes: Production-Grade Container S

    2024年02月10日
    浏览(77)
  • Ubuntu基础配置+Docker配置和使用+容器化centos7大数据环境准备

    环境:ubuntu 18.04 大数据技术与应用赛项平台环境 安装完Ubuntu之后,除了需要新建用户、设置密码之外,我们还要设置root密码,虽然Ubuntu默认有root超级管理员账户,但是具体的密码我们可以自行设置 1.1设置root密码: 1.启动Ubuntu 启动Ubuntu,有图形界面的,启动终端即可 2.终端

    2024年01月17日
    浏览(49)
  • K8S:K8S自动化运维容器化(Docker)集群程序

    目录 一、K8S概述 1、什么是K8S 2、为什么要用K8S 3、作用及功能 二、K8S的特性 1、弹性伸缩 2、自我修复 3、服务发现和复制均衡 5、自动发布和回滚 6、集中化配置管理和秘钥管理 7、存储编排 8、任务批量处理运行 三、K8S的集群架构 四、K8S的核心组件 1、Master组件 ①Kube-apis

    2024年02月12日
    浏览(64)
  • 【深入浅出Docker原理及实战】「原理实战体系」零基础+全方位带你学习探索Docker容器开发实战指南(Docker-compose使用全解 一)

    Docker Compose是一款用于定义和运行复杂应用程序的Docker工具。在使用Docker容器的应用中,通常由多个容器组成。使用Docker Compose可以摆脱使用shell脚本来启动容器的繁琐过程。 Compose通过一个配置文件来管理多个Docker容器。在配置文件中,我们使用services来定义所有的容器。然后

    2024年01月17日
    浏览(71)
  • 小白到运维工程师自学之路 第六十二集 (docker持久化与数据卷容器)

    一、概述 Docker持久化是指将容器中的数据持久保存在主机上,以便在容器重新启动或迁移时不丢失数据。由于Docker容器是临时和可变的,它们的文件系统默认是易失的,这意味着容器中的任何更改或创建的文件都只存在于此容器的生命周期内。但是,在许多场景中,我们希望

    2024年02月14日
    浏览(37)
  • Docker容器:docker基础

    目录 一、docker容器简介 1、什么是容器 2、容器的优点 3、什么是docker容器 4、docker的logo及设计宗旨 5、docker与虚拟机对比 6、docker容器2个重要技术 7、docker三大核心概念 二、docker的安装及管理 1、安装docker 2、配置docker加速器 3、docker镜像相关基础命令 ①搜索镜像 ②拉取镜像

    2024年02月02日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包