docker原理介绍以及部署使用

本文详细介绍了Docker的基础知识,包括Docker的简介、架构概念、安装部署步骤以及镜像和容器的管理。Docker作为一个轻量级的虚拟化技术,通过镜像和容器实现应用的快速打包和部署。文章还提供了Docker常用命令的使用示例,帮助读者快速上手。此外,探讨了Docker在实际开发和生产环境中的应用及其优势,为后续深入学习和实践打下基础。
摘要由CSDN通过智能技术生成

初次接触docker是在2018年,当时也是出于对docker技术的好奇,所以找了一些教学视频以及线上资料进行学习研究,大致了解了一些原理概念以及部署操作等。但是到目前两三年过去,也经历了几个项目,都并未在实际的开发生产环境中使用到docker,反而在公司层面却都要求掌握docker,甚至是Kubernetes等技术,也是一些奇观!在此背景下,再次对docker进行理论学习以及实际的部署使用,汇总总结相关的简要原理概念,重点侧重到安装部署和实际使用相关命令操作等,以便于后续能够快速使用以及后续持续更深入地学习积累,也为后来者提供借鉴参考。文中不免疏漏之处,望读者予以指正,不胜感激!

1. docker简介

Docker是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
Docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口,更重要的是容器性能开销极低。
Docker从17.03版本之后分为CE(Community Edition: 社区版)和EE(Enterprise Edition: 企业版)。
Docker的应用场景

Web 应用的自动化打包和发布。
自动化测试和持续集成、发布。
在服务型环境中部署和调整数据库或其他的后台应用。
从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。

Docker 的优点

Docker 是一个用于开发,交付和运行应用程序的开放平台。
Docker 能够将应用程序与基础架构分开,从而可以快速交付软件。
借助 Docker,可以与管理应用程序相同的方式来管理基础架构。
通过利用 Docker 的方法来快速交付,测试和部署代码,可以大大减少编写代码和在生产环境中运行代码之间的延迟。

2. docker架构概念

Docker利用Linux中的核心分离机制,例如Cgroups,以及Linux的核心Namespace(名字空间)来创建独立的容器。一句话概括起来Docker就是利用Namespace做资源隔离,用Cgroup做资源限制,利用Union FS做容器文件系统的轻量级虚拟化技术。Docker容器的本质还是一个直接运行在宿主机上面的特殊进程,看到的文件系统是隔离后的,但是操作系统内核是共享宿主机OS,所以说Docker是轻量级的虚拟化技术。
在这里插入图片描述在这里插入图片描述

Docker 包括三个基本概念:

(1)镜像(Image)

Docker 镜像(Image),就相当于是一个 root 文件系统。
比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。

(2)容器(Container)

镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,
镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。

(3)仓库(Repository)

仓库可看成一个代码控制中心,用来保存镜像。

Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。
Docker 容器通过 Docker 镜像来创建。
容器与镜像的关系类似于面向对象编程中的对象与类。

概念说明
Docker 镜像(Images)Docker 镜像是用于创建 Docker 容器的模板,比如 Ubuntu 系统。
Docker 容器(Container)容器是独立运行的一个或一组应用,是镜像运行时的实体。
Docker 客户端(Client)Docker 客户端通过命令行或者其他工具使用 Docker SDK (https://docs.docker.com/develop/sdk/) 与 Docker 的守护进程通信。
Docker 主机(Host)一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。
Docker RegistryDocker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。Docker Hub(https://hub.docker.com) 提供了庞大的镜像集合供使用。一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。
Docker MachineDocker Machine是一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure。

3. docker安装部署

3.1 安装环境

linux系统:CentOS Linux release 7.2.1511 (Core)
docker版本:Docker version 20.10.8

3.2 安装步骤

1. 安装辅助工具
yum install -y yum-utils device-mapper-persistent-data lvm2

2. 添加软件源信息,这里使用Docker CE版本。
从2017年3月开始docker在原来的基础上分为两个分支版本: Docker CE 和 Docker EE。Docker CE 即社区免费版,Docker EE 即企业版,强调安全,但需付费使用。
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

3. 更新yum,更新yum缓存
yum update
yum makecache fast

4. 移除旧版本
yum remove docker \

5. 安装docker-ce
yum -y install docker-ce

6. 查看docker版本
docker version

7. 启动Docker,然后加入开机启动
systemctl start docker
systemctl enable docker
systemctl status docker

4. docker使用

4.1 镜像管理

1. 列出本地所有镜像
docker images

2. 查找镜像
docker search <IMAGE_ID/NAME>

3. 拉取镜像
docker pull  <IMAGE_ID/NAME> :tag
#tag:镜像的标签 如果不指定tag 那么默认用最新的版本

4. 上传镜像
docker push <IMAGE_ID/NAME>

5. 删除镜像
docker rmi <IMAGE_ID/NAME>

6. 例如:
查找nginx镜像:docker search nginx
拉取nginx镜像:docker pull nginx(:版本,默认为latest 最新版本)
删除nginx镜像:docker rmi nginx

4.2 容器管理

1. 启动运行镜像--容器
docker run -p 本机映射端口:镜像映射端口 -d  --name 启动镜像容器命名 -e 镜像启动参数  镜像名称:镜像版本号
参数:
-p   本机端口和容器启动端口映射,可以有多个,因为该镜像可能存在多个端口
-d   以守护进程方式后台运行
--name   容器名称
-e    镜像启动参数 
例如:docker run -p 8088:80 -d --name nginx-c nginx

2. 列举当前运行的容器
docker ps
-l:显示最后启动的容器
-a:同时显示停止的容器,默认只显示启动状态

3. 检查容器内部信息,查看容器详细信息(输出为Json)
docker inspect 容器名称
-f:查找特定信息,如 docker inspect  -f  '{{ .NetworkSettings.IPAddress }}'

4. 停止某个容器
docker stop 容器名称

5. 启动某个容器
docker start 容器名称
docker restart 容器名称

6. 移除某个容器
docker rm 容器名称 (容器必须是停止状态)

7. 查看容器日志、运行进程及容器中的变化
docker logs <CONTAINER_ID> -f  :输出容器日志,-f 表示实时输出
docker top <CONTAINER_ID>:查看容器中运行的进程
docker diff <CONTAINER_ID>:查看容器中的变化

8. 进入容器中执行相关命令
(1)docker exec -ti <CONTAINER_ID> /bin/bash
-d:分离模式: 在后台运行
-i:即使没有附加也保持STDIN 打开
-t:分配一个伪终端
(2)docker attach <CONTAINER_ID> 连接到启动的容器
docker attach可以attach到一个已经运行的容器的stdin,然后进行命令执行的动作。但是需要注意的是:如果从这个stdin中exit,会导致容器的停止。


9. 复制容器内的文件到宿主机目录上
docker cp <CONTAINER_ID>:path hostpath

10. 挂载
docker run -d -p 8081:8081 --name nginx-c 
-v /usr/local/nginx/conf/nginx.conf:/etc/nginx/nginx.conf 
-v /usr/local/nginx/html:/usr/share/nginx/html 
nginx
挂载,docker中使用的某些配置文件,可以挂载使用宿主机中的文件
第一个“-v”,挂载配置文件路径;
第二个“-v”,挂载静态文件项目位置路径;

11. 从容器创建一个新的镜像
docker commit -a "author" -m "comment" <CONTAINER_ID> imagename:tag
-a :提交的镜像作者;
-c :使用Dockerfile指令来创建镜像;
-m :提交时的说明文字;
-p :在commit时,将容器暂停。

12. 其他
docker rm `docker ps -a -q`:删除所有容器
docker kill `docker ps -q`
docker rmi `docker images -q -a`

5. 参考资料

[1] https://www.docker.com/
[2] https://www.cnblogs.com/cac2020/p/11359412.html
[3] https://www.cnblogs.com/makelu/p/11018212.html

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值