docker初识

一、认识 docker

1.docker 诞生的意义

  • Docker 是基于 Go 语言实现的云开源项目,诞生于 2013 年初,最初发起者是 dotCloud 公司;

  • Docker 的主要目标是“Build,Ship and Run Any App,Anywhere”,即通过对组件的封装(packaging)、分发(Distribution)、部署(Deployment)、运行(Runtime)等生命周期的管理,达到应用组件级别的“一次封装,到处运行”。这里的应用组件,既可以是一个 Web 应用,也可以是一套数据库服务,甚至是一个操作系统或编译器

  • Docker 引擎的基础是 Linux 容器(Linux Containers,LXC)技术,LXC 是一种操作系统级虚拟化技术,允许在 Linux 主机上创建和管理多个独立的容器。每个容器都是一个隔离的环境,可以运行自己的操作系统和应用程序,就像独立的虚拟机一样

2.使用 docker 的好处

Docker 在开发和运维中的优势

  • 更快速的交付和部署
  • 更高效的资源利用。 Docker 容器的运行无需额外的虚拟化管理程序支持,它是内核级的虚拟化,可以实现刚搞性能,同时对资源的额外需求很低。
  • 更轻松的迁移和扩展。Docker 容器几乎可以在任意的平台上运行,包括物理机、公有云、私有云、个人电脑,服务器等。
  • 更简单的更新管理

Docker 与虚拟机比较

  • Docker 容器很快,启动和停止可以在秒级实现。
  • Docker 容器对系统资源需求很少,一台主机上可以同时运行数千个 Docker 容器
  • Docker 通过类似 Git 的操作来方便用户获取、分发和更新应用镜像,指令简明、学习成本低
  • Docker 通过 Dockerfile 配置文件来支持灵活的自动化创建和部署机制,提高工作效率

3.docker的核心组件

Docker Engine:Docker引擎是Docker平台的核心组件,它是一个轻量级的容器运行时环境。它负责创建、运行和管理Docker容器,并提供了用于构建和管理容器的API

镜像(Image) : Docker将 应用程序及其所需的依赖、函数库、环境、配置等文件打包在一起, 称为镜像

容器(Container) : 镜像中的应用程序运行后形成的进程就是容器,只是Docker会给容器做隔离,对外不可见

4.DockerHub

DockerHub: DockerHub是一个Docker镜像的托管 平台。这样的平台称为Docker Registry;
国内也有类似于DockerHub 的公开服务,比如阿里云镜像库等

5.docker架构

服务端(server): Docker守护进程,负责处理Docker指令,管理镜像、容器等

客户端(client): 通过命令或RestAPI向Docker服务端发送指令。可以在本地或远程向服务端发送指令。

6.docker基本操作


7.数据卷

容器与数据耦合的问题

  • 不便于修改,当我们需要修改nginx的html时,需要进入到容器里去修改文件,很不方便
  • 数据不可复用,在容器内的修改对外是不可见的,所有修改对新创建的容器是无法复用的
  • 升级维护困难,数据在容器内,如果要删除或重新创建容器时,数据也会跟着被删除

数据卷则解决了这样的问题,数据卷是一种用于持久化存储容器数据的特性;它们允许将主机机器上的目录或文件系统挂载到容器中,以便容器可以持久化地访问和修改这些数据

常用命令

  • docker volume create 创建一个volume
  • docker volume ls 列出所有的volume
  • docker volume inspect 显示一个或多个volume的信息
  • docker volume rm 删除一个或多个指定的volume
  • docker volume prune 删除未使用的volume

挂载数据卷

  • 我们在创建容器时,可以通过-v参数来挂载一个数据卷到某个容器目录

8.Dockerfile

在说dockerfile之前,需要简单介绍一下镜像的结构;

镜像是分层结构,每一层称为一个Layer

  • Baselmage层:包含基本的系统函数库、环境变量、文件系统富
  • Entrypoint: 入口,是镜像中应用启动的命令
  • 其它:在Baselmage基础上添加依赖、安装程序、完成整个应用的安装和配置

而Dockerfile是一个文本文件,其中包含一个个的指令(Instruction),用指令来说明要执行什么操作来构建镜像。每一个指令都会形成一层镜像Layer

详细dockerfile命令

注意:Dockerfile的第一行必须是FROM,从一个基础镜像来构建,基础镜像可以是基本操作系统,如Ubuntu。也可以是其他人制作好的镜像;

二、docker 实操

1.下载安装 docker

CentOS系统安装Docker:

Docker 要求 CentOS 系统的内核版本高于 3.10,可通过命令 uname -r 查看

安装 docker:yum install docker-ce
启动 docker:service docker start
启动系统自动启动 docker:sudo systemctl enable docker
查看 docker 状态:systemctl status docker
查看 docker 的镜像:docker images

Ubuntu系统安装Docker:

  • apt 上注册 Docker 的 GPG 密钥圈
  • 把 Docker 包的源代码添加到你的系统中
  • docker-ce: Docker 引擎守护程序。
  • docker-ce-cli: 你将与之互动的 Docker CLI。
  • containerd.io: 被称为 containerd的容器运行时间,用于启动和运行你的容器。
  • 验证

注意:这里下载GPG密钥是为了验证下载的软件包的完整性和真实性。通过使用GPG密钥,可以保证所使用的软件包是由Docker官方签名并提供的,以避免安装被篡改或来自不可靠源的软件包

2.配置镜像加速器

3.使用 docker

安装 nginx:docker pull nginx

新建并编写 Dockerfile:vim Dockerfile

编写 Dockerfile 命令如下:

构建新镜像:

启动镜像(创建新的容器):

启动镜像后通过 docker ps 可以查看到启动的容器,加上-a 可以看到关闭状态下的容器;

关闭容器:docker stop my-running-container

删除容器:docker rm my-stopped-container

删除所有已退出状态的容器:docker container prune

4.把文件夹发到 nginx 上访问

运行带有网站文件夹挂载的 Nginx 容器。确保使用 -v 或 --volume 选项将本地网站文件夹映射到容器内的 /usr/share/nginx/html 文件夹。这是 Nginx 默认服务静态文件的文件夹。

命令如下:

-d: 以守护态(后台)模式运行容器
--name my-nginx-container: 为容器设置一个名字
-p 8080:80: 将宿主机(你的电脑)的 8080 端口映射到容器内的 80 端口。这允许您通过访问宿主机的 80 端口来访问 Nginx 服务器
-v /root/mywebsite/code:/usr/share/nginx/html:将本地的 code 文件夹映射到容器内的 /usr/share/nginx/html 文件夹

三、认识DockerCompose

1.Docker Compose 诞生的意义

Docker Compose是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。Compose 是 Docker 公司推出的一个工具软件,可以管理多个 Docker 容器组成一个应用。你需要定义一个 YAML 格式的配置文件docker-compose.yml,写好多个容器之间的调用关系。然后,只要一个命令,就能同时启动/关闭这些容器

我们使用 Docker 的时候,定义 Dockerfile 文件,然后使用 docker build、docker run 等命令操作容器。然而微服务架构的应用系统一般包含若干个微服务,每个微服务一般都会部署多个实例,如果每个微服务都要手动启停,那么效率之低,维护量之大可想而知。

Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。.Docker Compose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器,Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。

2.Docker Compose使用步骤

1.编写Dockerfile定义各个微服务应用并构建出对应的镜像文件dockerfile的使用

2.使用 docker-compose.yml 定义一个完整业务单元,安排好整体应用中的各个容器服务。

3.最后,执行docker-compose up命令 来启动并运行整个应用程序,完成一键部署上线

3.Docker Compose常用命令

启动和停止应用程序:

  • docker-compose up:在当前目录中查找 docker-compose.yml 文件,并启动应用程序中的所有服务。

  • docker-compose up -d:以守护进程模式启动应用程序中的所有服务。

  • docker-compose down:停止并移除应用程序中的所有服务以及相关网络和卷。

构建和重建服务:

  • docker-compose build:构建由 Compose 文件定义的所有服务的镜像。

  • docker-compose build service_name:构建指定服务的镜像。

  • docker-compose up --build:在启动服务之前先构建镜像。

查看服务日志:

  • docker-compose logs:查看应用程序中所有服务的日志。

  • docker-compose logs service_name:查看指定服务的日志。

  • docker-compose logs -f:以实时滚动的方式查看应用程序中所有服务的日志。

管理服务:

  • docker-compose ps:列出应用程序中所有服务的状态。

  • docker-compose pause service_name:暂停指定服务。

  • docker-compose unpause service_name:取消暂停指定服务。

其他常用命令:

  • docker-compose exec service_name command:在指定服务的容器中执行命令。

  • docker-compose down -v:停止并移除应用程序中的所有服务、网络和卷。

  • docker-compose config:验证和查看 Compose 文件的配置

四、docker compose 实操

1.下载及安装

a.快捷安装

  • ubuntu安装:

apt install docker-compose-plugin

  • centos安装:

yum install docker-compose-plugin

b.二进制文件安装

  • 下载二进制文件:
  • 修改二进制文件权限:

sudo chmod +x /usr/local/lib/docker/cli-plugins/docker-compose

  • 查看版本:

docker-compose --version

  • 卸载:

rm /usr/local/lib/docker/cli-plugins/docker-compose

注意:V2版本docker compose是以插件的方式作为docker的一部分的,安装了V2版本的docker compose之后,compose命令被集成到docker平台,作为docker CLI的一部分。之后使用compose命令就不是再用docker-compose了,而是docker compose,中间用空格隔开。当然,如果已经习惯用docker-compose命令执行的话,也可通过创建软链接来继续使用该命令

sudo ln -s /usr/local/lib/docker/cli-plugins/docker-compose /usr/bin/docker-compose

2.编排文件(docker-compose.yml)常用字段

a. version
version 字段指定了 Docker Compose 编排文件的版本

b. services
services 字段指定了在 Docker Compose 编排中要运行的服务。每个服务都有一个名称,并指定要使用的镜像和容器的配置选项

c. build 和 image
build 字段允许在 Docker Compose 编排中指定 Dockerfile 的位置,从而可以使用 Docker Compose 构建镜像。image 字段指定要使用的 Docker 镜像;例如:

d. volumes 和 environment
volumes 字段指定了要使用的数据卷。environment 字段指定了要设置的环境变量。例如:

e. ports 和 expose
ports 字段指定了要宿主机映射到容器的端口(宿主机端口:容器端口)。expose 字段是用于在 Docker 容器内部暴露端口的选项,可以让其他容器连接到这些端口,但不会将它们映射到 Docker 主机上。expose 与 ports 不同的是,expose 字段仅仅是将容器内部的端口暴露给其他容器使用,而不是直接映射到宿主机上的端口;例如:

3.使用docker compose

编写编排文件:

启动应用程序

通过上面简单的配置即可编排管理前面跑起来的nginx-test服务

posted @   luyi001  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示