Docker·1(简介、安装、基本使用)

目录

  • 1. 什么是Docker
    • 1.1. 什么是容器
    • 1.2. 什么是Docker
  • 2. 安装Docker
  • 3. 镜像操作
    • 3.1. 拉取镜像
    • 3.2. 卸载镜像/容器
    • 3.3. 使用镜像/容器
  • 4. 相关指令说明

1. 什么是Docker

1.1. 什么是容器

虚拟机: 操作系统是一个很笨重的程序,即是啥都不干,虚拟本身都要占用很多内存和磁盘,并且启动很慢(操作系统要从头到尾把该检测的都检测了,该加载的都加载上)。

容器: 类似于码头的集装箱——相互隔离、长期反复使用、快速装载和卸载、规格标准,在港口和船上都可以摆放。

虚拟机&Docker的隔离:

  • 隔离:
    • 虚拟机:现代软件开发的一大目的就是隔离,通过将应用程序部署在不同的虚拟机中从而实现隔离
    • 容器:只隔离应用程序的运行时环境(程序运行依赖的各种库以及配置)但容器之间可以共享同一个操作系统
  • 容器的优势:轻量级且占用的资源更少,与操作系统动辄几G的内存占用相比,容器技术只需数M空间,因此我们可以在同样规格的硬件上大量部署容器,而且不同于操作系统数分钟的启动时间容器几乎瞬时启动

1.2. 什么是Docker

Docker: Go语言开源项目,docker将程序以及程序所有的依赖都打包到docker container。Docker可以把程序所需要的环境装在容器里面,以做到一次容器配置,程序处处可运行。

组成(理解):

  • dockerfile——源代码
  • image——可执行的程序
  • container——进程

关键指令:

  • docker build
    docker编译docker file:client在接收到请求后转发给docker daemon,接着docker daemon根据docker file创建出“可执行程序”image
  • docker run
    docker daemon(守护进程,负责管理容器和镜像的生命周期,以及提供其他相关的管理和维护功能)将image加载到内存执行,跑起来的image就是container
  • docker pull
    docker daemon接收到命令后向docker registry(镜像库)发送image下载请求

Docker的关键组件:

  • 容器技术:Docker使用容器技术来隔离应用程序及其依赖项。每个容器都包含了一个应用程序及其所有的依赖项,并且彼此相互隔离。这使得应用程序的部署、管理和扩展变得更加简单和高效。
  • 镜像:Docker使用镜像来定义容器的运行环境。镜像是一个轻量级的、可执行的独立软件包,包含了运行应用程序所需的所有文件和配置。Docker通过读取镜像来创建和运行容器。
  • Docker守护进程:Docker守护进程是Docker引擎的核心组件,负责管理容器和镜像的生命周期。它接收来自Docker客户端的命令和请求,并在后台运行容器和执行相关的操作。
  • Docker注册中心:Docker注册中心用于存储和共享镜像。它提供了一个中央化的存储和分发机制,使得镜像可以轻松地在不同的机器和环境之间传输和共享。
  • Docker CLI(命令行接口):Docker CLI是Docker的命令行工具,用于与Docker守护进程进行交互。通过Docker CLI,用户可以创建、运行、停止、删除容器和镜像等操作。
  • Docker网络:Docker网络负责管理容器之间的网络通信以及容器与外部网络的连接。它提供了一种灵活的网络模型,使得容器可以轻松地相互通信并暴露给外部世界。
  • Docker存储驱动:Docker使用存储驱动来管理容器的文件系统和卷。不同的存储驱动可以根据需求选择,以满足不同的性能和可靠性要求。

2. 安装Docker

本文全的案例与指令全是基于Centos7.6!!!

注意:Docker默认安装目录:/var/lib/docker

  1. 查看docker稳定版本,并选择安装:

    # 在存储库中列出可用版本
    yum list docker-ce --showduplicates | sort -r
    # 安装
    yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io
    
  2. CentOS7 系统 CentOS-Extras 库中已带 Docker,可以直接安装

    yum update
    # 安装必要依赖
    #  yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
    yum install -y yum-utils device-mapper-persistent-data lvm2
    # 设置yum源(2选1)# 阿里yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo# 中央yum-config-manager --add-repo http://download.docker.com/linux/centos/docker-ce.repo
    # 可以查看所有仓库中所有docker版本,并选择特定版本安装
    yum list docker-ce --showduplicates | sort -r
    yum install docker-ce-18.03.1.ce
    
  3. 安装之后启动 Docker 服务,并配置开机自启动

    # 启动Docker服务,也可以使用 systemctl start docker 启动服务
    service docker start
    # 设置开机自启动
    chkconfig docker on
    # 查看Docker是否开机自启动
    systemctl is-enabled docker
    
  4. 卸载Docker,可参考这篇博客:https://blog.csdn.net/zqd_java/article/details/122249755

3. 镜像操作

此部分以拉取Postgresql:14.2的镜像为例

3.1. 拉取镜像

如果拉取镜像报错报错:missing signature key
处理: 查看docker版本docker version
docker版本太老,需要重装

安装最新的Docker:yum install docker-ce -y

  1. 拉取pg镜像
    • docker search postgres 查看远程仓库有哪些版本的postgres
      • docker pull postgres:14.2 拉取Postgresql
    • docker images 展示本地镜像
      仓库 镜像标记 ID(唯一) 创建时间 大小

3.2. 卸载镜像/容器

docker rmi imagesId 通过镜像ID卸载镜像

如果一个镜像正在被一个容器所使用,那就删除这个容器,再卸载镜像,或者 docker rmi -f ImageId 强制卸载

如何删除一个容器

  • 查看容器列表(查看所有容器,如果不加 --all,只查正在跑的容器):docker container list --all,也可以用docker ps
  • 停止容器:docker stop ContainerId
  • 删除容器:docker rm ContainerId

3.3. 使用镜像/容器

注意:

  1. 默认情况下,Docker容器中的PostgreSQL数据目录通常位于容器内部的/var/lib/postgresql/data路径下
  2. 刚拉下来Postgresql镜像并不会立即创建一个数据目录,而是需要运行起来容器之后才会创建
  3. 最好初始化一个docker卷来持久化Postgresql的数据,并将其挂载到PostgreSQL容器的/var/lib/postgresql/data目录

配置postgreSQL14.2镜像:

  1. 创建一个docker卷持久化Postgresql的数据
    docker卷:volume,一个持久的存储区域,可以用来保存数据,即使容器被删除或重新创建,数据仍然可以保留(注:卷名必须唯一)

    docker volume create psql-data
    
  2. 创建并运行容器

    # docker run -d --name 容器名 -v docker卷:psql数据目录 -e POSTGRES_USER=用户名 -e POSTGRES_PASSWORD=密码 -p 端口 repository:tag
    docker run --privileged=true -d --name mypg -v psql-data:/var/lib/postgresql/data -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=admin -p 5432:5432 postgres:14.2
    
  3. 验证持久目录
    注意: 直接ls /var/lib/postgresql/data可能会报错——ls: cannot access

    [root@VM-8-9-centos lib]# ls /var/lib/postgresql/data
    ls: cannot access /var/lib/postgresql/data: No such file or directory
    

    当使用-v选项将宿主机上的目录挂载到容器内时,Docker会在宿主机上创建一个卷,并使用容器内的路径来映射它。如我将psql-data卷挂载到了容器的/var/lib/postgresql/data目录。
    但是,/var/lib/postgresql/data这个路径是PostgreSQL容器的内部路径,而不是宿主机上的实际路径。当我尝试在宿主机上使用ls命令列出这个路径时,它会提示“No such file or directory”,因为该路径在宿主机上并不存在。
    应该使用Docker提供的命令和工具,而不是直接在宿主机上访问该路径。应该用docker exec <container_name_or_id> <command>在容器内部执行指令。

    [root@VM-8-9-centos lib]# docker exec -it mypg ls /var/lib/postgresql/data
    base          pg_ident.conf  pg_serial     pg_tblspc    postgresql.auto.conf
    global        pg_logical     pg_snapshots  pg_twophase  postgresql.conf
    pg_commit_ts  pg_multixact   pg_stat       PG_VERSION   postmaster.opts
    pg_dynshmem   pg_notify      pg_stat_tmp   pg_wal       postmaster.pid
    pg_hba.conf   pg_replslot    pg_subtrans   pg_xact
    
  4. 连接数据库
    报错原因和上面是一样的

    [root@VM-8-9-centos ~]# psql -U postgres -h localhost -p 5432 -d postgres
    -bash: psql: command not found
    

    换个指令:docker exec -it mypg psql -U postgres -h localhost -p 5432 -d postgres

    [root@VM-8-9-centos ~]# docker exec -it mypg psql -U postgres -h localhost -p 5432 -d postgres
    psql (14.2 (Debian 14.2-1.pgdg110+1))
    Type "help" for help.postgres=#
    
  5. 开启密码校验:可以看到,无须密码就登录进去了,现在就需要去修改一下配置文件了
    就是要找到pg_hba.conf文件的目录,然后修改

    [root@VM-8-9-centos ~]# find / -name pg_hba.conf
    /var/lib/docker/volumes/psql-data/_data/pg_hba.conf
    [root@VM-8-9-centos ~]# vim /var/lib/docker/volumes/psql-data/_data/pg_hba.conf
    

    改前:

    改后:

  6. 重启容器就OK了

4. 相关指令说明

为了方便阅读,这里对文中的相关指令做一些说明。

Docker常用指令:都是docker开头的指令。

指令说明案例
docker pull拉取镜像docker pull postgres:14.2
docker version查看docker版本
docker search查看远程仓库的镜像版本docker search postgres
docker images展示本地镜像
docker rmi卸载镜像docker rmi imagesId
docker rmi -f imagesId
docker container list
docker container list --all
展示在运行的容器
展示本地所有容器
docker ps展示正在跑的容器
docker stop停止容器运行docker stop ContainerId
docker rm卸载容器docker rm ContainerId
docker rm -f ContainerId
docker volumedocker卷操作docker volume create psql-data
创建一个叫psql-data的卷
docker run创建并运行容器docker run --privileged=true -d --name mypg -v psql-data:/var/lib/postgresql/data -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=admin -p 5432:5432 postgres:14.2
docker exec在容器内部执行指令docker exec -it mypg ls /var/lib/postgresql/data
docker satrt运行容器docker satrt name
docker restart重启容器docker restart name

一些Centos7操作:

操作指令
修改环境变量vi /etc/profile
export 变量名=$PATH:文件目录
source /etc/profile
查看环境变量echo $变量名env
删除环境变量unset 变量名unset *.*

对比which、whereis、find、locate:

  • which——用于查找可直接执行的命令,且只在$PATH路径(环境变量)中搜索,只返回第一个匹配的文件路径,但可以通过-a选项返回所有匹配结果

    [root@VM-8-9-centos bin]# which docker
    /usr/bin/docker
    
  • whereis——在$PATH路径基础上增加了一些系统目录的查找,查找范围比which稍大,查找速度快。可以通过选项-b限定只搜索二进制文件

    [root@VM-8-9-centos bin]# whereis docker
    docker: /usr/bin/docker /etc/docker /usr/share/man/man1/docker.1.gz
    
  • find——直接搜索整个文件目录的任意文件,默认从根目录开始搜索,匹配名字

    [root@VM-8-9-centos bin]# find / -name docker
    /sys/fs/cgroup/devices/docker
    /sys/fs/cgroup/cpuset/docker
    /sys/fs/cgroup/hugetlb/docker
    /sys/fs/cgroup/net_cls,net_prio/docker
    /sys/fs/cgroup/pids/docker
    /sys/fs/cgroup/freezer/docker
    /sys/fs/cgroup/cpu,cpuacct/docker
    /sys/fs/cgroup/blkio/docker
    /sys/fs/cgroup/memory/docker
    /sys/fs/cgroup/perf_event/docker
    /sys/fs/cgroup/systemd/docker
    /etc/docker
    /usr/share/bash-completion/completions/docker
    /usr/bin/docker
    /var/lib/docker
    /var/lib/docker/overlay2/07892f16155c27680887056014518b9bda0c79aa0da2a3973dcc6d68c337a9a8/diff/etc/dpkg/dpkg.cfg.d/docker
    /var/lib/docker/overlay2/b6417229db3f6b31cfc75c95453e44541e6c172e961631dd92de966a100bbe3f/diff/etc/dpkg/dpkg.cfg.d/docker
    /run/docker
    
  • locate——超快速查找任意文件。它会从Linux内置的索引数据库查找文件的路径,索引速度超快。刚刚新建的文件可能需要一定时间才能加入该索引数据库,可以通过执行updatedb命令来强制更新一次索引,这样确保不会遗漏文件。该命令通常会返回大量匹配项,可以使用-r选项通过正则表达式来精确匹配

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/596303.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MAC 中多显示器的设置(Parallels Desktop)

目录 一、硬件列表&#xff1a; 二、线路连接&#xff1a; 三、软件设置&#xff1a; 1. 设置显示器排列位置及显示参数 2. 分别设置外接显示器为&#xff1a;扩展显示器&#xff0c;内建显示器为主显示器 3. 设置Parallels Desktop屏幕参数 四、结果 一、硬件列表&a…

部署KVM虚拟化平台

一、KVM简介&#xff1a; KVM是Kernel Virtual Machine 的简写&#xff0c;目前Linux发行版必须在64位的系统环境才能运行KVM,同时硬件需要支持VT技术。KVM自Linux 2,6.20版本后就直接整合到Linux内核.它依托CPU虚拟化指令集&#xff08;如intel-VT.AMD-V&#xff09;实现高性…

RTSP/Onvif安防平台EasyNVR接入EasyNVS显示服务不存在的原因及解决办法

EasyNVS云管理平台具备汇聚与管理EasyGBS、EasyNVR等平台的能力&#xff0c;可以将接入的视频资源实现统一的视频能力输出&#xff0c;支持远程可视化运维等管理功能&#xff0c;还能解决设备现场没有固定公网IP却需要在公网直播的需求。 有用户在现场部署EasyNVR&#xff0c;…

HTTP模块

一、Web服务器 当应用程序&#xff08;客户端&#xff09;需要某一个资源时&#xff0c;可以向一台服务器&#xff0c;通过Http请求获取到这个资源&#xff1b;提供资源的这个服务器&#xff0c;就是一个Web服务器 目前有很多开源的Web服务器&#xff1a;Nginx、Apache&#xf…

设计领域不可缺少的10款PS插件,2023年必知!

即时设计 即时设计是一个更快更简单的产品协作设计平台。即时设计主要用户人群涵盖产品经理&#xff0c;设计师和工程师&#xff0c;其核心功能点包括&#xff1a;智能标注、一键切图、多样批注、快速交互、全貌画板、团队管理。从产品到开发&#xff0c;真正实现了只要一个文…

MySQL之表的记录操作

前言 存数据不是目的&#xff0c;目的是能够将存起来的数据取出来或者查出来&#xff0c;并且能够对数据进行增删改查操作&#xff0c;本文将详细介绍表中记录的增删改查操作。对记录的操作属于DML数据库操作语言&#xff0c;可以通过SQL实现对数据的操作&#xff0c;包括实现向…

MSE Serverless 正式商用,构建低成本高弹性的微服务架构

作者&#xff1a;问思 微服务架构充分提升了研发效率&#xff0c;解决了复杂业务系统的快速迭代问题。但随着业务及技术演进&#xff0c;各种微服务组件也愈发复杂。如何实现更敏捷的开发&#xff0c;降低微服务开发运维成本&#xff0c;做到全链路的弹性&#xff0c;保障整个…

RT-Thread 14. GD32F330RBT6 Keil4移植RT-Thread

1.增加rt-thread-v4.1.0源码 rt-thread-v4.1.0\bsp\gd32350r-eval复制重命名为gd32f330_v1 2.文件组织结构 Usr&#xff1a;存放App任务应用&#xff0c;属于应用层&#xff0c;完全脱离硬件 CMSIS&#xff1a;硬件层&#xff0c;启动文件、系统文件 Driver&#xff1a;硬件外…

【无标题】idea的lombok插件支持@SuperBuilder注解啦

在我的博客阅读本文 1. 前言 今早进公司打开idea&#xff0c;弹出更新提示&#xff0c;简单看了下&#xff0c;原来是idea的lombok插件更新了&#xff0c;惊喜的发现update log上写着Add support for SuperBuilder。 为什么说是惊喜呢&#xff1f;因为之前也有用到这个的场景…

树莓派外设开发综述及WiringPi库安装

树莓派常用的接口 IO&#xff1a; input&#xff1a; output&#xff1a; PWM&#xff1a; IIC spi uart WiringPi库 树莓派一个非常重要的 WiringPi库&#xff08;Linux下 动态库 ”.so“ 静态库”.a"&#xff09; &#xff08;是一个特定平台&#xff0c;特…

不慌,新手专属!10款免费画图软件助你轻松入门!

即时设计 即时设计是一种基于云的在线矢量设计工具&#xff0c;是一种免费的绘图软件&#xff0c;专门用于现代UI和UX设计。它极大地简化了矢量图形的编辑&#xff0c;以一种非常直观和易于使用的方式&#xff0c;让设计师专注于他们最擅长的事情&#xff1a;创造优秀的产品。…

java数据结构与算法刷题-----LeetCode70. 爬楼梯

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 很多人觉得动态规划很难&#xff0c;但它就是固定套路而已。其实动态规划只…

巨杉数据库荣登2023胡润全球猎豹企业榜

胡润研究院与广州南沙联合发布《2023胡润全球猎豹企业榜》&#xff0c;这是胡润研究院首次发布“全球猎豹企业”。榜单列出了全球成立于2000年后&#xff0c;五年内最有可能达到独角兽级十亿美金估值的高成长性企业。巨杉数据库凭借在分布式文档型数据库领域的创新突破&#xf…

「HarmonyOS」验证码多TextInput输入框焦点自动跳转问题

需求背景&#xff1a;需要做一个多输入框的验证码模块&#xff0c;输入验证码时输入后光标会自动跳转至下一个输入框&#xff0c;删除验证码时会自动删除上一个输入框内容&#xff0c;并且光标跳转至上一个输入框内。6位验证码全部输完后进行登录请求 具体样式如下图&#xff1…

快速跳闸中间继电器 RXMS1-RK216 066-AD 24V 柜内安装,板后接线带中座

系列型号 RXMS1 RK 216 437快速跳闸继电器&#xff1b;RXMS1 RK 216 237快速跳闸继电器&#xff1b; RXMS1 RK 216 449快速跳闸继电器&#xff1b;RXMS1 RK 216 249快速跳闸继电器&#xff1b; RXMS1 RK 216 450快速跳闸继电器&#xff1b;RXMS1 RK 216 250快速跳闸继电器&…

three.js Raycaster(鼠标点击选中模型)

效果&#xff1a; 代码&#xff1a; <template><div><el-container><el-main><div class"box-card-left"><div id"threejs" style"border: 1px solid red"></div><div class"box-right"…

URLConnection()和openStream()两个方法产生SSRF的原理和修复方法

今年是自主研发的第三个年份&#xff0c;也是重视安全的年份。 转一篇小文章&#xff1a; 0x00 前言 SSRF 形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。比如从指定 URL 地址获取网页文本内容&#xff0c;加载指定地址的图…

VR云游开启智慧旅游新纪元,打造“云旅游”新模式

元旦假期&#xff0c;全国文化和旅游市场平稳有序&#xff0c;家人和亲友的出游趋势稳步增加&#xff0c;演唱会、音乐节、跨年等活动的叠加让元旦出游更加吸引游客。在冰雪旅游热度持续攀升的时候&#xff0c;许多年轻群体已经开始使用VR云游进行智慧景区旅游&#xff0c;身临…

项目代码生成心得

1、如果一直ctrl B 生成不了代码&#xff0c;可能是卡住了&#xff0c;要run一下才行 2、sub chart里面千万不要加上内部自转移和en,du:不然里面的内容压根不会生成代码&#xff0c;Matlab认为它可以自己在里面自己转。 3、生成的代码跟设计图是不一样的&#xff01;&#xff…

Databend 的算力可扩展性

作者&#xff1a;尚卓燃&#xff08;PsiACE&#xff09; 澳门科技大学在读硕士&#xff0c;Databend 研发工程师实习生 Apache OpenDAL(Incubating) Committer PsiACE (Chojan Shang) GitHub 对于大规模分布式数据处理系统&#xff0c;为了更好应对数据、流量、和复杂性的增长…