docker技术简介

news2025/7/20 6:01:58

目录

概念

命令

数据卷

DockerFile

应用部署

服务编排

私有仓库


概念

Docker 是一个开源的应用容器引擎,而容器技术是一种轻量级虚拟化方案(虚拟机太繁重了不够轻量级),Docker的基础是Linux容器(LXC)等技术。在LXC的基础上Docker进行了进一步的封装,让用户不需要去关心容器的管理,使得操作更为简便。可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上。实现快速分发部署
  • 更快的交付和部署
  • 更高效的利用资源
  • 更轻松的迁移和扩展
  • 更轻松的管理和更新
  • 解决异构环境

不同的虚拟机隔离的关键部分在于他们彼此有各自独立的磁盘、主机名、ipc、pid、网络、用户等,然而进程之间在内存的使用上天生就是彼此隔离的,因此通过技术手段让一个进程的网络空间、硬盘空间、pid等与其他进程隔离开, 这种技术就是docker,启动一个容器就是启动一个进程,该进程有自己的root文件系统,同时也有自己独立的“操作系统”(操作系统被制作成镜像放到进程里,镜像是由特殊的文件系统叠加而成,最底端是 bootfs,并使用宿主机的bootfs),其中docker三大核心技术:namespace名称空间实现容器之间空间和资源隔离,cgroup机制对cpu磁盘内存资源进行限制分配,UnionFS联合文件系统实现多个容器进程共享同一份镜像(rootfs镜像),而不是像传统虚拟机每台vm都有一个操作系统

docker中有三个核心概念,镜像,容器,仓库

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

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

3、用来保存镜像的仓库。当我们构建好自己的镜像之后,需要存放在仓库中,当我们需要启动一个镜像时,可以在仓库中下载下来。

命令

安装

#更新yum源
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/docker-ce.repo https://repo.huaweicloud.com/docker-ce/linux/centos/docker-ce.repo
# 清除rpm包及header
yum clean all
# 重新缓存远端服务器rpm包信息
yum makecache
#添加阿里云镜像加速器
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://qi3pe2qe.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
#安装并启动
yum install docker-ce -y
[root@docker01 ~]# systemctl start docker
[root@docker01 ~]# systemctl enable docker

Docker 进程相关命令

#启动docker服务
systemctl start docker
#停止docker服务:
systemctl stop docker 
#重启docker服务:
systemctl restart docker
#查看docker服务状态:
systemctl status docker 
#设置开机启动docker服务:
systemctl enable docker

Docker 镜像相关命令 

#查看镜像: 查看本地所有的镜像
docker images
docker image ls
docker images –q # 查看所用镜像的id
#搜索镜像:从网络中查找需要的镜像
docker search 镜像名称
#拉取镜像:从Docker仓库下载镜像到本地,镜像名称格式为 名称:版本号,如果版本号不指定则是最新的版本。如果不知道镜像版本,可以去docker hub 搜索对应镜像查看。
docker pull 镜像名称
#删除镜像: 删除本地镜像
docker rmi 镜像id # 删除指定本地镜像
docker rmi `docker images -q` # 删除所有本地镜像
docker push 镜像id #上传镜像
docker load -i docker_nginx.tar.gz #将包导入镜像
docker save centos:7 -o docker_centos7.tar.gz #将镜像导出到包
docker tag 镜像id 镜像标签 #给镜像打标签

Docker 容器相关命令

docker ps # 查看正在运行的容器
docker ps –a # 查看所有容器
#创建并启动容器
docker run [参数] [镜像名称] [运行容器的启动命令]
• -i:保持容器运行。通常与 -t 同时使用。加入it这两个参数后,容器创建后自动进入容器中,退出容器后,容器自动关闭。
• -t:为容器重新分配一个伪输入终端,通常与 -i 同时使用。
• -d:以守护(后台)模式运行容器。创建一个容器在后台运行,需要使用docker exec 进入容器。退出后,容器不会关闭。
• -it 创建的容器一般称为交互式容器,-id 创建的容器一般称为守护式容器
• --name:为创建的容器命名。
• -p:指定端口映射。
• -v:给容器挂载数据卷。
docker run -d -p 10.0.0.7:80:80 nginx
docker run -it -v /root/test:/root centos7

docker exec 参数 [容器名称|id] [cmd]# 进入容器,退出时不会关闭
docker stop 容器名称 #停止容器
docker start 容器名称 #启动容器
docker rm 容器名称 #删除容器
docker inspect 容器名称 #查看容器信息
docker commit [容器名称|id] 保存名称:版本 #保存容器成镜像
docker export [容器id] > [包名称] #保存容器为镜像包

 

数据卷

数据卷是宿主机中的一个目录或文件,当容器目录和数据卷目录绑定后,对方的修改会立即同步,数据卷作用是容器数据持久化,外部机器和容器间接通信,容器之间数据交换
一个数据卷可以被多个容器同时挂载
一个容器也可以被挂载多个数据卷
docker run ... –v 宿主机目录(文件):容器内目录(文件) ...
docker run –it --name=c3 –v /volume centos:7 /bin/bash
docker run –it --name=c1 --volumes-from c3 centos:7 /bin/bash
docker run –it --name=c2 --volumes-from c3 centos:7 /bin/bash

应用部署

部署mysql:先拉取镜像,基于mysql镜像创建容器 ,再映射一下端口,即可从外部机器访问宿主机,从而间接访问容器的服务

docker run -id \
-p 3307:3306 \   #将容器的 3306 端口映射到宿主机的 3307 端口
--name=c_mysql \   
-v $PWD/conf:/etc/mysql/conf.d \   
-v $PWD/logs:/logs \
-v $PWD/data:/var/lib/mysql \  #将主机当前目录下的data目录挂载到容器的/var/lib/mysql。数据目录
-e MYSQL_ROOT_PASSWORD=123456 \ #初始化 root 用户的密码
mysql:latest

docker exec –it c_mysql /bin/bash #进入容器,操作mysql

部署tomcat:拉取tomcat镜像,创建容器,设置端口映射、目录映射

cd ~/tomcat
docker run -id --name=c_tomcat \
-p 8080:8080 \ #将容器的8080端口映射到主机的8080端口
-v $PWD:/usr/local/tomcat/webapps \ #将主机中当前目录挂载到容器的webapps
tomcat

部署nginx:拉取nginx镜像,创建容器,设置端口映射、目录映射

cd ~/nginx/conf
vim nginx.conf

...

docker run -id --name=c_nginx \
-p 80:80 \
-v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf \
-v $PWD/logs:/var/log/nginx \
-v $PWD/html:/usr/share/nginx/html \
nginx

部署redis:拉取redis镜像,创建容器,设置端口映射,使用外部机器连接redis,

./redis-cli.exe -h 192.168.149.135 -p 6379

docker pull redis:5.0
docker run -id --name=c_redis -p 6379:6379 redis:5.0

DockerFile

dockerfile包含了一条条的指令,每一条指令构建一层,基于基础镜像,最终构建出一个新的镜像,对于开发人员:可以为开发团队提供一个完全一致的开发环境,对于测试人员:可以直接拿开发时所构建的镜像或者通过Dockerfile文件 构建一个新的镜像开始工作了,对于运维人员:在部署时,可以实现应用的无缝移植

#发布springboot项目案例
FROM java:8 #定义父镜像
MAINTAINER cqq <cqq@qq.cn> #定义作者信息
ADD springboot.jar app.jar #将jar包添加到容器
CMD java –jar app.jar #定义容器启动执行的命令
docker bulid –f dockerfile文件路径 –t 镜像名称:版本  #通过dockerfile构建镜像

服务编排

按照一定的业务规则批量管理容器
微服务架构的应用系统中一般包含若干个微服务,每个微服务一般都会部署多个实例,因此需要服务编排来管理container, Docker Compose是一个编排多容器分布式部署的工具,提供命令集管理容器化应用的完整开发周期,包括服务构建 ,启动和停止。使用步骤:
1. 利用 Dockerfile 定义运行环境镜像
2. 使用 docker-compose.yml 定义组成应用的各服务
3. 运行 docker-compose up 启动应用

私有仓库

除了官方仓库https://hub.docker.com,我们还可以搭建自己的私有仓库来存储和管理自己的镜像


# 1、拉取私有仓库镜像 
docker pull registry
# 2、启动私有仓库容器 
docker run -id --name=registry -p 5000:5000 registry
# 3、打开浏览器 输入地址http://私有仓库服务器ip:5000/v2/_catalog,看到{"repositories":[]} 表示私有仓库 搭建成功
# 4、修改daemon.json   
vim /etc/docker/daemon.json    
# 在上述文件中添加一个key,保存退出。此步用于让 docker 信任私有仓库地址;注意将私有仓库服务器ip修改为自己私有仓库服务器真实ip 
{"insecure-registries":["私有仓库服务器ip:5000"]} 
# 5、重启docker 服务 
systemctl restart docker
docker start registry

 上传、拉取镜像

# 1、标记镜像为私有仓库的镜像     
docker tag centos:7 私有仓库服务器IP:5000/centos:7
 
# 2、上传标记的镜像     
docker push 私有仓库服务器IP:5000/centos:7

#拉取镜像 
docker pull 私有仓库服务器ip:5000/centos:7

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

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

相关文章

离线安装ceph集群(ceph-13.2.10)

记录&#xff1a;332 场景&#xff1a;在CentOS 7.9操作系统上&#xff0c;使用ceph的rpm-mimic的ceph-13.2.10安装ceph集群。应用ceph对象存储(ceph object store)&#xff1b;应用ceph块设备(ceph block device)&#xff1b;应用ceph文件系统(ceph file system)。 版本&…

数据结构(5)树形结构——二叉搜索树(JAVA代码实现)

5.1.概述 二叉搜索树&#xff0c;也叫二叉查找树、二叉排序树&#xff0c;顾名思义&#xff0c;这种二叉树是专门用来进行数据查找的二叉树。二叉搜索树的查找其实就是二分查找。 二叉搜索树的定义&#xff1a; 二叉搜索树可以为空如果二叉搜索树不为空&#xff0c;那么每个…

Design Compiler工具学习笔记(7)

目录 引言 背景知识 多时钟设计 DC 输出文件分析 实际操作 设计源码 综合脚本 综合网表 SDF文件 SDC文件 REPORT文件 引言 本篇继续学习 DC的基本使用。本篇主要学习 DC 综合之后的效果分析&#xff0c;多同步时钟设计以及 DC 综合完成之后的各种输出文件。 前文链…

微信小程序开发基础(03视图与逻辑)

学习目标 能够知道如何实现页面之间的导航跳转 能够知道如何实现下拉刷新效果 能够知道如何实现上拉加载更多效果 能够知道小程序中常用的生命周期函数 页面导航 1. 什么是页面导航 页面导航指的是页面之间的相互跳转。例如&#xff0c;浏览器中实现页面导航的方式有如下两…

关于环境保护html网页设计完整版,5个以环境为主题的网页设计与实现

&#x1f380; 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

《剑指 Offer 》—50. 第一个只出现一次的字符

《剑指 Offer 》—50. 第一个只出现一次的字符 一、题目内容 原题连接&#xff1a;https://leetcode.cn/problems/di-yi-ge-zhi-chu-xian-yi-ci-de-zi-fu-lcof/description/ 题目&#xff1a;在字符串 s 中找出第一个只出现一次的字符。如果没有&#xff0c;返回一个单空格。…

【专栏】核心篇06| Redis 存储高可用背后的模式

关注公众号 【离心计划】呀&#xff0c;一起逃离地球表面 Redis专栏合集 【专栏】01| Redis夜的第一章 【专栏】基础篇02| Redis 旁路缓存的价值 【专栏】基础篇03| Redis 花样的数据结构 【专栏】基础篇04| Redis 该怎么保证数据不丢失&#xff08;上&#xff09; 【专栏…

RabbitMQ------发布确认高级(消息回调、回退、备份交换机)(八)

RabbitMQ------发布确认高级&#xff08;八&#xff09; 可能由于某些意外情况&#xff0c;导致RabbitMQ重启&#xff0c;在RabbitMQ重启过程中&#xff0c;生产者投递消息失败&#xff0c;导致消息丢失。 如果才能够保证RabbitMQ的消息可靠性呢&#xff1f; 可能出现两种问题…

大数据毕设选题 - 深度学习火焰识别检测系统(python YOLO)

文章目录0 前言1 基于YOLO的火焰检测与识别2 课题背景3 卷积神经网络3.1 卷积层3.2 池化层3.3 激活函数&#xff1a;3.4 全连接层3.5 使用tensorflow中keras模块实现卷积神经网络4 YOLOV54.1 网络架构图4.2 输入端4.3 基准网络4.4 Neck网络4.5 Head输出层5 数据集准备5.1 数据标…

CSRF漏洞简介

今天继续给大家介绍渗透测试相关知识&#xff0c;本文主要内容是CSRF漏洞原理、产生与危害。 免责声明&#xff1a; 本文所介绍的内容仅做学习交流使用&#xff0c;严禁利用文中技术进行非法行为&#xff0c;否则造成一切严重后果自负&#xff01; 再次强调&#xff1a;严禁对未…

Maven——分模块开发与设计(重点)

目录 一、模块拆分 1.1 模块拆分思想 1.2 pojo模块拆分 1.3 dao模块拆分 1.4 service模块拆分 1.5 controller模块拆分 二、 聚合——模块聚合 三、继承——模块继承 一、模块拆分 1.1 模块拆分思想 左侧&#xff1a;我们从前的架构&#xff0c;一个人独立做的所有工作文件…

shell脚本的条件判断1:字符串和数字和比较

前言 写脚本时&#xff0c;为了让脚本更接近人类思考问题的方式&#xff0c;可以对各种情况进行判断。例如&#xff0c;经常需要判断某些条件是否成立&#xff0c;如果条件成立该如何处理&#xff0c;如果条件不成立又该如何处理&#xff0c;这些都可以通过Shell脚本的if语句结…

大数据_什么是数据中台?

目录 一、数据中台的定义 二、数据中台必备的是个核心能力 三、数据中台VS业务中台 四、数据中台VS数据仓库 五、数据中台VS现有信息架构 六、数据中台的业务价值与技术价值 一、数据中台的定义 数据中台是一套可持续“让企业的数据用起来”的机制&#xff0c;是一种战略…

vm的生命周期钩子

vm的生命周期钩子&#xff08;共11个&#xff09;&#xff1a; 前8个&#xff1a; 将要创建>调用beforeCreate函数 创建完毕>调用created函数 将要挂载>调用beforeMount函数 &#xff08;重要&#xff09;挂载完毕>调用mounted函数>【重要钩子】 将要更新…

用户画像洞察分类模型 - 前端页面展示

文章目录一、前端与数据智能二、 体验优化需求场景跳失预测交互偏好智能 UI三、 关键技术鲸幂 UICook&#xff08;智能UI&#xff09;DataCookPipCookPipeline四、 体验优化实践数据智能实践的一般流程数据采集数据分析 -如何对数据进行分析处理并得出结论数据应用 - 分析结论如…

【C++】string类接口的了解和使用

为什么我们要学string类呢&#xff1f;那是必须是为了方便啊&#xff01;在C语言中&#xff0c;我们创建一个字符串&#xff0c;有很多操作或者必须要注意的细节会把控不住&#xff0c;所以C中出现了string类&#xff0c;让我们应对字符串等oj题也方便快捷了许多&#xff01; 目…

linux搭建redis数据库实现远程c语言访问

文章目录 linux安装reidis数据库c语言使用hiredis库实现redis数据库的操作测试代码使用hiredis库制作一个redis数据库管理系统linux安装reidis数据库 linux安装reidis数据库 sudo apt-get install redis-server使用systemctl命令查看redis服务运行状态 sudo systemctl statu…

Visual C++ 2010开发的程序在其它电脑上运行提示“找不到MSVCR100D.dll”原因及解决

Visual C 2010开发的程序在其它电脑上运行提示“找不到MSVCR100D.dll”原因及解决 Microsoft Visual C&#xff08;简称Visual C、MSVC、VS或VC&#xff09;2010是微软公司的免费C开发工具&#xff0c;具有集成开发环境&#xff0c;可提供编辑C语言&#xff0c;C以及C/CLI等编程…

惊喜:2023前瞻版Java面试指南,不止八股文

前言&#xff1a; 2022年马上就要过去了&#xff0c;即将要到来的就是2023年的金三银四面试季&#xff0c;随着政策的放宽&#xff0c;经济的逐步复苏&#xff0c;岗位的需求也会越来越大&#xff0c;所以趁这段时间进行知识储备将会是最好的时间段&#xff0c;永远要做快人一…

卷积神经网络——李宏毅机器学习笔记

以Image Classification为例 第一个解释角度&#xff1a; 先将不同尺寸的image&#xff0c;rescale成大小一样的尺寸&#xff0c;再丢到model中。 下图中&#xff0c;我们希望Cross entropy 越小越好 在计算机视角下的图片&#xff1a; 3 channels 对应R G B三个通道 随着模…