当前位置: 首页 > news >正文

Docker的基本介绍

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-toolsEXPOSE 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 的功能

相关文章:

  • docker compose方式部署Zabbix 7.0 LTS
  • 3.Charles抓包工具学习
  • 掌握命令行中pip源的切换:提升Python包管理效率
  • 【C语言】宏定义在 a.c 中定义,如何在 b.c 中使用?
  • 初尝PaddleOCR识别图片中的文字
  • 全自动化学发光分析仪测试一个样本需要多久时间?采样需要多久的时间?以及仪器原理是什么?
  • windows非白名单exe监控并杀死
  • 飞时达软件,揭开土方工程师的生活“面纱”
  • 数据库操作语言(DML)
  • jQuery 实例:掌握 JavaScript 库的奥秘
  • 番外篇 | YOLOv8改进之即插即用全维度动态卷积ODConv + 更换Neck网络为GFPN
  • Android adb logcat日志过滤输出
  • 【Windows】Bootstrap Studio(网页设计)软件介绍及安装步骤
  • MySQL之主从同步、分库分表
  • 0704模拟记录
  • C++类中的特殊成员函数
  • jquery ajax学习笔记
  • Making An Indicator With Pure CSS
  • Meteor的表单提交:Form
  • Node项目之评分系统(二)- 数据库设计
  • Odoo domain写法及运用
  • select2 取值 遍历 设置默认值
  • storm drpc实例
  • Zepto.js源码学习之二
  • 产品三维模型在线预览
  • 计算机在识别图像时“看到”了什么?
  • 记一次用 NodeJs 实现模拟登录的思路
  • 排序算法学习笔记
  • 区块链技术特点之去中心化特性
  • 微信公众号开发小记——5.python微信红包
  • 微信小程序:实现悬浮返回和分享按钮
  • 怎样选择前端框架
  • ​你们这样子,耽误我的工作进度怎么办?
  • # MySQL server 层和存储引擎层是怎么交互数据的?
  • #1014 : Trie树
  • #调用传感器数据_Flink使用函数之监控传感器温度上升提醒
  • (13)[Xamarin.Android] 不同分辨率下的图片使用概论
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (rabbitmq的高级特性)消息可靠性
  • (WSI分类)WSI分类文献小综述 2024
  • (附源码)ssm高校实验室 毕业设计 800008
  • (附源码)计算机毕业设计ssm-Java网名推荐系统
  • (附源码)计算机毕业设计ssm本地美食推荐平台
  • (免费领源码)Python#MySQL图书馆管理系统071718-计算机毕业设计项目选题推荐
  • (三)Kafka 监控之 Streams 监控(Streams Monitoring)和其他
  • (转)ORM
  • (转)母版页和相对路径
  • (转)真正的中国天气api接口xml,json(求加精) ...
  • ***利用Ms05002溢出找“肉鸡
  • ./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’: ./incl
  • .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现
  • .NET DataGridView数据绑定说明
  • .net mvc actionresult 返回字符串_.NET架构师知识普及
  • .NET Standard、.NET Framework 、.NET Core三者的关系与区别?
  • .net 前台table如何加一列下拉框_如何用Word编辑参考文献