首页 > 其他分享 >Docker 基本管理及部署

Docker 基本管理及部署

时间:2024-07-12 19:25:38浏览次数:19  
标签:基本 容器 部署 虚拟机 nginx 镜像 Docker docker

目录

1.Docker概述

1.1 Docker是什么?

1.2 Docker的宗旨

1.3 容器的优点

1.4 Docker与虚拟机的区别

1.5 容器在内核中支持的两种技术

1.6 namespace的六大类型

2.Docker核心概念

2.1 镜像

2.2 容器

2.3 仓库

3.安装Docker

3.1 查看 docker 版本信息

4.Docker镜像操作

5.Docker容器操作

6.总结


1.Docker概述

1.1 Docker是什么?

Docker是一个开源的应用容器引擎,基于go语言开发并遵循了apache2.0协议开源。
Docker是在Linux容器里运行应用的开源工具,是一种轻量级的“虚拟机”。
Docker 的容器技术可以在一台主机上轻松为任何应用创建一个轻量级的、可移植的、自给自足的容器。

Docker的Logo设计为蓝色鲸鱼,拖着许多集装箱。
鲸鱼可看作为宿主机,集装箱可理解为相互隔离的容器,每个集装箱中都包含自己的应用程序。

容器引擎:docker、containered、podman、rocket

1.2 Docker的宗旨

即通过对应用组件的封装、发布、部署、运行等生命周期的管理,达到应用组件级别的“ 一次封装、到处运行 “ 的目的,这里的应用既可以是一个应用,也可以是一套服务,甚至是一个完整的操作系统。

1.3 容器的优点

  • 灵活:即使是最复杂的应用也可以集装箱化
  • 轻量级:容器利用并共享主机内核
  • 可互换:可以及时部署更新和升级
  • 便携式:可以在本地构建,部署到云,并在任何地方运行
  • 可扩展: 可以增加并自动分发容器副本
  • 可堆叠:可以垂直和即时堆叠服务

容器是与其他容器共享主机的内核,它运行的是一个独立的进程,不占用其他任何可执行文件的内存,非常轻量。
虚拟机运行的是一个完整的操作系统,通过虚拟机管理程序对主机资源进行虚拟访问,相比之下需要的资源更多。

1.4 Docker与虚拟机的区别

特性Docker容器虚拟机
启动速度秒级分钟级
计算能力损耗几乎无损耗 50%左右
性能接近原生弱于
系统支持量(单机)上千个几十个
隔离性资源隔离/限制完全隔离

1.5 容器在内核中支持的两种技术

Docker本质就是宿主机的一个进程,docker是通过namespace实现资源隔离,通过cgroup实现资源限制 ,通过写时复制技术(copy-on-write)实现高效文件操作 (类似于虚拟机的磁盘,比如分配500g并不是实际占用物理磁盘500g,只有当需要修改时才复制一份数据)

1.6 namespace的六大类型


2.Docker核心概念

2.1 镜像

Docker的镜像是创建容器的基础,类似于虚拟机的快照,可以理解为一个面向docker引擎的只读模板.
通过镜像启动一个容器,一个镜像是一个可执行的包,其中包括运行应用程序所需要的所有内容包括代码、运行时间、库、环境变量和配置文件。
docker镜像也是一个压缩包,只是这个压缩包不只是可执行文件,环境部署脚本,它还包含了完整的操作系统.因为大部分的镜像都是基于某个操作系统来构建,所以很轻松的就可以构建本地和远端一样的环境,这也是docker镜像的精髓。

2.2 容器

docker的容器是从镜像创建的运行实例,它可以被启动、停止和删除。所创建的每一个容器都是相互隔离、互不可见,以保证平台的安全性。
可以把容器看作是一个简易版的linux环境(包括root用户权限、镜像空间、用户空间和网络空间等) 和运行在其中的应用程序

2.3 仓库

Docker仓库是用来集中保存镜像的地方,当创建了自己的镜像之后,可以使用push命令将它上传到共有仓库(public)或者私有仓库(private), 当下次要在另一台机器上使用这个镜像时,只需从仓库获取.

Docker的镜像 、容器、日志等内容全部都默认存储在/var/lib/docker

3.安装Docker

目前Docker只能支持64位系统。

systemctl disable --now firewalld
setenforce 0
vim /etc/selinux/config
SELINUX=disabled

导入阿里云镜像源

cd /etc/yum.repos.d
mv local.repo repo.bak
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

安装依赖包

yum install -y yum-utils device-mapper-persistent-data lvm2 
--------------------------------------------------------------------------------------------
yum-utils:提供了 yum-config-manager 工具。
device mapper: 是Linux内核中支持逻辑卷管理的通用设备映射机制,它为实现用于存储资源管理的块设备驱动提供了一个高度模块化的内核架构。
device mapper存储驱动程序需要 device-mapper-persistent-data 和 lvm2。

设置阿里云docker镜像源

yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 

安装 Docker-CE并设置为开机自动启动

yum install -y docker-ce docker-ce-cli containerd.io

systemctl start docker.service
systemctl enable docker.service 
--------------------------------------------------------------------------------------------
安装好的Docker系统有两个程序,Docker服务端和Docker客户端。其中Docker服务端是一个服务进程,负责管理所有容器。 Docker客户端则扮演着Docker服务端的远程控制器,可以用来控制Docker的服务端进程。大部分情况下Docker服务端和客户端运行在一台机器上。
--------------------------------------------------------------------------------------------

3.1 查看 docker 版本信息

docker version  #查看docker版本

#docker详细信息查看
docker info  

4. Docker镜像操作

镜像加速下载

浏览器访问阿里云官网>产品>容器>容器镜像服务 ACR>管理控制台>镜像工具>镜像加速器



搜索镜像

docker search 关键字
docker search nginx

获取镜像

docker pull 仓库名/镜像名[:标签]
#如果下载镜像时不指定标签,则默认会下载仓库中最新版本的镜像,即选择标签为latest标签。
docker pull nginx
docker pull nginx:1.20
docker pull nginx:1.18

查看下载到本地的所有镜像

docker images等于docker image ls

REPOSITORY:镜像属于的仓库;
TAG:镜像的标签信息,标记同一个仓库中的不同镜像;
IMAGE ID:镜像的唯一ID号,唯一标识一个镜像;
CREATED:镜像创建时间;

docker images -q   #仅查看镜像 id号



查看镜像信息

镜像下载后存放在/var/lib/docker。
Docker相关的本地资源存放在/var/lib/docker/目录下,其中containers目录存放容器信息,image目录存放镜像信息,overlay2目录下存放具体的镜像底层文件。

查看下载的镜像文件信息

cat /var/lib/docker/image/overlay2/repositories.json

根据镜像的唯一标识ID号,获取镜像详细信息

docker inspect 镜像ID号
docker inspect 605c77e624dd

docker inspect 仓库名:标签
docker inspect nginx:1.20

lowerdir是镜像层,目录或者文件是只读的,其实就是rootfs,image layer可以分很多层,所以对应的lowerdir是可以有多个目录
upperdir是在lowerdir之上的容器层,这层是可读可写的,在启动一个容器时候会进行创建,所有的对容器数据更改都发生在这层
MergedDir是表现层,是容器的挂载点


为本地的镜像添加新的标签

docker tag 名称:[标签] 新名称:[新标签]

docker tag nginx:latest nginx:1.21
docker tag nginx:latest xy101/nginx:1.21


删除镜像

docker rmi 镜像名称:标签		  #当一个镜像有多个标签时,只是删除其中指定的标签
或者
docker rmi 镜像ID号			  #会彻底删除该镜像
docker rmi 镜像ID号	-f        #强制删除所有的镜像

快速删除所有镜像方法:
docker rmi $(docker images -q)

docker rmi nginx:1.18
docker rmi 50fe74b50e0d
docker rmi 605c77e624dd -f




存出镜像:将镜像保存成为本地文件

docker save -o 镜像文件路径  镜像名或镜像ID       #将镜像导出为文件

docker save -o /opt/nginx-1.20.tar nginx:1.20
ls /opt
scp /opt/nginx-1.20.tar 192.168.9.111:/opt

192.168.9.111服务器查看


载入镜像:将镜像文件导入到镜像库中

docker load < 存出的文件
或者
docker load -i 存出的文件

docker load < nginx
docker load -i nginx

上传镜像

docker账户

默认上传到 docker Hub 官方公共仓库,需要注册使用公共仓库的账号。https://hub.docker.com
可以使
 用命令来输入用户名、密码和邮箱来完成注册和登录。
在上传镜像之前,还需要先对本地镜像添加新的标签,然后再使用 docker push 命令进行上传。

docker login  #输入用户名及密码
docker tag nginx:1.20 别名   #添加别名
docker push 别名   #上传即可

阿里云账户上传示例

docker login --username=aliyun6939554239 registry.cn-hangzhou.aliyuncs.com #登录,输入密码
docker tag nginx:1.20 registry.cn-hangzhou.aliyuncs.com/aliyun-xy101/nginx-xy101:1.20   #为nginx:1.20创建别名ginx-xy101:1.20
docker push registry.cn-hangzhou.aliyuncs.com/aliyun-xy101/nginx-xy101:1.20  #上传

阿里云官方进行查看


5.Docker容器操作

容器创建:就是将镜像加载到容器的过程。

新创建的容器默认处于停止状态,不运行任何程序,需要在其中发起一个进程来启动容器。

docker create [选项] 镜像名:标签 [容器启动命令]    #创建容器
常用选项:
-i:让容器开启标准输入接受用户输入命令
-t:让Docker分配一个伪终端tty
-it :合起来实现和容器交互的作用,运行一个交互式会话shell 
--name : 指定容器名

docker create -it nginx:latest /bin/bash

查看容器的运行状态

docker ps -a			#-a选项可以显示所有的容器
docker ps -a -q  #查看容器id号
docker inspect 容器名/容器id  #查看容器详细信息



启动容器

docker start 容器的ID/名称
docker ps -a    #查看所有容器
docker ps       #查看正在运行的容器


停止容器

docker stop 容器的ID/名称 [-t 等待时间]   #停止容器,发送SIGTERM信号,默认等待10d 
docker kill 容器的ID/名称      #强制退出容器,默认发送SIGKILL信号

删除容器

docker rm [-f] 容器ID/名称   #删除已经停止的容器  [-f]选项强制删除

若想删除正在 运行的容器,必须先暂停该容器的启动状态,在进行删除或使用-f选项,否则无法删除


批量清理后台停止的容器

docker rm $(docker ps -a -q)	


批量清理后台所有容器

docker rm $(docker ps -a -q) -f


创建并启动容器

可以直接执行docker run命令, 等同于先执行docker create命令,再执行docker start命令。


注意: 容器是一个与其中运行的shell命令/进程共存亡的终端,命令/进程运行容器运行, 命令/进程结束容器退出。
docker容器默认会把容器内部第一个进程,也就是pid=1的程序作为docker容器是否正在运行的依据,如果docker容器中pid = 1的进程挂了,那么docker容器便会直接退出,也就是说Docker容器中必须有一个前台进程,否则认为容器已经挂掉。

当利用docker run来创建容器时, Docker在后台的标准运行过程是:

(1)检查本地是否存在指定的镜像。当镜像不存在时,会从公有仓库下载;
(2)利用镜像创建并启动一个容器;
(3)分配一个文件系统给容器,在只读的镜像层外面挂载一层可读写层;
(4)从宿主主机配置的网桥接口中桥接一个虚拟机接口到容器中;
(5)分配一个地址池中的IP地址给容器;
(6)执行用户指定的应用程序,执行完毕后容器被终止运行。

容器的进入

需要进入容器进行命令操作时,可以使用docker exec命令进入运行着的容器。

docker exec -it 容器ID/名称 /bin/bash
-i 选项表示让容器的输入保持打开;
-t 选项表示让Docker分配一个伪终端。
#进入容器前,确保容器正在运行
docker exec -it c3 /bin/sh
ls
exit				#退出容器后,容器仍在运行

将本地文件复制到容器中

docker cp 宿主机文件路径  容器名或容器ID:绝对路径                      #复制宿主机文件到容器中
docker cp /etc/yum.repos.d/CentOS-Base.repo c3:/lib

从容器复制文件到本地主机

cp 容器名或容器ID:绝对路径  宿主机文件路径                      #复制容器文件到宿主机中
docker cp c3:/lib/systemd /root/
docker cp c3:/lib/init /root/

查看容器日志

docker logs 容器名/容器id    #查看容器中PID=1的主进程的日志

导出容器

docker export 容器名/id > 保存目录/文件名
docker export -o 保存目录/文件名 容器id/容器名

导入容器

docker import 容器文件 -- 名称:标签
cat 容器文件 | docker import - 镜像名:标签    #将容器模板文件导入成镜像


docker import nginx.tar -- nginx:xy101
cat nginx.tar | docker import - nginx:xy102


镜像是创建容器的根本,因此只能先将容器文件导出为镜像,再有镜像创建、启动容器,才能导入容器

6.总结

docker是什么?

docker是用go语言开发并开源的容器引擎,用来运行容器里的应用。docker也是用来管理容器和镜像的工具。

Docker与虚拟机的区别

docker容器虚拟机
所有容器共享宿主机的内核每个虚拟机都有独立的操作系统和内核
通过namespace实现资源隔离,通过cgroup实现限制资源的最大使用量完全隔离,每个虚拟机都有独立的硬件资源分配
秒级启动速度分钟级启动速度
容器相当于宿主机的进程,性能几乎没有损耗需要通过hypervisor虚拟机管理程序对宿主机资源虚拟访问,会有一定的性能损耗
一个宿主机可以启动成百上千个容器最多几十台虚拟机

Linux6大namespace(资源隔离)

MNT/MOUNT隔离文件系统
NET/Network网络资源隔离
PID进程的pid隔离
IPC进程间通信隔离
UTS隔离主机名
USER隔离用户

docker run的启动过程

1.检查本地是否有指定镜像,如果有则直接使用本地镜像创建容器,如果没有则从仓库拉取镜像再创建容器

2.在只读的镜像层上再挂载一层可读可写的容器层

3.从docker网桥给容器分配一个虚拟接口和IP地址

4.使用镜像的默认启动命令或docker run 指定的命令来启动容器,直到容器中的PID=1的主进程退出为止

标签:基本,容器,部署,虚拟机,nginx,镜像,Docker,docker
From: https://blog.csdn.net/2402_83805984/article/details/140343097

相关文章

  • 002_python3 基本数据类型
    1.变量Python中的变量不需要声明。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。"类型"是变量所指的内存中对象的类型等号(=)用来给变量赋值。2.多个变量赋值,同时赋值a=b=c=1a,b,c=1,2,"runoob"a=3;b=4.2;c=5+5j3.标准数据类型 Python3中常......
  • 数组的基本知识
    数组的定义数组是相同类型数据的有序集合。数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成。其中,每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问它们。(从0开始)数组声明创建首先必须声明数组变量,才能在程序中使用数组。下面是声明数组......
  • 在ubantu系统中部署ChatGLM-6B
    ChatGLM-6B介绍ChatGLM-6B是一个开源的、支持中英双语的对话语言模型,基于GeneralLanguageModel(GLM)架构,具有62亿参数。结合模型量化技术,用户可以在消费级的显卡上进行本地部署(INT4量化级别下最低只需6GB显存)。ChatGLM-6B使用了和ChatGPT相似的技术,针对中文问答......
  • Git 的基本概念和使用方式
    Git是一个版本控制系统,它可以跟踪和管理代码的修改历史。下面是Git的一些基本概念和使用方式的解释:仓库(Repository):Git仓库是存储代码的地方。可以在本地计算机上创建一个本地仓库,也可以在代码托管平台(如GitHub、Bitbucket)上创建一个远程仓库。仓库可以包含代码及其历史记录。......
  • 环境部署之在 Linux 服务器上搭建和部署 Python 环境
    背景说明在企业工作中,自动化测试框架落地肯定会集成到Jenkins服务器上做持续集成测试,自动构建以及发送结果到邮箱,实现真正的无人值守测试。不过Jenkins搭建一般都会部署在公司的服务器上,不会在私人电脑里,而服务器大部分都是Linux操作系统的。如果要在Linux上的Jenkins服......
  • 零代码教你安装部署Stable Diffusion 3,一键生成高质量图像
    本文分享自华为云社区《重磅!【支持中文】stable-diffusion-3安装部署教程-SD3来了》,作者:码上开花_Lancer。正如承诺的那样,StabilityAI在6月12日正式开源了StableDiffusion3(Medium版本)!不愧是AI生图领域的“开源英雄”。最近一段时间,正当所有人都在为OpenAI发布Sora狂欢时,Stabi......
  • Docker学习笔记(02)——Docker相关命令
    docker服务相关命令启动docker服务:systemctlstartdocker停止docker服务:systemctlstopdocker重启docker服务:systemctlrestartdocker查看docker服务状态:systemctlstatusdocker设置开机启动docker服务:systemctlenabledockerdocker镜像相关命令查看镜像do......
  • linux 路由基本命令的使用
    MarkdownExamplelinuxroute命令route命令可以显示或设置Linux内核中的路由表,主要是静态路由对于局域网中的Linux主机,要想访问Internet,需要将局域网的网关IP地址设置为这个主机的默认路由。在命令行中通过route命令添加的路由在网卡重启或机器重启后失效。可以......
  • Docker学习笔记(03)——制作Docker镜像
    Docker镜像原理思考:Docker镜像本质是什么?是一个分层文件系统Docker中一个centos镜像为什么只有200MB,而一个centos操作系统的iso文件要几个个G?Centos的iso镜像文件包含bootfs和rootfs,而docker的centos镜像复用操作系统的bootfs,只有rootfs和其他镜像层Docker中一个tomcat......
  • Docker学习笔记(01)——安装Docker
    Windows安装docker若打开报错:×DockerDesktopDockerDesktop-WindowsHypervisorisnotpresentDockerDesktopisunabletodetectaHypervisor.HardwareassistedvirtualizationanddataexecutionprotectionmustbeenabledintheBlOS.Seehttps://docs.docker......