docker学习记录

docker 学习记录 1.操作系统组成部分: 进程调度子系统: 进程通信子系统 内存管理子系统 设备管理子系统 文件管理子系统 网络通信子系统 作业控制子系统 2.Linux文件系统由bootfs和rootfs两部分组成 (1)bootfs:包含BootLoader(引导加载程序)和kernel(内核) (2)rootfs:root文件系统,包含的就是典型的Linux系统中的/dev, /proc, /bin, /etc等标准目录和文件 (3)不同的Linux发行版本,bootfs基本一样,而root. 阅读详情

1 常用指令

1.1 镜像相关

1.1.1 加载镜像

docker load -i 镜像.tar.gz

1.1.2 删除镜像

docker rmi 镜像ID

1.1.3 查看容器镜像信息

docker inspect 容器ID

1.2 容器相关

1.2.1 退出容器

exit 退出容器且停止容器
ctrl+p+q 退出容器不停止容器

1.2.2 删除容器

docker rm 容器ID // 不能删除正在运行的容器
docker rm -f $(docker ps -aq) //递归删除所有容器,强制删除正在运行的容器

1.2.3 查看容器日志

docker logs -tf --tail 10 容器ID

1.2.4 进入容器

docker exec -it 容器ID //进入容器后,开启新的终端**(常用)**
docker attach 容器ID //进入容器正在执行的终端,不会启用新的终端(不常用)

1.2.5 从容器内copy到宿主机

docker cp 容器ID:容器内路径 宿主机目的地路径

1.2.6 部署Nginx且进入容器

# --name 容器名称
# -p  本地端口:容器内端口
docker run -d --name nginx01 -p 3304:80  nginx:latest

# 进入容器
docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED     STATUS          PORTS                 NAMES             
01633eca1246   nginx:latest  "/docker-entrypoint.…"   22 minutes   Up 22 minutes  0.0.0.0:3304->80/tcp  nginx01

docker exec -it nginx01 /bin/bash

1.2.7 映射容器端口

# -p 主机端口:容器端口
docker -p 3306:3306 #将主机的 3306 端口映射到容器的 3306 端口

2 镜像原理

2.1 联合文件系统

2.2 容器数据卷

2.2.1 挂载

-v 设置容器卷映射, -v /宿主机路径:容器路径

  • 容器修改的会映射到宿主机路径;
  • 就算容器停止,宿主机路径下的改动,也会映射到容器内路径;
# 运行mysql,并设置容器卷路径映射,
# -e 设置容器环境变量 MYSQL_ROOT_PASSWORD=mysql root账号密码
# -v 设置容器卷映射, -v /宿主机路径:容器路径
docker run --name mysql01 -d -e MYSQL_ROOT_PASSWORD=admin \ 
	-v /home/bes/mysql:/var/lib/mysql mysql:5.7

除了真实容器卷路径映射外,还存在匿名挂载和具名挂载。

  • 匿名挂载

    -v 容器内路径 #只写了容器内的路径,没有写宿主机路径
    docker run --name mysql02 -d -e MYSQL_ROOT_PASSWORD=admin -v /var/lib/mysql mysql:5.7
    

    可通过docker inspect命令查看容器的具体信息,查询容器卷挂载信息。上述容器名称=mysql02 的容器卷挂载在/var/lib/docker/volumes/07c5e04aae4b85fcf34c*/_data路径下。
    在这里插入图片描述
    通过docker volume ls命令查看所有容器卷 挂载信息

    [root@centos7 mysql]# docker volume ls
    DRIVER    VOLUME NAME
    local     07c5e04aae4b85fcf34e84723c014ab3f97733c754cf044d1b7e60c4fa6033cd #匿名挂载
    local     33cfe247169cc41ecaf1239e632c9d05b62a6922c1f01a42dafd861a64aabbde
    local     mysqlData  #具名挂载
    
  • 具名挂载

    -v 宿主机文件夹名称(类似相对路径):容器内路径 #只写了宿主机文件夹:容器内路径,没有写宿主机绝对路径
    # 注意,mysqlData为宿主机文件夹名称
    docker run --name mysql02 -d -e MYSQL_ROOT_PASSWORD=admin \
    	-v mysqlData:/var/lib/mysql mysql:5.7
    

可执行docker volume ls 查看所有挂载卷目录,即查看所有映射的宿主机路径。

[root@centos7 mysql]# docker volume ls
DRIVER    VOLUME NAME
local     07c5e04aae4b85fcf34e84723c014ab3f97733c754cf044d1b7e60c4fa6033cd #匿名挂载
local     33cfe247169cc41ecaf1239e632c9d05b62a6922c1f01a42dafd861a64aabbde
local     mysqlData  #具名挂载

匿名挂载都是随机生成文件夹名称。其默认位置:宿主机:/var/lib/docker/volume,数据存于mysqlData/_data文件夹中
在这里插入图片描述
具名挂载:是采用指定的文件夹名称。类似于相对路径,默认路径:宿主机:/var/lib/docker/volume,数据存于mysqlData/_data文件夹中
在这里插入图片描述
注意:所有docker未指定宿主机路径的容器卷映射,默认的位置都是在宿主机:/var/lib/docker/volume/xxx/_data路径下。大多数是使用具名挂载,推荐使用具名挂载

拓展:

-v 宿主机路径:容器内路径:ro #相对容器来说,容器内路径下文件只读;rw同理
	ro=readonly,表示【容器内】该路径下文件【只读】,只能通过宿主机路径下进行修改
-v 宿主机路径:容器内路径:rw
	rw=readwrite,表示【容器内】该路径下【可读可写】,容器内路径下文件和宿主机路径下都可修改
	
docker run --name mysql02 -d -e MYSQL_ROOT_PASSWORD=admin \
		-v mysqlData:/var/lib/mysql:ro mysql:5.7
		
docker run --name mysql02 -d -e MYSQL_ROOT_PASSWORD=admin \
		-v mysqlData:/var/lib/mysql:rw mysql:5.7

还可以再创建DockerFile 文件中通过VOLUME ["volume01", "volume02"] 命令来实现匿名挂载容器卷。同理,默认在**宿主机:/var/lib/docker/volume/xxx/_data**路径下

2.2.2 容器数据卷共享

多个容器之间数据共享,通过 --volumes-from命令。

原理:一个容器01通过-v 将容器内路径挂载到宿主机,而容器02、容器03通过--volumes-from 容器01实现02,03容器和01容器数据共享,即类似01作为02,03的父容器,02,03作为01的子容器,可继承01的内容。

注意:--volumes-from命令实现容器的数据共享,是通过cp复制命令实现。生命周期为:所有的共享容器都被删除

# 创建容器卷父容器
docker run --name centos01 -v testhome:/home -it centos #容器卷 父容器
# 创建容器卷 子容器02 03
docker run -it --name centos02 【--volumes-from】 centos01 centos
docker run -it --name centos03 【--volumes-from】 centos01 centos

上述创建的三个容器仅在 /home 目录下数据共享。通过CP命令实现。
通过三个容器分别在/home目录下创建ctos01、ctos02、ctos03,在三个容器都能看到。
在这里插入图片描述
若在/root目录下创建文件,则在其他容器内不可见。所以,仅在父容器卷目录下数据共享。

实战:实现MySQL两个容器内数据共享。
即:两个容器内的MySQL数据共享,使用同一份数据。

docker run -d -p 3316:3306 -v /var/lib/mysql -v /etc/mysql/conf.d -e \
	 MYSQL_ROOT_PASSWORD=admin --name mysql01 mysql:5.7 #父容器
	
#通过--volumes-from命令实现和mysql01容器 /var/lib/mysql /etc/mysql/conf.d两个路径下数据共享
docker run -d -p 3317:3306 -e MYSQL_ROOT_PASSWORD=admin --name mysql02 \
	 【--volumes-from】 mysql01 mysql:5.7 

2.3 DockerFile

2.3.1 DockerFile指令

## 构建时命令
FROM          # 基础镜镜像,一切从这里开始构建 
FROM centos(镜像名称)

MAINTAINER    # 镜像是谁写的,姓名+邮箱 
MAINTAINER wl<wl@126.com>

RUN           # 镜像构建的时候需要运行的命令 
RUN yum install -y net-tools

ADD           # 镜像构建的时候添加内容,添加文件。若是压缩包,会自动解压

COPY          # 类似ADD ,镜像构建的时候将我们文件拷贝到镜像中 
COPY ./test /usr/local

ENV           # 镜像构建的时候设置环境变量! 
ENV mypath /usr/local //类似键值对

WORKDIR       # 镜像的工作目录
WORKDIR $mypath

VOLUME        # 挂载的目录
VOLUME ["volume01", "volume02"]

EXPOSE        # 暴露端口配置
EXPOSE 80

ONBUILD       # 当构建一个被继承 DockerFile 这个时候就会运行 ONBUILD 的指令。 (了解即可)


## 容器启动时命令
CMD           # 指定这个【容器启动的时候】要运行的命令,只有最后一个会生效,可被誉代
CMD /bin/bash
CMD ["ls", "-l"]

ENTRYPOINT    # 指定这个【容器启动的时候】要运行的命令可以追加命令
ENTRYPOINT ["ls", "-l"]

/**
*CMD:该命令在执行docker run 容器 command时,
	  若指定了command,会【替换】dockerfile中的【CMD指令】
*
ENTRYPOINT: 该命令在执行docker run 容器 command时,
	         若指定了command,会【追加】在dockerfile中的【ENTRYPOINT指令后面】
*
*/

注意:

  1. dockerfile中可以有多条cmd命令,但只是最后一条有效。
  2. CMD命令即避免执行docker run 容器 [command]时,最后输入的[command]指令。
  3. CMD命令的参数格式,一般写成 字符串数组的方式,如上面的例子。如:
    CMD ["echo","hello world"],虽然也可写成CMD echo hello word 方式,但这样docker会在指定的命令前加 /bin/sh -c 执行,有时有可能会出问题。 所以推荐采用数据结构的方式来存放命令。

2.3.2 创建dockerfile文件构建镜像

(1)构建简易版centos测试

# cat dockerfile-centostest
FROM centos
MAINTAINER wl<wl@126.com>

#RUN yum install -y net-tools
ENV mypath /usr/local
COPY ./test /usr/local
WORKDIR $mypath

VOLUME ["volume01", "volume02"]
EXPOSE 80
CMD /bin/bash

执行构建命令docker build -f dockerfile文件路径 -t 镜像名称[:flag 版本] .,注意,最后有个.
docker build -f dockerfile-centostest -t centoscmd:0.1 .

[root@centos7 dockerfiletest] docker build -f dockerfile-centostest -t centoscmd:0.1 .
[+] Building 0.2s (8/8) FINISHED                                                  docker:default
 => [internal] load build definition from dockerfile-centostest                             0.0s
 => => transferring dockerfile: 300B                                                        0.0s
 => [internal] load metadata for docker.io/library/centos:latest                            0.0s
 => [internal] load .dockerignore                                                           0.0s
 => => transferring context: 2B                                                             0.0s
 => [internal] load build context                                                           0.0s
 => => transferring context: 83B                                                            0.0s
 => CACHED [1/3] FROM docker.io/library/centos:latest                                       0.0s
 => [2/3] COPY ./test /usr/local                                                            0.0s
 => [3/3] WORKDIR /usr/local                                                                0.1s
 => exporting to image                                                                      0.0s
 => => exporting layers                                                                     0.0s
 => => writing image sha256:f9fb0108752379b21684143aa6737d578b45c2fe0dd5d3a170cd1b44780de4  0.0s
 => => naming to docker.io/library/centoscmd:0.1                                            0.0s

执行docker images 查看构建好的镜像
在这里插入图片描述
进入容器docker run -it centoscmd:0.1,可看出工作目录设置/usr/local成功,且test文件复制成功
在这里插入图片描述
(2)构建centos+tomcat镜像

  1. 编辑dockerfile文件

    [root@centos7 dockerfiletest]# cat dockerfile-tomcattest 
    FROM centos
    MAINTAINER wl<wl@126.com>
    
    ADD apache-tomcat-9.0.85.tar.gz /usr/local/
    ADD jdk-8u391-linux-x64.tar.gz /usr/local/
    
    ENV WORKPATH /usr/local
    WORKDIR $WORKPATH
    ENV JAVA_HOME /usr/local/jdk1.8.0_391
    ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.85
    ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.85
    ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin:$CATALINA_HOME/lib
    EXPOSE 8080
    
    CMD $CATALINA_HOME/bin/startup.sh && tail -f $CATALINA_HOME/logs/catalina.out
    
  2. 将apache-tomcat-9.0.85.tar.gz和jdk-8u391-linux-x64.tar.gz 压缩包cp到dockerfile同级目录。若不是同级目录,会导致出错,详情请看

  3. 执行构建命令:docker build -f dockerfile-tomcattest -t tomcat-diy:0.1 .

  4. 查看生成镜像
    在这里插入图片描述

  5. 启动tomcat-dirty镜像:docker run --name tomcat02 -p 9090:8080 -d -v tomcat-webapps:/usr/local/apache-tomcat-9.0.85/webapps -v tomcat-logs:/usr/local/apache-tomcat-9.0.85/logs tomcat-diy:0.1
    在这里插入图片描述

  6. 查看容器卷是否挂载docker volume ls
    在这里插入图片描述

2.4 容器网络相关

后续学习记录会继续补充~~

自动化学报latex模板——ctex2.4.6和ctex2.9.2直接使用步骤 自动化学报latex模板——ctex2.4.6和ctex2.9.2直接使用步骤 1.背景及问题 最近在使用自动化学报latex模板写作业时,一只对latex搞不清楚,网上关于各种版本的latex下载了一堆(比如ctex中文套装方案的各个版本及texlive+texstudio方案,中间还升级了miktex,windet等),发现都未能成功编译出来自动化学报的latex模板,反正开始头很大!!!最后终于没忍住打开了: 自动化学报官网下载模板链接,因为我就要用latex模板(不能服输!)找到的解决方案是:使用 阅读详情

相关推荐

JW01二氧化碳传感器实战:5分钟搞定Arduino环境监测系统(附完整代码)

本文详细介绍了如何使用JW01二氧化碳传感器与Arduino快速搭建环境监测系统。通过简单的硬件连接和完整的代码示例,读者可以在5分钟内实现CO2浓度实时监测,并了解数据解析、常见问题解决及进阶应用扩展。JW01传感器的高精度和易用性使其成为创客和嵌入式开发者的理想选择。

kite3的博客 383

Docker学习记录

安装环境:Linux系统 -> VMware的Centos7。

m0_74429614的博客 794

宝骏kiwi 630 730 560 E100 E200 E300 310 510 610 330 530维修手册电路图资料线路图接线图更新

2020-2022年宝骏RS-3维修手册和电路图。2020-2022年宝骏RS-3维修手册和电路图。2019-2021年宝骏RC-6维修手册和电路图。2019-2021年宝骏RC-6维修手册和电路图。2019-2020年宝骏RS-5维修手册和电路图。2019-2020年宝骏RS-5维修手册和电路图。2019-2020年宝骏RM-5维修手册和电路图。2019-2020年宝骏RM-5维修手册和电路图。2019-2021年宝骏510维修手册和电路图。2019-2021年宝骏510维修手册和电路图。

weixin_45821055的博客 1771

Docker学习记录-docker的基本命令

docker的基本命令,镜像拉取容器的启动,联合文件系统,对docker镜像的理解,对docker分层的理解,提交镜像。

weixin_44084096的博客 526

STM32F4用FSMC驱动AX58100 EtherCAT从站芯片,保姆级配置流程与避坑指南

本文详细介绍了STM32F4通过FSMC接口驱动AX58100 EtherCAT从站芯片的完整配置流程,包括硬件连接、时序优化、协议栈移植及TwinCAT主站集成。针对工业自动化场景,提供高性价比的实时控制解决方案,特别适合机械臂、CNC机床等精确同步应用,并分享关键调试技巧与性能优化方法。

weixin_27869497的博客 306

人民网留言数据爬取

起因是要做一个LDA主题分析的实践案例,需要数据来源,人民网的留言数据特别的适合,想着能不能用人民网留言数据来做一个LDA,种种原因还是放弃了,但是第一次弯弯绕绕地通过爬虫拿到了数据,还是想记录一下。值得说明的是,这篇博客写于2025年11月9日,其中的加密逻辑可能会随着时间而变动。

Phoenix1st的博客 1022

【学习记录】Docker初探(1)

系统:windows11使用管理员打开cmd窗口,使用PowerShell。

weixin_51120349的博客 1124

从ST电机库到TI InstaSPIN:手把手对比两种主流FOC实现中的坐标变换差异

本文深入对比了ST电机库与TI InstaSPIN在FOC实现中的坐标变换差异,包括坐标系定义、变换系数和角度处理等关键点。针对BLDC和PMSM电机控制,提供了从理论到实践的移植方案,帮助工程师快速解决平台切换中的性能问题。特别解析了Clarke/Park变换在两种实现中的微妙差异及其对PI控制的影响。

weixin_28724661的博客 398

Docker学习 命令记录

是Docker对容器网络隔离的一项技术,提供了多种不同的模式供用户使用,选择不同的网络模式来实现容器网络的互通以及彻底的隔离。利用Docker提供的build命令,指定Dockerfile文件,就可以按照配的内容将镜像构建出来。自定义镜像内容、构建公共基础镜像减少多余配置、程序的快速部署、企业内部项目的快速交付。Docker提供的一个用于自定义构建镜像的一个配置文件——描述如何构建一个对象。网络互通:不同子网之间的网络互通、基于容器名(主机名)的方式在网络内访问。1:unhealthy(不健康)

qq_48158984的博客 1899

【光伏风电功率预测】基于 ICEEMDAN + MSCNN-BiGRU-Attention 的并行预测模型

本文提出一种基于ICEEMDAN分解与多尺度深度学习的光伏/风电功率并行预测框架。针对多能源、多时间尺度、强非平稳特性带来的建模挑战,该模型首先通过改进的ICEEMDAN算法将原始功率序列分解为不同频段的IMF分量;随后为每个IMF构建包含多尺度CNN、双向GRU和注意力机制的子模型,实现局部特征提取与时序依赖建模;最后通过并行预测与重构获得最终功率输出。实验表明,该方法能有效解决模式混叠问题,提升预测精度,并支持光伏/风电的独立或联合预测部署,适用于风光联合调度等工程场景。

专注AI大模型,软件混淆,授权 155

多算法数据预测——BP、ELM、LSTM、BiLSTM和SAELSTM,附Matlab源码

本文将为大家介绍基于BP、ELM、LSTM、BiLSTM和SAELSTM多种算法的数据预测,并提供相应的Matlab源码。SAELSTM算法是一种结合自动编码器和LSTM神经网络的深度学习方法,用于时间序列数据预测。ELM算法是一种单层前向神经网络,在单次训练过程中直接产生输出权重,从而具有快速学习和良好推广性能。多算法数据预测——BP、ELM、LSTM、BiLSTM和SAELSTM,附Matlab源码。总体来看,采用多种算法进行数据预测可以提高预测准确率,并可根据不同场景选择适合的算法。

qq_39605374的博客 864

Docker 部署 Redis 集群学习记录

1、在腾讯云 CentOS 7 服务器上,使用 Docker 部署 Redis 集群学习记录。 2、配置集群遇到的问题 3、Cannot reconnect to [192.168.0.163:6381]: Connection refused: /192.168.0.163:6381 4、redis 创建集群时,Waiting for the cluster to join.... 一直........................................

時間的博客 991

MATLAB应用实战系列(四十三)-基于MATLAB的光伏并网系统仿真设计

在Matlab中建立光伏电站接入系统模型,包括光伏发电逆变器及负荷模型等,仿真分析接入点处的电能质量,实现高品质并网运行。 壹 构建太阳能电池模型。 初始化参数如下图所示。 贰 构建MPPT控制模型。 具体封装如下所示: 通过PWM算法实现DC-DC稳步输出最大点。 叁 三、构建直流短距离输电线路。 仿真模型如下图: 通过电容来均衡线路电压,使得线路电压保持可靠性。 肆 通过逆变器变换,使得直流线路转换成...

wenyusuran的专栏 3169

docker学习记录1

起因 现在自己学习微服务,服务器越来越多,虽然自己写了一些shell脚本来安装需要的软件,比如mysql,redis,jdk等等,但是还是好麻烦。希望学习docker能够快速安装部署这些东西。 记录一些学习内容 ADD命令与COPY的区别 建议使用copy,因为是字面意思的命令,而add命令会有一些额外操作,比如如果add的是一个tar压缩包,压缩格式为 gzip , bz...

ajunkui4460的博客 154

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Docker学习记录日志

服务器前后端环境搭建Linux 部署web项目一 安装JDK(jdk-8u121-linux-x64.tar.gz)功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图...

weixin_44701172的博客 554

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Docker 学习记录

我们从docker是什么,能干嘛,组成,运行原理,和常用命令学习了基本使用docker的方法,再从镜像容器,数据卷以及dockerfile和网络进行延伸,并结合我们在学习过程中进行实质性的测试,亲手感受这个过程,打包上传镜像等。这一系列的操作内容还是很多,但是同样也扩展了很多的思维和认知,了解使用及简单原理,记录笔记以供复习和分享。

蜡笔小新1980的博客 4805

【docker学习】docker的使用记录

目录 一、安装docker 二、打开dockerhub 三、查看当前有哪些镜像 四、拉取Ubuntu20.04镜像 五、使用Ubuntu镜像启动一个容器 六、其他命令操作 1、查看所有的容器 2、删除容器 3、删除镜像 一、安装docker 链接:https://pan.baidu.com/s/1D6oyu7NgoHGGUrKaUcBRBw 提取码:sf72 自行下载安装,默认安装即可~ 二、打开dockerhub Docker Hub dockerhub就有点像git..

Q小鑫 1319
上一篇: docker踩坑记录
下一篇: Hyper-v网卡设置静态IP
Musclewl
博客等级 码龄9年 215粉丝 31原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值