Docker的基本介绍

news2024/11/20 23:37:10

Docker 简单介绍

基本概念

镜像

docker 镜像好比一个模板,可以通过这个模板来创建容器服务,是一种轻量级、可执行的软件包,包含运行应用程序时所需要的一切:代码、运行时、库、环境变量、配置文件等

所有的应用打包成一个 docker 镜像,然后跑起来即可

得到镜像的方式:

  • 从远程下载
  • 自己制作一个镜像 DockerFile

容器

容器是从镜像创建的可运行的实例,它可以在多个环境中部署,包括开发、测试、生产等。容器通过使用 Docker 引擎运行应用程序,并提供所需的资源来运行该应用程序。容器是可变的,可以创建、启动、停止、删除等。

仓库

存放镜像的地方,分为公有仓库私有仓库


Docker 安装

安装需要的软件包

yy -utils提供了yy-config-manager相关功能,device-mapper-persistent-data和lvm2是设备映射器驱动程序所需要的。

yum install -y yum-utils \
           device-mapper-persistent-data \
               lvm2

设置 docker 下载镜像

推荐阿里云下载地址

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

更新 yum 软件包索引

我们在更新或配置 yum 源之后,通常都会使用 yum makecache 生成缓存,这个命令是将软件包信息提前在本地缓存一份,用来提高搜索安装软件的速度

yum makecache fast

安装 docker ce

yum install -y docker-ce

启动 docker

systemctl start docker

版本验证

docker version

设置开机启动

#查看服务是否自动启动(是:enabled | 否:disabled)
systemctl list-unit-files|grep docker.service 

#设置开机启动:如不是enabled可以运行如下命令设置自启动
systemctl enable docker
#重新加载服务配置
systemctl daemon-reload 

#如果希望不进行自启动,运行如下命令设置
systemctl disable docker
#重新加载服务配置
systemctl daemon-reload

卸载

systemctl stop docker 
yum remove -y docker-ce
rm -rf /var/lib/docker

底层原理

run 流程

  1. 先到本地找 docker 镜像,如果没找到,就去 远程 Dokcer Hub 中找
  2. 若远程中找到,就会下载到本地进行使用

Docker 是怎么样运行的

Docker 是一个 Client-Server 结构的系统,Docker 的守护进程运行在主机上,通过 Socket 从客户端访问

DockerServer 接收到 Docker-Client 的指令,就会执行命令

img

Docker 为什么比 虚拟机 快

  1. Docker 有着更少的抽象层;
  2. Docker 利用的是宿主机的内核,VM 需要 Guest OS

所以,启动 Docker 时,不需要像 VM 一样启动操作系统内核,避免引导。虚拟机利用的是 Guest OS,而 Docker 利用的是宿主机的操作系统,省略了复制的过程

镜像基本命令

帮助命令


docker version 		# 版本信息
docker info 		# 系统信息 - 镜像和容器数量
docker 命令 --help 	# 帮助命令

镜像命令


docker images:查看所有镜像

REPOSITORY    TAG       IMAGE ID   CREATED    SIZE
仓库名称		仓库标签		镜像ID	   创建时间	 镜像大小

可选项:
-a, --all             显示所有镜像
-q, --quiet           显示镜像ID

docker search 镜像名称:搜索镜像

docker pull 镜像名称:版本信息:拉取镜像,版本信息一定是要在 Docker Hub 上规定的

[root@VM-8-9-centos ~]# docker pull mysql:5.7 	#拉取镜像
5.7: Pulling from library/mysql 
e83e8f2e82cc: Pull complete 										# 分层下载
0f23deb01b84: Pull complete 
f5bda3b184ea: Pull complete 
ed17edbc6604: Pull complete 
33a94a6acfa7: Pull complete 
f153bd2953e4: Pull complete 
ab532edfb813: Pull complete 
c76bdfe4f3d0: Pull complete 
8a7ffe2f2551: Pull complete 
857ada4fbbcc: Pull complete 
b7c508404c3c: Pull complete 
Digest: sha256:f57eef421000aaf8332a91ab0b6c96b3c83ed2a981c29e6528b21ce10197cd16
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7

docker rmi 镜像名称/ID:删除镜像

容器命令


我们有了镜像才能有容器,需要下载一个 Linux Centos 镜像

docker pull centos

docker run [可选参数] images:运行容器

docker run [可选参数] images
-d:	以后台形式运行
-it:	使用交互方式运行
-p:	指定容器的端口 -p 8080:8080
	-p ip:主机端口:容器端口

-it:表示进入容器

可以使用 exit命令退出,使用 CTRL + P +Q 不结束容器退出

docker ps:查看当前运行的容器

docker ps [参数]
-a:显示正在运行的容器 + 历史运行过的容器
-p:只显示容器ID

docker rm 容器ID:移除容器

docker start 容器ID:开启容器

docker restart 容器ID:重启容器

docker stop 容器ID:关闭容器

docker kill 容器ID:强制关闭容器

其他常见命令


docker logs:查看日志

docker inspect 容器ID:查看镜像详细信息

docker top 容器ID:查看镜像中的进行信息

docker exec -it 容器ID bashshell:进入正在运行的容器,并开启新的终端

docker attach 容器ID:进入正在运行的容器,但不开启新的终端

docker exec -it f0cc733edfae /bin/bash

Docker 安装示例

安装 Nginx

docker search nginx 搜索镜像

docker pull nginx 拉取镜像

REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
mysql        5.7       dd6675b5cfea   5 days ago      569MB
nginx        latest    6efc10a0510f   10 days ago     142MB
centos       latest    5d0da3dc9764   19 months ago   231MB

docker run -d --name nginx01 -p 80:80 nginx 启动容器

# -d:后台运行
# -- name:给容器起名字
# -p:暴露端口 主机端口:容器端口

img

安装 Tomcat

docker pull tomcat:9.0:拉取镜像

docker run -d -p 8080:8080 tomcat:9.0:启动 tomcat 服务

docker exec -it 容器ID /bin/bash tomcat:9.0:进入容器修改 webapps 目录下的文件

Commit 提交镜像


docker commit:提交容器称为一个新的副本

docker commit -a="ezreal" -m="add webapps file" 容器ID 自定义镜像名称
# -a:作者
# -m: 格外信息

讲我们操作过的容器通过 commit 提交成为一个新的镜像以后我们使用我们修改过的镜像即可,相当于虚拟机的快照

讲我们修改过的 tomcat 容器提交成为一个新的镜像:

docker commit -a="ezreal" -m="add webapps file" bdbcf3eae556 tomcat.0.01

容器数据卷


容器和宿主机之间的一个共享数据的技术,Docker 容器中产生的数据同步到 宿主机本地,而宿主机本地产生的数据也会同步到 Docker 中;

指定目录挂载

命令:

docker run -d -it - p 8080:8080 -v 主机目录 : 容器目录 镜像ID

安装 MySQL

将容器中 MySQL 的数据共享到宿主机上

docker pull mysql:5.7:获取 MySQL 镜像

docker run -d -p 3306:3306 -v /usr/local/docker/mysql/conf:/etc/mysql/conf.d -v/usr/local/docker/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7:启动 MySQL 服务

-p 映射端口
-e 配置环境
-d 后台运行
-v 文件映射

具名挂载和匿名挂载

这两个其实是使用默认的挂载路径

-v 容器内路径     					# 匿名挂载
-v 卷名:容器内路径:				# 具名挂载
-v /宿主机路径:容器内路径 	# 指定路径挂载

具名挂载

docker pull nginx:获取 nginx 镜像

docker run -d -p 80:80 -v nginx:/etc/nginx nginx:运行 nginx 镜像,并使用具名挂载

docker volume list:查看数据卷情况

img

docker volume inspect nginx:查看某个数据卷具体信息

img

匿名挂载

docker pull nginx:获取 nginx 镜像

docker run -d -p 80:80 -v /etc/nginx nginx:运行 nginx 镜像,并使用匿名挂载,只写容器内路径

docker volume list:查看数据卷情况

DockerFile

DockerFile 是用构建 docker 镜像的文件

  1. 编写一个 dockerfile 文件
  2. 使用docker bulid 命令构建镜像
  3. docker run 运行镜像
  4. docker push 发布镜像(Docker Hub、阿里云)
  5. 注意:所有 dockerfile 的指令都要大写

DockerFile 指令

docker build -t 镜像名称:镜像版本 . :构建镜像的指令,末尾的 . 表示 Dockerfile 的位置

FROM:基础镜像,一切从这里开始构建

MAINTAINER:镜像是谁写的:姓名 + 邮箱

RUN:镜像构建的时候需要运行的命令

ADD:添加内容

WORKDIR:镜像的工作目录

VOLUME:挂载的目录

EXPOSE:暴露的端口

CMD:指这个容器启动的时候需要运行的命令,只有最后一个才会生效,可被替代

ENTRYPOINT:指这个容器启动的时候需要运行的命令,可以追加命令

ONBUILD:当构建一个被继承的 dockerfile,这个时候就会追加 ONBUILD 指令

COPY:类似 ADD,讲我们的文件拷贝到镜像中

ENV:构建的时候设置环境变量

使用 dockerfile 编写增强版 centos

FROM centos:centos7  #基础镜像
MAINTAINER ezreal<956371950@qq.com> # 构建者信息

ENV MYPATH /usr/local # 环境变量
WORKDIR $MYPATH # 路径

RUN yum -y install vim  # 添加构建的命令
RUN yum -y install net-tools

EXPOSE 8001 # 暴露端口
CMD echo $MYPATH
CMD echo ------build success------
CMD /bin/bash

主机系统是 centos7 而 docker 的 image 中的 centos 使用的是 centos8,一般 image 中的 centos8 中的 yum 默认使用宿主机的 yum 源,更换镜像到 centos7 后这个问题可以解决

该 dockerfile 在 centos7 的基础上增加了 vim 和 net-tools 的功能

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

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

相关文章

C语言入门-结构体6

结构体入门 编写程序&#xff0c;用struct分别表示平面上的点和平面上的矩形。 #include <stdio.h> int main() { struct point {int x; int y;}; struct point p1 {1, 2}; printf(“(%d, %d)\n”, p1.x, p1.y); struct rectangle {struct point p1;struct point p2;…

vue的学习--day3

1、尝试使用json文件模拟增删改查 json server:准备一份自己的数据&#xff08;这里我用的是老师给的&#xff09;。 转到d盘&#xff0c;然后打开json文件&#xff1a; 下面模拟增删改查&#xff1a; 借助工具postman或apifox或apipost&#xff1a; 这里我下载了apifox&…

【Abaqus Case】2D弹塑性接触分析

原文链接&#xff1a;https://www.cnblogs.com/aksoam/p/18283296 更多精彩&#xff0c;关注博客园主页&#xff0c;不断学习&#xff01;不断进步&#xff01; 我的主页 csdn很少看私信&#xff0c;有事请b站私信 博客园主页-发文字笔记-常用 有限元鹰的主页 内容&#xf…

VCS+Vivado联合仿真BUG

场景&#xff1a; 在vcsvivado联合仿真过程中&#xff0c;对vivado导出的shell脚本修改&#xff0c;修改某些source文件路径&#xff0c;vcs编译时会报Permission Denied。 问题描述 对shell脚本修改如下&#xff1a; 修改仅为注释掉某一行&#xff0c;下面变为source文件新…

Golang | Leetcode Golang题解之第214题最短回文串

题目&#xff1a; 题解&#xff1a; func shortestPalindrome(s string) string {n : len(s)fail : make([]int, n)for i : 0; i < n; i {fail[i] -1}for i : 1; i < n; i {j : fail[i - 1]for j ! -1 && s[j 1] ! s[i] {j fail[j]}if s[j 1] s[i] {fail[i…

sql查询 只取某字段重复数据中的一条

一. 前提条件 某表的主键由两个字段A、B构成&#xff08;或者更多&#xff09;&#xff0c;任何其中一个字段都可能具有重复的数据。 需要只取字段A所有重复数据中的一条构成查询结果&#xff0c;也就是字段A取到所有的可能取值且无重复。 二. 方法一&#xff08;where ... …

填报高考志愿,怎样正确地选择大学专业?

大学专业的选择&#xff0c;会关系到未来几年甚至一辈子的发展方向。这也是为什么很多人结束高考之后就开始愁眉苦脸&#xff0c;因为他们不知道应该如何选择大学专业&#xff0c;生怕一个错误的决定会影响自己一生。 毋庸置疑&#xff0c;在面对这种选择的时候&#xff0c;我…

3-2 梯度与反向传播

3-2 梯度与反向传播 主目录点这里 梯度的含义 可以看到红色区域的变化率较大&#xff0c;梯度较大&#xff1b;绿色区域的变化率较小&#xff0c;梯度较小。 在二维情况下&#xff0c;梯度向量的方向指向函数增长最快的方向&#xff0c;而其大小表示增长的速率。 梯度的计算 …

Java--封装详解

1.该漏的漏&#xff0c;该藏的藏 我们程序设计要追求“高内聚&#xff0c;低耦合”。高内聚就是类的内部数据操作细节自己完成&#xff0c;不允许外部干涉&#xff1b;低耦合&#xff1a;仅暴露少量的方法给外部使用 2.封装&#xff08;数据的隐藏&#xff09;私有&#xff1a…

运维锅总详解计算机缓存

本文从OSI模型中的每一层缓存介绍、常见开源中间件缓存举例、TCP/IP协议栈中的缓存机制、操作系统中的缓存、访问缓存数据的时间范围统计等方面对计算机中的缓存进行详细介绍。希望对您有所帮助&#xff01; 一、OSI模型中的每一层缓存 1. 物理层&#xff08;Physical Layer&…

微信小程序消息通知(一次订阅)

在微信公众平台配置通知模版 通过wx.login获取code发送给后端 let that this // 登陆codewx.login({success: function (res) {if (res.code) {// 发送code到后端换取openid和session_keythat.setData({openCode: res.code})console.log(that.data.openCode, openCode);// 调…

Simulink中示波器连续运行的方法

1.在Simulink中,经常要使用到示波器,默认示波器是定时运行的,只能观察到一小部分运行的波形;实际调试过程中,经常要连续运行,因此,需要设置示波器为连续运行模式,下面将介绍示波器连续运行的方法。 打开Simulink仿真软件,找到仿真设置按钮,点击设置: 2.将其停止时间…

前端面试题(CSS篇二)

一、请解释一下 CSS3 的 Flex box&#xff08;弹性盒布局模型&#xff09;&#xff0c;以及适用场景 相关知识点: Flex是FlexibleBox的缩写&#xff0c;意为"弹性布局"&#xff0c;用来为盒状模型提供最大的灵活性。 任何一个容器都可以指定为Flex布局。行内元素也可…

AcWing 1511:笨鸟

【题目来源】https://www.acwing.com/problem/content/1513/【题目描述】 小王特别喜欢玩 flappy birds&#xff0c;但是他比较菜&#xff0c;所以向大家寻求帮助&#xff0c;游戏规则大家都懂&#xff0c;每一秒如果点击屏幕&#xff0c;小鸟会从 (x,y) 飞到 (x1,y1)&#xff…

3C电子制造行业MES系统,提高企业生产效率

随着科技的不断进步&#xff0c;3C电子制造行业正迎来传统工厂向数字化工厂转型的阶段。在这场变革中&#xff0c;MES系统发挥着重要的作用&#xff0c;成为了企业变革的“智慧大脑”&#xff0c;引领着生产流程的优化和升级。 那么&#xff0c;MES系统究竟有哪些功能&#xf…

新纪录将圆周率计算到了小数点后202万亿位 用了28块61.44TB SSD

独立存储研究机构StorageReview与闪存领导厂商Solidigm联合宣布&#xff0c;将圆周率计算到了小数点后202万亿位(确切地说是202,112,290,000,000位数)&#xff0c;相比今年3月初的原有记录105万亿位几乎翻了一番。 本次计算采用了戴尔PowerEdge R760服务器&#xff0c;配置Int…

Jenkins 任务中的 java.lang.InterruptedException 异常解析与解决

个人名片 &#x1f393;作者简介&#xff1a;java领域优质创作者 &#x1f310;个人主页&#xff1a;码农阿豪 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮箱&#xff1a;[2435024119qq.com] &#x1f4f1…

[激光原理与应用-98]:南京科耐激光-激光焊接-焊中检测-智能制程监测系统IPM介绍 - 2 - 什么是激光器焊接

目录 一、什么是激光焊接 1.1 概述 1.2 激光焊接的优点 二、激光焊接的应用 2.1 哪些场合必须使用激光焊接 1. 汽车制造业 2. 航空航天领域 3. 电子行业&#xff1a;消费类电子3C 4. 医疗器械制造 5. 新能源锂电池行业 6. 其他领域 三、激光焊接的分类 3.1 按焊接…

scratch猫咪追星星 2024年6月中国电子学会 图形化编程 scratch编程等级考试二级真题和答案解析

目录 scratch猫咪追星星 一、题目要求 1、准备工作 2、功能实现 二、案例分析 1、角色分析 2、背景分析 3、前期准备 三、解题思路 1、思路分析 2、详细过程 四、程序编写 五、考点分析 六、推荐资料 1、入门基础 2、蓝桥杯比赛 3、考级资料 4、视频课程 5、…

入门篇:构建第一个鸿蒙ArkTS应用(Stage模型)

为确保运行效果&#xff0c;本文以使用DevEco Studio NEXT Developer Beta1版本为例&#xff0c;点击此处获取下载链接。 创建ArkTS工程 若首次打开DevEco Studio&#xff0c;请点击Create Project创建工程。如果已经打开了一个工程&#xff0c;请在菜单栏选择File > New &…