docker基础知识点及使用

1. docker是用来做什么的

Docker是一个开源的平台,用于开发、运维和部署应用程序。它通过容器化技术,将应用程序及其所有依赖项打包在一起,确保在任何环境中都能一致地运行。

  • 用例1:开发环境一致性

例子:假设你的团队有多个开发成员,他们各自的开发环境(如操作系统、库版本等)都不相同。这可能导致“在我机器上可以运行”的问题。使用Docker,每个开发者可以在相同的容器镜像中开发应用程序,保证了所有人使用的环境一致性。

  • 用例2:微服务架构

例子:在构建微服务架构时,一个电商应用可以被分成多个微服务,比如用户服务、商品服务和订单服务等。每个微服务都可以在一个单独的Docker容器中运行,开发和部署非常灵活。比如,你可以同时更新订单服务而不影响用户服务。

  • 用例3:持续集成/持续交付(CI/CD)

例子:在一个CI/CD流程中,你可以使用Docker来创建构建环境和测试环境。每次推送代码时,持续集成系统(如Jenkins、GitLab CI等)可以拉取最新的Docker镜像,运行测试,从而自动化代码的构建和验证。例如,你的测试用例可以在指定的Docker镜像中运行,以确保代码在任何环境中都可以正常工作。

  • 用例4:快速部署

例子:在生产环境中部署应用程序时,使用Docker可以显著缩短部署时间。例如,一个Web应用程序可以在Docker容器中运行,当你需要更新应用时,只需构建一个新的镜像,停止旧的容器,再启动新的容器。这种方式使得回滚也非常简单,只需重新启动之前的容器即可。

  • 用例5:隔离和安全性

例子:假如你需要在同一台服务器上运行多个版本的同一个应用,使用Docker容器可以实现这一点。比如,你的团队正在开发一个Python应用。你可以用Docker来运行Python 2.x 和 Python 3.x 的不同版本,同时进行测试和开发,而不会导致依赖冲突。

2. docker中的几个重要概念

(1)镜像

镜像是一个静态的、只读的模板,包含了创建容器所需的一切内容。这包括:

  • 应用程序代码
  • 运行时环境(如Python、Node.js等)
  • 依赖库
  • 应用的配置文件

它可以被多次使用和分发,你可以从镜像创建多个容器。

镜像的特点

可重用性:镜像可以创建多个容器,每个容器都是一份独立的运行环境。
只读性:镜像本身是不会改变的。你可以根据它创建容器,容器在运行时的改动不会反作用于镜像。

(2)容器

容器是镜像的一个运行实例。想象它像是从镜像制作出来的一个具体、可操作的实体。容器是动态的,有自己的状态,可以读写数据。

通过容器,可以运行实际的应用程序,对外提供服务,与外界进行交互。

容器的特点:

隔离性:每个容器都是隔离的,彼此之间不会干扰。
可变性:容器是可以运行、停止、删除和修改的。你可以对容器进行操作(如存储数据、进行计算等),但这些操作只会影响该容器。

总结关系:

镜像是蓝图:它的构建是静态的,定义了如何创建容器。
容器是实例:它是动态的、可以运行的实例,执行具体的任务,拥有自己的状态和数据。

(3)Dockfile

Dockerfile 是一个文本文件,包含了一系列的指令,用来定义如何构建 Docker 镜像。每个 Dockerfile 都是一个规范化的过程,描述了如何在容器化环境中自动化地构建和配置应用程序。

FROM openjdk:8  

ADD demo-1.0-SNAPSHOT.jar /app.jar

RUN bash -c 'touch /app.jar'

ENTRYPOINT ["java","-jar","/app.jar"]

RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone

以下为代码的解释:

FROM openjdk:8

指定基础镜像为 OpenJDK 8。这个镜像内包含了 Java 运行环境,适合用于运行 Java 应用程序。

ADD demo-1.0-SNAPSHOT.jar /app.jar

将本地的 demo-1.0-SNAPSHOT.jar 文件添加到容器的根目录下,并重命名为 /app.jar。ADD 指令不仅可以复制文件,还可以解压 tar 文件或从 URL 下载文件。

RUN bash -c 'touch /app.jar'

这一行的使命是更新 /app.jar 文件的时间戳,使文件看起来是新创建的。一般情况下,这一步不是必要的,除非您有特定需要。可以考虑去掉。

ENTRYPOINT ["java", "-jar", "/app.jar"]

指定容器启动时执行的命令。这里是用 java -jar 运行 /app.jar 文件。这行代码确保容器在启动时运行 Java 应用。

RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone

这行代码设置容器的时区为上海时区。cp 命令将时区文件复制到 /etc/localtime,同时通过 echo 文件设置时区。

3. docker常用操作

在这里插入图片描述

#【查看当前正在运行的容器】
docker ps 
#【查看所有容器,包括运行中的和未启动的】
docker ps -a

在这里插入图片描述

4. 构建并运行 Docker 镜像

以下是如何使用这个 Dockerfile 的步骤:

(1)确保 Dockerfile 和要添加到镜像中的文件(比如 JAR 文件)在同一目录内。例如:

在这里插入图片描述

(2)构建 Docker 镜像

在包含 Dockerfile 和 JAR 文件的目录中,运行以下命令构建 Docker 镜像。假设镜像名称为 demo:

docker build -t demo .

在这里插入图片描述

该命令会读取当前目录中的 Dockerfile,并构建镜像。

打包一个名为demo的镜像到本地镜像仓库中

-t:添加一个标签,如果什么都不写就是lasted标签

demo:自定义一个镜像名字,注意允许有大写字母

.(点):指定构建上下文为当前目录 /path/to/demo。这意味着 Dockerfiledemo-1.0-SNAPSHOT.jar 文件都可以在这个上下文中被找到。

【报错】

在这里插入图片描述

【解决】

\# 拉取一下openjdk:8 镜像

docker pull openjdk:8  

(3) 运行 Docker 容器

构建成功后,可以用下面的命令启动容器:

docker run -d -p 8888:8888 --name demo-app demo

然后就可以在浏览器访问了

左侧的数字(主机端口)是要访问的端口。

右侧的数字(容器端口)是在容器中运行应用的端口。

在上述命令中:

-d 表示以分离模式(后台)运行容器。

-p 8888:8888 将容器的 8888 端口映射到主机的 8888 端口(假设 Spring Boot 应用在该端口上监听)。

docker run -d -p 8888:8888 --name demo-app demo

然后就可以在浏览器访问了

左侧的数字(主机端口)是要访问的端口。

右侧的数字(容器端口)是在容器中运行应用的端口。

在上述命令中:

-d 表示以分离模式(后台)运行容器。

-p 8888:8888 将容器的 8888 端口映射到主机的 8888 端口(假设 Spring Boot 应用在该端口上监听)。

--name demo-app 为容器指定一个名字,方便后续管理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值