docker学习总结【微服务】


前言

使用Docker来部署微服务具有以下几个优点:

轻量级和可移植性:Docker容器可以映射到主机操作系统中的进程,这意味着它们比虚拟机更轻量级且更易于移植。Docker镜像还可以在不同的平台上运行,并且与容器无关。

一致性和可重复性:Docker容器为所有开发人员提供相同的运行时环境,从而消除了“在我的机器上工作”的问题。制作Docker镜像是一个可重复过程,并且生成的镜像可以在任何地方运行。

版本控制和管理:Docker镜像包含了整个应用程序及其依赖项,因此可以轻松地进行版本控制和管理,以确保每个部署实例都是相同的。

隔离性:每个Docker容器都有自己的文件系统、网络和资源,因此它们可以隔离彼此,防止互相干扰或影响。

快速部署和扩展:Docker容器可以非常快速地部署,在几秒钟内启动并运行。多个容器可以同时运行,以支持更高的负载,并可以轻松地进行水平扩展。

一、什么是docker

容器化 (Containerization) 是一种虚拟化技术,它允许我们将应用程序及其所有依赖项封装到一个可移植的容器中。容器提供了隔离和安全性,使得应用程序在不同环境中运行时具有相同的用户体验。

Docker 是一种基于容器化技术的开源平台,它可以帮助我们快速创建、部署和运行应用程序。Docker 构建在 Linux 容器上,提供了一个简单而强大的 API,使得通过容器化技术管理应用程序变得更加容易。

使用 Docker 可以让我们轻松地运行多个应用程序,并且使得应用程序能够在不同的计算机上运行。
在这里插入图片描述
上图中:Docker 仓库是用来存储和管理 Docker 镜像的地方,可以把它看做一个集中的仓库。Docker 镜像是一个打包好的应用程序运行环境,里面包含了所需的文件和配置等信息。Docker 容器是 Docker 镜像的运行实例,可以将其理解为在 Docker 环境中启动的一个进程。Dockerfile 是用来描述如何构建 Docker 镜像的文件,其中包含了一系列指令以及镜像的元数据信息。

Docker Compose 是一个工具,用于定义和运行多个 Docker 容器的应用程序。可以通过编写一个 YAML 文件来描述应用程序的服务、网络和数据卷等组件,并通过 docker-compose 命令来控制这些组件的生命周期。

二、docker基本操作

以下是docker的基本操作以及示例:

1、基本操作

  1. 查看docker版本

    docker version
    
  2. 检索镜像

    docker search nginx
    

    这个命令会在Docker Hub上查找nginx镜像。

  3. 下载镜像

    docker pull nginx
    

    这个命令会下载最新版本的nginx镜像。

  4. 列出本地镜像列表

    docker images
    
  5. 运行容器

    docker run -it --name mynginx -p 8080:80 nginx -
    

    这个命令会运行一个名为mynginx的容器,并将容器中的80端口映射到主机的8080端口。-it参数可以让我们进入容器内部并与之交互。-d 是在后台运行

  6. 停止容器

    docker stop mynginx
    

    这个命令会停止名为mynginx的容器。

  7. 启动容器

    docker start mynginx
    

    这个命令会启动名为mynginx的容器。

  8. 删除容器

    docker rm mynginx
    

    这个命令会删除名为mynginx的容器。

  9. 查看正在运行的容器

    docker ps
    

    这个命令会列出正在运行的容器。

  10. 查看容器日志

    docker logs mynginx
    

    这个命令会输出名为mynginx的容器的日志。

2、镜像推送到阿里云

$ docker login --username=hzl1500876109 registry.cn-hangzhou.aliyuncs.com
$ docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/szu_liang/study1:[镜像版本号]
$ docker push registry.cn-hangzhou.aliyuncs.com/szu_liang/study1:[镜像版本号]
这个镜像版本号就是到时候在study1 拉取的时候的号
$ docker pull registry.cn-hangzhou.aliyuncs.com/szu_liang/study1:[镜像版本号]

3、数据卷

Docker 数据卷的概念

Docker数据卷是Docker容器中持久化数据的一种方式。它允许将文件或目录从主机文件系统映射到Docker容器中,从而在容器和主机之间共享数据。

由于容器是易于销毁和重新创建的,如果您将数据存储在容器内部,则可能会丢失这些数据。而使用数据卷可以解决这个问题,因为这可以将数据存储在主机文件系统上,以便即使容器被删除,也能保留数据。

Docker 数据卷的用途

数据卷在Docker容器中有多种用途:

  1. 共享数据:数据卷允许容器和主机之间共享数据。这对于需要在许多容器之间共享数据的应用程序非常有用,例如数据库或Web服务器。

  2. 持久化数据:如果容器被删除,容器内的所有数据也将被删除,但是使用数据卷,可以将数据存储在主机的文件系统中,从而使得数据可以持久化存在。

  3. 备份数据:使用数据卷可以轻松地备份数据,因为数据存储在主机文件系统中。

Docker 数据卷的命令

在Docker中,有几种方法可以创建、管理和使用数据卷,包括以下命令:

  1. docker volume create:创建一个新的数据卷。

  2. docker volume ls:列出所有可用的数据卷。

  3. docker volume rm:删除一个或多个数据卷。

  4. docker run -v:在运行容器时,使用-v选项来将数据卷挂载到容器中。

  5. docker inspect:检查容器,数据卷和其他Docker对象的详细信息。

Docker 数据卷的举例

以下是一些使用Docker数据卷的示例:

  1. 将配置文件存储在数据卷中,并将其应用于多个Web服务器容器。
$ docker volume create config
$ docker run -d --name webserver1 -v config:/config mywebserver
$ docker run -d --name webserver2 -v config:/config mywebserver
  1. 将数据库文件存储在数据卷中,并将其应用于多个数据库服务器容器。
$ docker volume create dbdata
$ docker run -d --name dbserver1 -v dbdata:/var/lib/mysql mysql
$ docker run -d --name dbserver2 -v dbdata:/var/lib/mysql mysql
  1. 使用数据卷备份数据。
$ docker volume create backup
$ docker run --rm -v backup:/backup -v /data:/data busybox tar cvf /backup/backup.tar /data

三、dockerfile

Dockerfile 是用来定义 Docker 镜像的蓝图,它是一个文本文件,包含了一条条构建镜像所需的指令和命令。

1、 基础知识

首先,在 Dockerfile 中,每个命令都会创建一个新的镜像层。这意味着,如果您对 Dockerfile 进行更改并重新构建镜像,则将仅重建已更改的层,而不会重新构建整个镜像。这使得镜像构建过程更快更高效。

其次,当编写 Dockerfile 时,使用 RUN 指令来运行任何 Linux 命令或 Shell 脚本。例如,我们可以使用 RUN apt-get update && apt-get install -y curl 来安装 curl 工具。我们还可以使用 ENV 指令来设置环境变量,例如 ENV GOPATH /go

最后,构建 Golang 应用程序通常需要两个步骤:编译和运行。我们可以将这些步骤分别映射到 Dockerfile 中的不同阶段,以便我们可以更好地控制容器的大小和复杂性。我们可以使用 FROM 指令选择基础镜像,例如 FROM golang:1.16-alpine3.14。我们还可以使用 COPYWORKDIR 指令将文件复制到容器中,并设置工作目录。

2、 基本操作

例子:创建一个 Dockerfile 并使用它来构建 Golang 应用程序的 Docker 镜像。

首先,在您的项目根目录中创建一个名为 Dockerfile 的新文件:

# 使用 Golang 1.16 Alpine 做为基础镜像
FROM golang:1.16-alpine3.14

# 将当前目录的所有文件复制到 /go/src/app 目录中
COPY . /go/src/app

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

# 下载 Redis 依赖项
RUN apk add --no-cache git \
    && go get github.com/go-redis/redis/v8

# 编译应用程序
RUN go build -o main .

# 运行应用程序
CMD ["/go/src/app/main"]

在这个 Dockerfile 中,我们首先选择了 golang:1.16-alpine3.14 作为基础镜像。然后,我们将当前目录的所有文件复制到 /go/src/app 目录中,并将工作目录设置为 /go/src/app。然后,我们使用 apk add 命令下载 Git 工具并使用 go get 命令下载 Redis 依赖项。最后,我们使用 go build 命令编译应用程序,并使用 CMD 指令指定 Docker 镜像启动后默认执行的命令。

接下来,我们可以使用以下命令构建 Docker 镜像:

docker build -t my-golang-app .

这将基于当前目录中的 Dockerfile 文件构建名为 my-golang-app 的新 Docker 镜像。请注意,. 参数表示 Dockerfile 文件位于当前目录中。

最后,我们可以使用以下命令运行 Docker 容器:

docker run --rm -it my-golang-app

这将启动一个新的 Docker 容器,并在其中运行我们的 Golang 应用程序。由于我们在 Dockerfile 中使用了 CMD 指令,因此应用程序将自动启动。如果您需要覆盖默认的 CMD 命令,您可以在 docker run 命令中指定自己的命令。

四、dockercompose

docker Compose是一个用于定义和运行多个Docker容器应用程序的工具。通过Docker Compose,可以使用YAML文件来配置应用程序的服务,并使用单个命令即可从配置中创建和启动所有服务。

1、基本命令

docker-compose up

启动应用程序容器,同时会创建并启动所有定义的服务。如果当前目录下没有 docker-compose.yml 文件,则需要通过 -f/--file 参数指定文件位置。

docker-compose up [OPTIONS] [SERVICE...]

常用选项:

  • -d/--detach:在后台启动容器。
  • --build:构建镜像并启动容器。
  • --force-recreate:强制重新创建容器。
  • --no-deps:不启动依赖的服务容器。
  • --quiet-pull:安静地拉取镜像。
  • --remove-orphans:删除孤儿容器。
  • --scale SERVICE=NUM:启动指定数量的服务容器。

docker-compose down

停止并删除应用程序容器及其所属的服务容器。如果当前目录下没有 docker-compose.yml 文件,则需要通过 -f/--file 参数指定文件位置。

docker-compose down [OPTIONS]

常用选项:

  • -v/--volume:删除关联的数据卷。
  • --rmi:删除相关的镜像。
  • --remove-orphans:删除孤儿容器。
  • --timeout:等待容器停止的时间(默认 10 秒)。

docker-compose ps

显示当前运行的容器信息,包括容器 ID、状态、服务名等。

docker-compose ps [OPTIONS] [SERVICE...]

常用选项:

  • --services:只显示服务名。
  • --filter:根据指定条件筛选容器信息。

docker-compose logs

查看指定服务的日志信息。

docker-compose logs [OPTIONS] [SERVICE...]

常用选项:

  • -f/--follow:跟随输出新的日志信息。
  • --tail:输出最后多少条日志信息。
  • --timestamps:显示时间戳。

docker-compose exec

在指定的服务容器中执行命令。

docker-compose exec [OPTIONS] SERVICE COMMAND [ARGS...]

常用选项:

  • -d/--detach:在后台执行命令。
  • --privileged:使用特权模式(以 root 用户身份)执行命令。

2、docker compose文件编写格式

Docker Compose 的配置文件采用 YAML 格式,通常命名为 docker-compose.yml。下面是一个简单的示例:

version: '3'
services:
  web:
    build: .
    ports:
      - "5000:5000"
    depends_on:
      - db
    volumes:
      - .:/code
  db:
    image: postgres

配置文件主要由三个部分组成:

version

指定 Docker Compose 文件的版本号,当前支持的版本有 1、2、2.1、3 和 3.1。

services

定义应用程序的服务,每个服务都是一个单独的容器。服务定义包括以下几个字段:

  • build:构建镜像所需的 Dockerfile 文件路径。
  • image:使用现有的镜像。
  • ports:将容器内部端口映射到主机的端口。
  • volumes:将主机上的目录或文件挂载到容器内部。
  • environment:设置容器的环境变量。
  • depends_on:指定依赖的服务。

networks

定义应用程序的网络配置。

  • driver:指定网络驱动,默认为 bridge
  • name:指定网络名称。
  • external:指定外部网络的名称。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值