docker基础和使用(一)

news2024/9/9 3:54:04

Docker 入门篇


文章目录

  • Docker 入门篇
  • 一、docker简介
    • 1.1、docker说明:
    • 1.2、docker镜像说明:
      • 1.2.1、UnionFS(联合文件系统)
      • 1.2.2、docker镜像分成的好处
      • 1.2.3、docker平台架构图
  • 二、docker的常用命令
    • 1.1、手册查询
    • 1.2、docker启停和信息查询
    • 1.3、容器启停
    • 1.4、镜像查询和查找和下载
    • 1.5、删除镜像
    • 1.6、运行容器命令
    • 1.7、查看容器日志和进程和细节
    • 1.8、进入容器的2种方式和区别
    • 1.9、文件拷贝
    • 2.0、commit生成新镜像
    • 2.1、导入和导出容器
      • 2.1、镜像备份及还原
    • 2.2、其他常用命令
  • 三、Docker容器数据卷
    • 1.1、权限问题
    • 1.2、挂载
    • 1.3、规则继承
  • 四、本地镜像发布到阿里云
    • 1.1、阿里云配置和上传流程
    • 1.2、拉取上传的镜像文件
  • 四、本地镜像发布到私有库
    • 1.1、搭建私有DockerHub
    • 1.2、推送镜像
      • 1.2.1、修改配置文件使之支持http
      • 1.2.2、查看私服镜像
  • 入门完结


一、docker简介

docker官网:http://www.docker.com
Docker Hub官网: https://hub.docker.com
docker安装流程-官网:https://docs.docker.com/engine/install/

1.1、docker说明:

  1. Docker是基于Go语言实现的云开源项目
  2. docker是容器虚拟化技术,让每个容器之间互相隔离,每个容器有自己的文件系统,容器之间进程不会相互影响
  3. docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统UnionFS。
  4. 在Docker镜像的最底层是引导文件系统bootfs
  5. rootfs可以很小,只需要包括最基本的命令、工具和程序库就可以了

1.2、docker镜像说明:

什么是镜像?

是一种轻量级、可执行的独立软件包
比如mysql镜像运行起来就变成了mysql容器

1.2.1、UnionFS(联合文件系统)

  1. Union文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统。
  2. 它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下
  3. Union 文件系统是 Docker 镜像的基础
  4. 镜像可以通过分层来进行继承-----重点

特性:

一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统
联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录

好比画卷:
在这里插入图片描述
以我们的pull为例,在下载的过程中我们可以看到docker的镜像好像是在一层一层的在下载
在这里插入图片描述

1.2.2、docker镜像分成的好处

镜像分层最大的一个好处就是共享资源,方便复制迁移,就是为了复用

说明:

  1. 比如说有多个镜像都从相同的 base 镜像构建而来,那么 Docker Host 只需在磁盘上保存一份 base 镜像;
  2. 同时内存中也只需加载一份 base 镜像,就可以为所有容器服务了。而且镜像的每一层都可以被共享

1.2.3、docker平台架构图

在这里插入图片描述


二、docker的常用命令

1.1、手册查询

#手册命令
docker help		查看帮助手册
docker run --help		查看关于docker run 的帮助手册

1.2、docker启停和信息查询

#docker 启动类命令
systemctl start docker 		  启动docker
systemctl stop docker 		  停止docker
systemctl restart docker	  重启docker 
systemctl status docker		  查看docker状态
systemctl enable docker		  开机启动
docker info					  查看docker概要信息
docker system df			  表示查看镜像/容器/数据卷所占的空间

1.3、容器启停

#容器启停
启动: 		  docker start 容器ID或者容器名
重启: 		  docker restart 容器ID或者容器名
停止: 		  docker stop 容器ID或者容器名
强制停止:      docker kill 容器ID或容器名
删除停止的容器: docker rm 容器ID
一次性删除多个: 
	1.docker rm -f $(docker ps -a -q)
	2.docker ps -a -q | xargs docker rm

1.4、镜像查询和查找和下载

#镜像命令
docker ps           列出当前所有正在运行的容器
docker images		列出本地主机上的镜像
docker images -a 	列出本地所有的镜像(含历史映像层)
docker images -q	只显示镜像ID

docker search 某个XXX镜像名字  
	例:
	docker search redis		表示查询关于redis的镜像
	docker search --limit 5 redis		表示只列出5个镜像,默认25个

docker pull 某个XXX镜像名字		表示下载镜像
	例:
	docker pull redis:latest		拉取最新的redis镜像
	docker pull redis:6.2.1			拉取redis6.2.1版本的镜像

1.5、删除镜像


#删除镜像
docker rmi 某个XXX镜像名字ID
docker rmi  -f 镜像ID					表示删除单个
docker rmi -f 镜像名1:TAG 镜像名2:TAG		表示删除多个
docker rmi -f $(docker images -qa)		删除全部

1.6、运行容器命令

#拉取并运行容器
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]docker run -it redis:6.0.8   		  表示前台交互式启动
	docker run -d redis:6.0.8	 		  表示后台守护式启动
	docker run -it redis:6.0.8 /bin/bash  表示前台交互式启动,有个交互式Shell,用的是/bin/bash。
	参数说明:
	-d         表示后台启动
	-i		   表示使用交互式启动。
	-t		   终端,要有黑窗口
	-it  	   表示交互式启动有黑窗口,可以输入命令行
	-e         表示设置环境变量参数
	-v         表示数据挂载
	-p         表示指定端口
	--name     表示给容器取名称
	--privileged   表示权限
	/bin/bash  交互式Shell用/bin/bash模式

例子:
	docker run --privileged=true --name elasticsearch6.8  \
	-p 9200:9200 -p 9300:9300 \
	-e "discovery.type=single-node" \
	-e ES_JAVA_OPTS="-Xms128m -Xmx2048m" \
	-v /data/mydata/elasticsearch6/config/elasticsearch.yml:/usr/share/elasticsearch6/config/elasticsearch.yml \
	-v /data/mydata/elasticsearch6/data:/usr/share/elasticsearch6/data \
	-v /data/mydata/elasticsearch6/plugins:/usr/share/elasticsearch6/plugins \
	-d elasticsearch:6.8.8

1.7、查看容器日志和进程和细节

#查看容器日志和进程和细节:
查看日志
	docker logs 容器ID
查看容器内运行的进程
	docker top 容器ID
查看容器内部细节(很常用,很重要)
	docker inspect 容器ID

1.8、进入容器的2种方式和区别

#进入容器
docker exec -it 容器ID bashShell   例:docker exec -it mysql /bin/bash

docker attach 容器ID   
	说明:
		表示重新进入
		attach 直接进入容器启动命令的终端,不会启动新的进程
		用exit退出,会导致容器的停止。
		
docker execdocker attach 区别:
	exec 是在容器中打开新的终端,并且可以启动新的进程。用exit退出,不会导致容器的停止。
	attach 直接进入容器启动命令的终端,不会启动新的进程。用exit退出,会导致容器的停止。
	推荐使用 docker exec 模式

1.9、文件拷贝

#容器考到主机上
docker cp  容器ID:容器内路径 目的主机路径
	例:将elasticsearch的nodes文件 拷贝到linux主机的/home/esdata/
		docker cp -a elasticsearch:/usr/share/elasticsearch/data/nodes  /home/esdata/

#主机考到容器上
	例:将linux主机上的nodes拷贝进docker里面es容器中
		docker cp -a /home/esdata/nodes  elasticsearch6.8:/usr/share/elasticsearch/data

2.0、commit生成新镜像

语法:
docker commit [OPTIONS]  容器id  自己取的镜像名:自己写的版本号

[OPTIONS说明]
	-a :提交的镜像作者
	-c :使用Dockerfile指令来创建镜像
	-m :提交时的说明文字
	-p :在commit时,将容器暂停

2个示例:
 	docker commit -a sqy -m ”这是说明” c167ee237b87 mycentos:1.4
    docker commit centos  mycentos:2.0

2.1、导入和导出容器

  1. export 导出容器的内容留作为一个tar归档文件
  2. import 从tar包中的内容创建一个新的文件系统再导入为镜像
docker export 容器ID > 文件名.tar

cat 文件名.tar | docker import - 镜像用户/镜像名:镜像版本号

在这里插入图片描述

导出
在这里插入图片描述
导入
在这里插入图片描述

2.1、镜像备份及还原

使用案例 :

镜像备份
	docker save -o /opt-docker/backup/nextcloud.19.0.2.tar docker.io/nextcloud:19.0.2
	或
	docker save -o /opt-docker/backup/nextcloud.19.0.2.tar b1a46a1f87f3

还原镜像备份
	docker load -q -i /opt-docker/backup/nextcloud.19.0.2.tar

2.2、其他常用命令

attach    Attach to a running container                 # 当前 shell 下 attach 连接指定运行镜像
build     Build an image from a Dockerfile              # 通过 Dockerfile 定制镜像
commit    Create a new image from a container changes   # 提交当前容器为新的镜像
cp        Copy files/folders from the containers filesystem to the host path   #从容器中拷贝指定文件或者目录到宿主机中
create    Create a new container                        # 创建一个新的容器,同 run,但不启动容器
diff      Inspect changes on a container's filesystem   # 查看 docker 容器变化
events    Get real time events from the server          # 从 docker 服务获取容器实时事件
exec      Run a command in an existing container        # 在已存在的容器上运行命令
export    Stream the contents of a container as a tar archive   # 导出容器的内容流作为一个 tar 归档文件[对应 import ]
history   Show the history of an image                  # 展示一个镜像形成历史
images    List images                                   # 列出系统当前镜像
import    Create a new filesystem image from the contents of a tarball # 从tar包中的内容创建一个新的文件系统映像[对应export]
info      Display system-wide information               # 显示系统相关信息
inspect   Return low-level information on a container   # 查看容器详细信息
kill      Kill a running container                      # kill 指定 docker 容器
load      Load an image from a tar archive              # 从一个 tar 包中加载一个镜像[对应 save]
login     Register or Login to the docker registry server    # 注册或者登陆一个 docker 源服务器
logout    Log out from a Docker registry server          # 从当前 Docker registry 退出
logs      Fetch the logs of a container                 # 输出当前容器日志信息
port      Lookup the public-facing port which is NAT-ed to PRIVATE_PORT    # 查看映射端口对应的容器内部源端口
pause     Pause all processes within a container        # 暂停容器
ps        List containers                               # 列出容器列表
pull      Pull an image or a repository from the docker registry server   # 从docker镜像源服务器拉取指定镜像或者库镜像
push      Push an image or a repository to the docker registry server    # 推送指定镜像或者库镜像至docker源服务器
restart   Restart a running container                   # 重启运行的容器
rm        Remove one or more containers                 # 移除一个或者多个容器
rmi       Remove one or more images       # 移除一个或多个镜像[无容器使用该镜像才可删除,否则需删除相关容器才可继续或 -f 强制删除]
run       Run a command in a new container              # 创建一个新的容器并运行一个命令
save      Save an image to a tar archive                # 保存一个镜像为一个 tar 包[对应 load]
search    Search for an image on the Docker Hub         # 在 docker hub 中搜索镜像
start     Start a stopped containers                    # 启动容器
stop      Stop a running containers                     # 停止容器
tag       Tag an image into a repository                # 给源中镜像打标签
top       Lookup the running processes of a container   # 查看容器中运行的进程信息
unpause   Unpause a paused container                    # 取消暂停容器
version   Show the docker version information           # 查看 docker 版本号
wait      Block until a container stops, then print its exit code   # 截取容器停止时的退出状态值


三、Docker容器数据卷

用处:将docker容器内的数据保存进宿主机的磁盘中,数据持久化

  1. 卷就是目录或文件
  2. 卷的设计目的就是数据的持久化,完全独立于容器的生存周期
  3. 因此Docker不会在容器删除时删除其挂载的数据卷
  4. 删除容器后,挂载的文件可以在重新运行起容器找回来

1.1、权限问题

Docker挂载主机目录访问如果出现cannot open directory .: Permission denied

解决办法:在挂载目录后多加一个--privileged=true参数即可

1.2、挂载

读写模式:默认是读写也就是:rw,容器内和linux都可以读写操作文件
	docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录  镜像名
 	docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录:rw  镜像名

只读模式:容器实例内部被限制,只能读取不能写,挂载出来的才能修改
	docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录:ro      镜像名


示例:
	docker run --privileged=true --name elasticsearch6.8  \
	-p 9200:9200 -p 9300:9300 \
	-e "discovery.type=single-node" \
	-e ES_JAVA_OPTS="-Xms128m -Xmx2048m" \
	-v /data/mydata/elasticsearch6/config/elasticsearch.yml:/usr/share/elasticsearch6/config/elasticsearch.yml \
	-v /data/mydata/elasticsearch6/data:/usr/share/elasticsearch6/data \
	-v /data/mydata/elasticsearch6/plugins:/usr/share/elasticsearch6/plugins \
	-d elasticsearch:6.8.8
	
例子说明:
	run 运行镜像生成容器,如果没有镜像会先拉取在生成
	--privileged=true 表示放开权限
	使用elasticsearch:6.8.8 的镜像文件
	容器取名为elasticsearch6.8
	-p 9200:9200 表示linux和容器端口做映射[外部端口:内部端口]。表示linux使用9200的端口访问到docker里面的9200端口
	-v 表示挂载文件或者目录  公式为 -v /宿主机绝对路径目录 :/容器内目录
	-d 表示后台运行
	-e 表示设置环境变量
	

1.3、规则继承

比如 容器二 继承 容器一 的挂载规则

重点:

当父类容器被删除时,继承者的规则就消失了

语法:--volumes-from 要被继承的容器名(父类)

u1表示:ubuntu容器1
u2表示:ubuntu容器2

u2继承u1的挂载规则
docker run -it  --privileged=true --volumes-from u1  --name u2 ubuntu

四、本地镜像发布到阿里云

在这里插入图片描述

1.1、阿里云配置和上传流程

流程:

  1. 选择控制台,进入容器镜像服务
  2. 选择个人实例
  3. 创建命名空间
  4. 创建仓库名称
  5. 进入管理界面获得脚本
  6. 将镜像推送到阿里云

如图:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

得到脚本
在这里插入图片描述

docker执行脚本如图:
在这里插入图片描述

1.2、拉取上传的镜像文件

docker pull 地址/镜像名称:版本号

在这里插入图片描述


四、本地镜像发布到私有库

1.1、搭建私有DockerHub

# 运行私有库Registry,相当于本地有个私有Docker hub

#拉取
docker pull registry 

#运行镜像生成容器
#说明 默认情况,仓库被创建在容器的/var/lib/registry目录
docker run -d -p 5000:5000 \
  -v /zzyyuse/myregistry/ :/tmp/registry \
  --privileged=true \
  --name=registry \
  registry

1.2、推送镜像

1.2.1、修改配置文件使之支持http

docker默认不允许http方式推送镜像

vim /etc/docker/daemon.json

内容如下:
{
  "registry-mirrors": ["https://aa25jngu.mirror.aliyuncs.com"],
  "insecure-registries": ["192.168.62.10:5000"]
}

说明:
	第一行是阿里云镜像加速
	第二行是让他支持http
  1. commit 我们处理好的容器生成镜像文件
docker commit -m="提交的描述信息" -a="作者" 容器ID 要创建的目标镜像名:[标签名]
  1. 推送 (可以先去私服创建目录在推送)
# 将新镜像myubuntu:1.2修改符合私服规范的Tag

#给镜像打tag
docker tag 镜像:Tag  Host:Port/Repository:Tag

#例如: 
	docker tag  myubuntu:1.2  192.168.43.10:5000/myubuntu:1.2
	或者
	docker tag 2e25d8496557 xxxxx.com/工程目录/myubuntu:1.2

#推送:
#公式:docker push xxxxx

#例如:
docker push 192.168.62.10:5000/myubuntu:1.2

1.2.2、查看私服镜像

方法一:登入私服
或者浏览器

docker login  http://xxxxx.com

方法二:命令行直接查看

 curl -XGET http://192.168.62.10:5000/v2/_catalog

入门完结

docker的基本入门完结


下一篇:DockerFile和docker网络与Docker-compose容器编排(二)
第三篇:Docker可视化工具与容器监控(三)
第四篇:Docker性能优化(四)

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

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

相关文章

知识图谱业务落地技术推荐之图数据库汇总

0.图数据库排名 链接:https://db-engines.com/en/ranking/graph+dbms 0.1简要分析(各种图数据库属性) Neo4j(主流) 历史悠久且

备考蓝桥杯【快速排序和归并排序】

🌹作者:云小逸 📝个人主页:云小逸的主页 📝Github:云小逸的Github 🤟motto:要敢于一个人默默的面对自己,强大自己才是核心。不要等到什么都没有了,才下定决心去做。种一颗树,最好的时间是十年前…

【王道数据结构】第八章 | 排序

目录 8.1. 排序的基本概念 8.2. 插入排序 8.2.1. 直接插入排序 8.2.2. 折半插入排序 8.2.3. 希尔排序 8.3. 交换排序 8.3.1. 冒泡排序 8.3.2. 快速排序 8.4. 选择排序 8.4.1. 简单选择排序 8.4.2. 堆排序 8.5. 归并排序和基数排序 8.5.2. 基数排序 8.1. 排序的基本概念 排…

3-track网络预测蛋白质结构和相互作用

目录引言网络架构发展直接生成蛋白-蛋白复合物DeepMind在最近的CASP14上展示了非常准确的预测。作者探索了融合相关思想的网络架构,并通过对一维序列级、二维距离图级(distance map)和三维坐标级(coordinate)的信息依次…

机械设备管理软件如何选择?机械设备管理软件哪家好?

随着信息化技术的进步与智能制造的发展趋势,很多机械设备制造企业也在一直探寻适合自己的数字化管理转型之路,而企业上ERP管理软件又是实现数字化管理的前提,机械设备管理软件对于企业来说就是关键一环。机械设备管理软件如何选择&#xff1f…

IPV4地址的原理和配置

第三章:IP地址的配置 IPv4(Internet Protocol Version 4)协议族是TCP/IP协议族中最为核心的协议族。它工作在TCP/IP协议栈的网络层,该层与OSI参考模型的网络层相对应。网络层提供了无连接数据传输服务,即网络在发送分…

【GD32F427开发板试用】7. 移植LVGL到GD32F427V

本篇文章来自极术社区与兆易创新组织的GD32F427开发板评测活动,更多开发板试用活动请关注极术社区网站。作者:hehung 之前发帖 【GD32F427开发板试用】1. 串口实现scanf输入控制LED 【GD32F427开发板试用】2. RT-Thread标准版移植 【GD32F427开发板试用…

TypeScript快速入门———(一)TypeScript 介绍以及初体验

文章目录1. TypeScript 介绍1.1 TypeScript 是什么1.2 TypeScript 为什么要为 JS 添加类型支持?1.3 TypeScript 相比 JS 的优势2. TypeScript 初体验2.1 安装编译 TS 的工具包2.2 编译并运行 TS 代码2.3 简化运行 TS 的步骤1. TypeScript 介绍 1.1 TypeScript 是什…

[python入门㊺] - 异常中的finally

目录 ❤ finally的作用 ❤ try、except、finally的执行顺序是什么 ❤ 案列 finally 中不带return finally中有return ❤ finally的作用 finally内的代码不管有无异常发生,都会执行。具体来说: 无论是否发生了异常,一定会执行 fi…

若依-pro使用

前言 最近开始搞一个项目,使用的框架是若依-pro。新手上路,多多指教。 首先了解一下什么是若依,其实他就是将很多项目共同的代码进行了抽取,方便我们可以快速开发的一个javaweb项目(若依是一个项目,一个p…

中睿天下Coremail联合发布《2022年第四季度企业邮箱安全报告》(附下载)

近日,中睿天下联合CAC邮件安全大数据中心(以下简称CAC中心)发布《2022年第四季度企业邮箱安全报告》,对当前企业邮箱的应用状况和安全风险进行了分析。1.垃圾邮件同比下降22.16%日前,CAC(Coremail Anti Spa…

test3

数据链路层故障分析 一、网桥故障 a.主要用途简述 网桥作为一种桥接器,可以连接两个局域网。工作在数据链路层,是早期的两端口二层网络设备。可将一个大的VLAN分割为多个网段,或者将两个以上的LAN互联为一个逻辑LAN,使得LAN上的…

互联网舆情监测系统困境及措施,TOOM舆情监控平台应对及处置?

互联网舆情监测系统帮助政府、企业、媒体等机构了解公众的需求和诉求,及时发现和解决问题,防范和化解不良舆情,提高公众满意度和信任度。互联网舆情监测的技术手段包括爬虫、文本挖掘、情感分析、网络图谱等,互联网舆情监测系统困…

UE4 使用AE跟踪相机数据,演算任意视频的相机运动数据

参考链接 ae 3dsmax 摄像机互导 aehj 虚幻引擎5使用AE跟踪相机数据 一、软件版本:试过好几个版本,目前只有两组版本成功过 3dmax2016 AE2014 3dmax2020 AE2022 二、程序安装(执行exe和手动拷贝是相同的) 参考链接 重启AE后如…

工作记录------PostMan自测文件导入、导出功能

工作记录------PostMan自测文件导入、导出功能 测试文件导出 背景:写了一个文件下载功能,是数据写到excel中,下载,使用PostMan点击send后,返回报文是乱码。 解决办法: 点击send下面的 send and Downlo…

python学习之pandas库的使用总结

【1】读取CSV并进行透视 我们的原始数据格式: ① 读取数据 pd.read_csv 会读取csv表格并使用names指定读取后的列名称。 import pandas as pdreleaseNumOfYear pd.read_csv("data/releaseNumOfYear.csv", headerNone, names[Year, Genre, ReleaseNum]…

各种音频接口比较

时间 参考:https://www.bilibili.com/video/BV1SL4y1q7GZ/?spm_id_from333.337.search-card.all.click&vd_source00bd76f9d6dc090461cddd9f0deb2d51, https://blog.csdn.net/weixin_43794311/article/details/128941346 接口名字时间公司支持格式…

springcloud - 2021.0.3版本 - (一)服务注册nacos+feign

一,注册中心 最新版使用的是nacos,可替换为eureka,zookeeper,使用方式大同小异,这里不做扩展。 下载安装:(有机会重装时再补上) 管理页面:http://localhost:8848/naco…

RabbitMQ详解(二):Docker安装RabbitMQ

在Docker上安装部署RabbitMQ方便快捷,不需要额外安装Erlang环境,所以写该篇文章先来介绍如何在Docker上部署RabbitMQ。 一、安装并运行 (1)、在docker hub 中查找rabbitmq镜像 docker search rabbitmq:3.9.12-management带有“mangement”的版本&…

Python将脚本程序转变为可执行程序

Python将脚本程序转变为可执行程序 类似Java打包操作,若不想让人看到Python程序内部逻辑,也可将其转换为exe可执行文件 首先自己写一个Python程序,如下: print("start running...")listTest ["I","a…