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的第一行必须是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服务
作者:卢一
出处:http://www.cnblogs.com/luyi001/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律