docker cp拷贝文件_Docker - A焕然一新

2023-11-04

Docker的基本组成:镜像、容器、仓库

e590f134b15693eebe586c4544dfe392.png

镜像(image):

就像是一个模板,可以通过这个模板来创建容器服务,通过镜像可以创建多个容器(最终服务运行或者项目运行就在容器中)

容器(container):

Docker利用容器技术,独立运行一个或者一组应用,通过镜像来创建。可以启动、停止、删除 ,可以将容器理解为一个简易的linux系统。

仓库(repository):

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

Docker安装--环境使用Gentos

帮助文档-安装

# 1.先卸载旧的版本
  yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
                  
# 2.需要的安装包
  yum install -y yum-utils

# 3.设置镜像的仓库
  yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo #默认是国外的,访问起来比较慢

  yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo  #阿里云镜像地址(推荐使 用)

# 更新yum软件包索引
  yum makecache fast
  
# 4.安装docker相关的   docker-ce 社区版;docker-ee 企业版
  yum install docker-ce docker-ce-cli containerd.io
    
# 5.启动
  systemctl start docker
  
# 6.使用docker version 看是否安装成功
  docker verson
  
#  测试docker
  docker run hello-world
  
# 8.查看下载的hello-world 镜像
  docker images

卸载docker

# 1.卸载依赖
 yum remove docker-ce docker-ce-cli containerd.io

# 2.删除资源
 rm -rf /var/lib/docke
 
# /var/lib/docke    docker默认的工作路径

阿里云镜像加速配置

1.打开阿里云服务器;

2.找到镜像加速地址;

3.配置使用

Docker运行过程

52016b3cc95150839c71812ffd8562e0.png

底层原理

Docker工作过程:Docker是一个Client-Server结构的系统,Docker的守护进程运行在主机上,通过Socket从客户端访问DockerServer 接收到Docker-Client的指令,就会执行这个命令

19aa4d71c09f7f0c19c50039d1c3833a.png

Docker为什么比VM快

有比虚拟机更少的抽象层

利用的是宿主机的内核,VM用的是Guest OS

19ab66f66342e34483e639417cf37ae0.png

新建一个容器的时候,Docker不需要像VM一样重新加在一个系统内核。VM是加载Guest OS,分钟级别的,Docker利用的是宿主机的操作系统,省略了这个复杂的过程 秒级的

Docker的常用命令

帮助命令

docker version       #显示docker的版本信息
docker info          #显示docker的系统信息(包括镜像和容器的数量)
docker 命令 --help   #帮助命令

​ 帮助文档地址:

镜像命令

docker images 查看所有的本地主机的镜像

docker images -a   #-a列出所有的镜像
docker images -q   #-q只显示镜像的id

docker search 搜索镜像

docker search mysql --filter=STARS=3000   #搜索收藏数大于等于3000的

docker pull 下载镜像 分层下载是docker images 的核心

#docker pull 镜像名 [:tag] 
docker pull mysql #不指定tag,默认下载最新的mysql

#指定版本的下载 
docker pull mysql:  

docker rmi 删除镜像

docker rmi -f 镜像id                  #删除指定的镜像
docker rmi -f 镜像id 镜像id 镜像id     #删除多个镜像,用空格分开
docker rmi -f $(docker images -aq)    #删除所有镜像-递归遍历所有的镜像id,然后删除

容器命令

说明:有了镜像才可以创建容器,首先下载一个centos

docker pull centos

新建容器并启动

docker run [可选参数] image
#参数说明
--name="Name"  容器名字,用来区别不同容器(tomcat01  tomcat02)
-d             后台方式运行
-it            使用交互方式运行,进入容器查看内容
-p             指定容器端口 
		-p ip:主机端口:容器端口
		-p 主机端口:容器端口
-P             随机指定容器端口	(大写P)	
#启动并进入容器
docker run -it centos /bin/bash
#退出容器 从容器中退回到主机
exit

列出所有运行的容器

docker ps 命令
docker ps         #列出当前正在运行的容器
docker ps -a      #列出所有的容器,包括历史运行过的容器
docker ps -a -n=1 #列出最新的运行的容器
docker ps -q      #只显示容器的编号

退出容器

exit        #退出容器,同时停止容器
CTRL+P+Q    #容器退出,但是不停止

删除容器

docker rm 容器id                #删除指定的容器,不能删除正在运行的容器,如果需要强制删除,使用rm-f
docker rm -f $(docker ps -aq)   #删除所有的容器
docker ps -a -q|xargs docker rm #删除所有的容器--通过linux命令

启动和停止容器

docker start 容器id    #启动
docker restart 容器id  #重启
docker stop 容器id     #停止
docker kill 容器id     #强制停止当前正在运行的容器

常用其他命令

后台启动容器

#命令 docker run -d 容器名
docker run -d centos
docker ps 发现centos停止了

常见的坑:
#docker容器使用后台运行,就必须要有一个前台的进程,docker 发现没有前台进程,就会自动停止
#nginx 容器启动后,发现自己没有提供服务,就会自动停止

查看日志

docker logs -tf -tail 10 容器id
#显示日志
-tf            #显示日志 t指时间戳
-tail number   #要显示日志的条数

#如果没有操作,可以编写shell脚本--每隔一秒输出一个“rizhi”
docker run -d centos /bin/sh -c"while true;do echo rizhi;sleep 1;done"

查看容器的进程

docker top 容器id

查看镜像的元数据

docker inspect 容器id

进入当前正在运行的容器

#通常我们使用的容器都是通过后台方式运行,需要进入容器修改一些配置

docker exec -it 容器id /bin/bash   #进入容器后开启一个新的终端,可以在里面操作(常用)
docker attach 容器id               #进入容器正在执行的终端,不会启动新的进程

从容器内拷贝文件到主机上

docker cp 容器id:容器内路径 目标主机路径
touch test.java   #使用touch命令创建一个文件
#如下:
docker cp 容器id:/home/test.java /home
#把官方tomcat中的下的文件拷贝到webapps中,先进入tomcat,然后执行命令
cp -r /* webapps

小结

3eb4308e09c548b1e55a39d0d0150945.png

f33148092937b1e9d8610faa32dfaf1e.png

Docker命令练习

安装nginx

# 1. 搜索镜像: docker search nginx
# 2. 安装镜像: docker pull nginx
# 3. 查看是否下载成功:	docker images
# 4. 运行nginx,并将容器的80端口映射到本机端口号3344,-d 后台运行, --name 重新命名  ;	
	docker run -d --name nginx01 -p 3344:80 nginx
# 5. 测试: curl localhost:3306

# 如果每次更改配置文件,都需要进入容器内部;可以使用一个映射路径,在这个映射路径中修改文件,在容器内部会自动修改(数据卷技术)

安装tomcat

# 1. 官网搜索Tomcat版本:
# 运行
docker run -it --rm tomcat:9.0
# 之前使用的是停止容器后,容器依然存在, docker run -it --rm ,一般用来测试,用完即删

# 2.安装Tomcat
	docker  pull tomcat:9.0
# 2.启动Tomcat容器
	docker run -d -p 3355:8080 --name tomcat01 tomcat
# 4.进入容器
	docker exec -it tomcat01 /bin/bash
	# 发现的问题:1、Linux命令少了, 2.没有webapps中的内容
	# 原因是:官方默认的选择最小的镜像,剔除不必要的部分(阉割版),保证最小可运行环境即可

部署Es+Kibana

#es 暴露的端口很多,十分耗内存;es的数据一般需要放置在安全的目录下:挂载
docker run -d --name elasticsearch  -p 9200:9200 -p 9300:9300 -e "" elasticsearch:7.6.2

# 非常占内存,使用docker stats 查看cpu的状态
docker stats

# 增加内存限制,修改配置文件 -e 环境配置更改
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e ""
-e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch:7.6.2

portainer可视化工具

Portainer: Docker的图形化管理工具!提供一个后台面板供我们操作

#-v 是挂载命令,将容器挂载到主机上面
docker run -d -p 8080:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer

镜像原理

镜像是什么

镜像 是一种轻量级、可执行的独立软件包,可以用来打包软件运行环境和基于运行环境开发的软件,它包含某个软件所需的所有内容,包括代码、运行时的库、环境和配置文件等。

所有的应用直接打包成docker镜像,就可以直接跑起来!

如何得到镜像

  • 从远程仓库中下载
  • 朋友拷贝
  • 自己制作一个DockerFile文件

Docker镜像加载原理

UnionFs (联合文件系统)

UnionFs (联合文件系统):Union文件系统是一种分层、轻量级并且高性能的文件系统,它支持对文件的修改作为一次提交来一层层的叠加,同时也可以将不同目录挂载到同一个虚拟文件系统下。Union文件系统是Docker镜像的基础。镜像又可以通过分层来进行继承,基于基础镜像(无父镜像),可以制作各种具体应用的镜像。

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

Docker镜像加载原理

docker的镜像就是实际上有一层一层的文件系统所组成的,这种层次的文件系统UnionFs.

bootfs(boot file system)主要包含BootLoader和kernel, BootLoader主要是引导加载kernel,Linux启动的时候会加载bootfs文件系统.docker镜像的最底层就是bootfs。这一层与我们经典的Linux/Unix系统是一样的,包含boot加载器和内核。当boot加载完成后整个内核就是在内存中了,此时内存的使用权已经有bootfs转交给内核了,此时系统也会卸载bootfs。

rootfs(root file system),在bootfs之上, 包含的典型的Linux文件系统中的/dev /prpc /bin /etc等标准的目录和文件。rootfs就是各种不同的操作系统的发行版本,例如Ubuntu和centos等

98f029ffe6f0621b42fe0ec25d1d77d5.png

docker中安装的系统是一个精简的os,rootfs的体积可以很小,只需要包含基本的命令,工具和程序库就可以了,因为底层直接用HOST的kernel,自己只需要提供rootfs就可以了。由此可见对于不同的Linux发行版,rootfs都是基本一致的。因此不同的发行版本可以公用bootfs。

分层原理

我们在下载镜像的时候,发现镜像都是分层下载的

理解:

所有的docker镜像都有一个基础的镜像层,将进行修改或者增加新的内容时,就会在当前镜像上创建一个新的镜像层。例如使用Ubuntu创一个镜像,位于新镜像的第一层;如果在该镜像中添加Python包,就会在该基础镜像层上创建第二个镜像层;如果继续添加安全补丁,就会创建第3个镜像层。

e1df50d0750d91a4e9beef274b8440ba.png

在添加额外的镜像层的同时,竞相始终是当前所有镜像的集合,例如下图中的例子,每个镜像底层包含3个文件,而镜像中包含了来自两个镜像层的6个文件

d1c7473f6b995ac7880a479e7c61e998.png

如果是在底层的镜像总有文件需要更新,直接将更新的文件加在镜像层,这样在外边看起来文件的总数还是不变的,例如上面中文件5有一个更新为文件7,文件7位于第3层镜像层,但是在外面看来,这个镜像还是6个文件

2591cd35fed4452bac153cb99233fe21.png

Docker通过存储引擎(新版本采用快照机制)方式实现镜像层堆栈,并保证多镜像层对外展示为统一的文件系统。

Linux上可用的存储引擎有AFUS、Overlay2、 Device Mapper、 Btrfs以及ZFS。顾名思义,每种存储引擎都是基于Linux中对应的文件系统或者是块设备技术,并且每种存储结构都有其独特的性能特点。

Docker在Window上仅支持windowsfilter一种存储引擎,该引擎基于NTFS文件系统之上实现了分层和Cow。

下面展示的是与系统显示相同的3层镜像。所有的镜像层堆叠并合并,对外展示统一的视图

1d28fef1b824a50d5f493aaa17b8f5e6.png

特点

Docker镜像都是只读的,当容器启动时,一个新的可写层就被加载到了镜像的顶部!这一层就是我们通常所说的容器层,容器之下都叫镜像层。

Commit 镜像

docker commit 提交一个容器成为一个新的副本
docker commit -m="提交的描述信息" -a="作者" 容器id  目标镜像名:[tag]

容器数据卷

什么是容器数据卷

数据:如果数据都在容器中,如果我们把容器删除了,那么数据就会被删除!需求:数据可以持久化

容器之间可以有一个数据共享技术,Docker容器中产生的数据,同步到本地中。这就是卷技术,目录的挂载,将我们容器内的目录挂载到Linux上面。

0fd58bf86d9b5c8338652be2a0fa1031.png

总结:容器的持久化和同步操作,容器之间也是可以共享数据的

数据卷用法

使用命令挂载:-v

docker run -it -v 主机目录:容器内目录 

#测试  将centos容器内部的/home目录挂载到主机的/home/test目录下面
docker run -it -v /home/test:/home centos /bin/bash

使用docker inspect 查看详情

99e2cbedd2bec7026a112f57ff060e4b.png

容器内文件夹和主机的文件夹将会同步。同步是一个双向的过程。

实战:Mysql

Mysql数据持久化问题:容器实现数据挂载后,即便容器删除了,挂载到本地的数据也是存在的,数据挂载相当于数据复制

#搜索mysql镜像
docker search mysql
#安装mysql
docker pull mysql
#注意:启动mysql需要配置密码 
#后台启动(-d)、映射端口(-p)、多个挂载(-v -v)、环境配置-配置密码(-e)、命名(--name)
docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:

具名挂载和匿名挂载

匿名挂载

-v 容器内目录
docker run -d -P --name nginx01 -v /etc/nignx nginx

# docker volume 命令查看docker中的数据卷
# docker volume --help
Usage:	docker volume COMMAND
Manage volumes
Commands:
  create      Create a volume
  inspect     Display detailed information on one or more volumes
  ls          List volumes
  prune       Remove all unused local volumes
  rm          Remove one or more volumes
Run 'docker volume COMMAND --help' for more information on a command.

# 查看所有的volume的情况
# docker volume ls
DRIVER              VOLUME NAME
local               f32fb32afe3ffa1b3c691af07adc7b244ae225142f44849316bef56e0f69b826

# 这种就是匿名挂载,-v的时候只写了容器内的名字没有写容器外的名字

具名挂载(常用)

-v 卷名:容器内路径
docker run -d -P --name nginx03 -v nignx-config:/etc/nignx nginx

f1c25918c5d104da9b5ab388c5be3f8c.png

如果没有指定绝对路径,那么就会在/var/lib/docker/volumes

# 使用命令查看卷挂载的路径
docker volumn inspect nginx-config
[
    {
        "CreatedAt": "2020-07-28T13:32:36+08:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/nginx-config/_data",
        "Name": "nginx-config",
        "Options": null,
        "Scope": "local"
    }
]

# 可以看到nginx-config文件被映射到了/var/lib/docker/volumes/目录下

区分具名挂载和匿名挂载

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

扩展

# 通过 -v 容器内路径,ro,rw改变读写权限  默认是rw
ro 	readonly 	# 只读,这个路径只能宿主机来操作,容器内部是无法操作的
rw 	readwrite	# 可读写

# 一旦设定了容器的权限,容器对我们挂载出来的内容就有限定了
docker run -d -P --name nginx03 -v nignx-config:/etc/nignx:rw nginx
docker run -d -P --name nginx03 -v nignx-config:/etc/nignx:ro nginx
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

docker cp拷贝文件_Docker - A焕然一新 的相关文章

随机推荐

  • 如何应急响应

    应急响应事件分类 大致可以分为三类 1 勒索病毒 勒索病毒危害不言而喻 一旦中了勒索病毒 几乎很难破解 只能通过重装系统 数据备份恢复或者缴纳相应被勒索的比特币支付进行病毒解除 仍有一种比较渺茫的方式进行病毒解除 那就是溯源到攻击者 通过法
  • Expanding Low-Density Latent Regions for Open-Set Object Detection

    Expanding Low Density Latent Regions for Open Set Object Detection CVPR2022 Code https github com csuhan opendet2 这篇文章认为
  • 【Spring八】Spring与Hibernate整合

    Hibernate所需元素 三要素 实体类 hbm xml hibernate cfg xml Spring所需元素 applicationContext xml hibernate在操作数据库时 使用sessionFactory open
  • 华为OD机试 - 绘图机器(Java)

    题目描述 绘图机器的绘图笔初始位置在原点 0 0 机器启动后按照以下规则来进行绘制直线 1 尝试沿着横线坐标正向绘制直线直到给定的终点E 2 期间可以通过指令在纵坐标轴方向进行偏移 offsetY为正数表示正向偏移 为负数表示负向偏移 给定
  • 第一章 指针仪表识别之仪表检测

    文章目录 一 基于Hough变换的仪表检测 附源码 二 基于SURF模板匹配仪表检测 附源码 三 基于YOLO深度学习的仪表检测 附源码 指针式仪表读数算法主要用于工业变电站环境 变电站环境复杂 仪表类型众多 仪表图像通过巡检机器人的可见光
  • jdk17.0.6的安装配置

    下载资源 官网下载 Java Archive Downloads Java SE 17 oracle com https www oracle com java technologies javase jdk17 archive downl
  • Cuda Streams的概述(一)-- Cuda介绍

    最近在做有关Cuda的一个项目 碰到匪夷所思的问题 在异步的时候发现并没有达到预期的效果 程序没有异步起来 然后在网上找了一个Nvida的有关Cuda Streams的一个ppt 然后照着里面的提示 使程序达到了异步的效果 首先 先回顾一下
  • linux VLAN配置(vconfig)

    1 安装vlan vconfig 和加载8021q模块 aptitude install vlan modprobe 8021q 或 yum install vconfig modprobe 8021q lsmod grep i 8021q
  • AndroidStudio编译构建报错 Task ‘wrapper‘ not found in project ‘:xxx‘

    在项目 app 中找不到的任务 包装器 Task wrapper not found in project xxx 的问题 原因 build gradle 文件没有包装器任务 解决步骤 将此代码添加到 build gradle task w
  • PO、VO、DAO、BO、DTO、POJO 能分清吗?

    一 PO persistant object 持久对象 可以看成是与数据库中的表相映射的java对象 使用Hibernate来生成PO是不错的选择 二 VO value object 值对象 通常用于业务层之间的数据传递 和PO一样也是仅仅
  • vue中的h函数与JSX语法

    vue不仅像react一样实现了jsx 而且还借助jsx发挥了javascript动态画的优势 了解学习jsx可以让你更灵活的开发需求 一 h函数 在聊vue中的JSX之前 需要简单介绍一下 h 函数 理解了 h 函数 会更好的理解JSX
  • 华为OD机试 - 士兵过河(Java)

    题目描述 一支N个士兵的军队正在趁夜色逃亡 途中遇到一条湍急的大河 敌军在T的时长后到达河面 没到过对岸的士兵都会被消灭 现在军队只找到了1只小船 这船最多能同时坐上2个士兵 当1个士兵划船过河 用时为 a i 0 lt i lt N 当2
  • mybatis更新和插入语句报错的原因和解决方法

    做一个小项目时 想实现添加和修改用户的功能 发现以下语句程序报错 INSERT INTO hrm user NAME PASS WORD STATUS DESC role createDATE createUSER VALUES 1 2 3
  • WorldEdit 指令大全 & 开发记录

    文章目录 服务端 客户端 运行配置 通用指令 好用刷子 圆球刷 Brush Sphere br sp 地板刷子 Brush Cyl br cyl 树木刷子 tree 服务端 客户端 运行配置 服务端 Spigot 1 14 4 插件版本 W
  • word页面上方有横线选不中删不掉

    依次点击 设计 页面边框 选择无
  • 批处理文件命名(简单有效且粗暴!)

    批处理文件命名 简单有效且粗暴 方法 方法一 方法二 方法 网上的方法层出不穷 但是真正有效的几乎没有 本文罗列外加自己领悟 给出了两个真实且有效的方法 方法一 直接下载粗暴且有效的工具 Totao commander 这是官网的简介 To
  • Apache -poi

    Busy Developers Guide to Features Want to use HSSF and XSSF read and write spreadsheets in a hurry This guide is for you
  • 添加了@LoadBalanced注解,即可实现负载均衡功能,这是什么原理呢?

    SpringCloud01 认识微服务 任何架构都离不开服务的拆分 微服务的拆分和远程调用你会吗 Eureka学习 搭建eureka server 将user service注册到eureka server中 Ribbon负载均衡 上一节中
  • json/xml/schema

    JSON JSON是JavaScript Object Notation的缩写 是一种轻量级的数据交换格式 是理想的接口数据交换语言 官网 https www json org json en html 工作json请求体 json字符串
  • docker cp拷贝文件_Docker - A焕然一新

    Docker的基本组成 镜像 容器 仓库 镜像 image 就像是一个模板 可以通过这个模板来创建容器服务 通过镜像可以创建多个容器 最终服务运行或者项目运行就在容器中 容器 container Docker利用容器技术 独立运行一个或者一