Docker容器数据卷

本文介绍了Docker容器数据卷的使用,强调了数据卷对于容器数据持久化和共享的重要性。通过示例展示了如何使用`docker run -v`命令挂载数据卷,实现主机与容器之间的双向同步。还详细描述了在容器中安装ESP8266编译环境的过程,包括编译工具链的挂载、所需工具的安装,以及编译工程的步骤。
摘要由CSDN通过智能技术生成

容器数据卷

什么是容器数据卷

docker是要将应用和环境打包成一个镜像

这样,数据就不应该在容器中,否则容器删除,数据就会丢失,同时,如果将数据放到容器内,做镜像打包的时候镜像就会非常大,这和docker追求的快背道而驰,同时如果有多个容器都要访问同一个数据,那么不可能将这些数据拷贝到每个容器内。

故容器之间要有一个数据共享技术

在Docker容器中产生的数据,同步到本地,这就是卷技术

本质上是一个目录挂载,将容器内的目录挂载到虚拟机上

image-20200618162917672

目的:容器的持久化和同步操作

容器间可以数据共享

使用数据卷

直接使用命令来挂载。

docker run -it -v -p
# -it 交互式进入
# -v volume卷技术 主机路径:容器路径
# -p 主机端口
docker run -it -v /home/docker_test/:/home/ centos /bin/bash
# 本地主机的/home/docker_test/里的内容:
[root@VM-87-165-centos /home/docker_test/lesson1/dynreg_demo]# ls /home/docker_test/
lesson1  xtensa-lx106-elf  xtensa-lx106-elf-linux64-1.22.0-92-g8facf4c-5.2.0.tar.gz  开发者训练营设备端直播提纲.xmind
# centos容器里的内容
[root@df1dfb388b94 home]# ls
 lesson1	    xtensa-lx106-elf-linux64-1.22.0-92-g8facf4c-5.2.0.tar.gz
 xtensa-lx106-elf  ''$'\345\274\200\345\217\221\350\200\205\350\256\255\347\273\203\350\220\245\350\256\276\345\244\207\347\253\257\347\233\264\346\222\255\346\217\220\347\272\262''.xmind'
[root@df1dfb388b94 home]# 
# 使用docker inspect 容器id命令来看一下挂载情况
[root@VM-87-165-centos /home/docker_test/lesson1/dynreg_demo]# docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS         PORTS     NAMES
df1dfb388b94   centos    "/bin/bash"   8 minutes ago   Up 7 minutes             optimistic_mayer
[root@VM-87-165-centos /home/docker_test/lesson1/dynreg_demo]# docker inspect df1dfb388b94
[
        "Mounts": [
            {
                "Type": "bind",
                "Source": "/home/docker_test",
                "Destination": "/home",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            }
        ],
]
[root@VM-87-165-centos /home/docker_test/lesson1/dynreg_demo]# 

容器停止后,修改主机文件,再启动容器的时候,数据同样改变

双向同步

ESP8266编译环境实战

# 1. 首先将编译工具链拷贝到/opt/toolchain目录下

[root@df1dfb388b94 home]# mkdir /opt/toolchain         
[root@df1dfb388b94 home]# cp xtensa-lx106-elf /opt/toolchain/ -r
[root@df1dfb388b94 home]# ls /opt/toolchain/
xtensa-lx106-elf
[root@df1dfb388b94 home]# 

# 2. 然后安装编译所需要的所有工具集
[root@df1dfb388b94 home]# yum install -y gcc git wget make ncurses-devel flex bison python36 gcc-c++

# 安装完成
Installed:
  bison-3.0.4-10.el8.x86_64                              cpp-8.4.1-1.el8.x86_64                                                  emacs-filesystem-1:26.1-5.el8.noarch                         
  flex-2.6.1-9.el8.x86_64                                gcc-8.4.1-1.el8.x86_64                                                  git-2.27.0-1.el8.x86_64                                      
  git-core-2.27.0-1.el8.x86_64                           git-core-doc-2.27.0-1.el8.noarch                                        glibc-devel-2.28-151.el8.x86_64                              
  glibc-headers-2.28-151.el8.x86_64                      glibc-langpack-en-2.28-151.el8.x86_64                                   groff-base-1.22.3-18.el8.x86_64                              
  isl-0.16.1-6.el8.x86_64                                kernel-headers-4.18.0-305.17.1.el8_4.x86_64                             libedit-3.1-23.20170329cvs.el8.x86_64                        
  libgomp-8.4.1-1.el8.x86_64                             libmpc-1.1.0-9.1.el8.x86_64                                             libpkgconf-1.4.2-1.el8.x86_64                                
  libpsl-0.20.2-6.el8.x86_64                             libxcrypt-devel-4.1.1-4.el8.x86_64                                      m4-1.4.18-7.el8.x86_64                                       
  make-1:4.2.1-10.el8.x86_64                             ncurses-6.1-7.20180224.el8.x86_64                                       ncurses-c++-libs-6.1-7.20180224.el8.x86_64                   
  ncurses-devel-6.1-7.20180224.el8.x86_64                openssh-8.0p1-6.el8_4.2.x86_64                                          openssh-clients-8.0p1-6.el8_4.2.x86_64                       
  perl-Carp-1.42-396.el8.noarch                          perl-Encode-4:2.97-3.el8.x86_64                                         perl-Errno-1.28-419.el8_4.1.x86_64                           
  perl-Error-1:0.17025-2.el8.noarch                      perl-Exporter-5.72-396.el8.noarch                                       perl-File-Path-2.15-2.el8.noarch                             
  perl-File-Temp-0.230.600-1.el8.noarch                  perl-Getopt-Long-1:2.50-4.el8.noarch                                    perl-Git-2.27.0-1.el8.noarch                                 
  perl-HTTP-Tiny-0.074-1.el8.noarch                      perl-IO-1.38-419.el8_4.1.x86_64                                         perl-IO-Socket-IP-0.39-5.el8.noarch                          
  perl-MIME-Base64-3.15-396.el8.x86_64                   perl-Mozilla-CA-20160104-7.module_el8.3.0+416+dee7bcef.noarch           perl-PathTools-3.74-1.el8.x86_64                             
  perl-Pod-Escapes-1:1.07-395.el8.noarch                 perl-Pod-Perldoc-3.28-396.el8.noarch                                    perl-Pod-Simple-1:3.35-395.el8.noarch                        
  perl-Pod-Usage-4:1.69-395.el8.noarch                   perl-Scalar-List-Utils-3:1.49-2.el8.x86_64                              perl-Socket-4:2.027-3.el8.x86_64                             
  perl-Storable-1:3.11-3.el8.x86_64                      perl-Term-ANSIColor-4.06-396.el8.noarch                                 perl-Term-Cap-1.17-395.el8.noarch                            
  perl-TermReadKey-2.37-7.el8.x86_64                     perl-Text-ParseWords-3.30-395.el8.noarch                                perl-Text-Tabs+Wrap-2013.0523-395.el8.noarch                 
  perl-Time-Local-1:1.280-1.el8.noarch                   perl-Unicode-Normalize-1.25-396.el8.x86_64                              perl-constant-1.33-396.el8.noarch                            
  perl-interpreter-4:5.26.3-419.el8_4.1.x86_64           perl-libs-4:5.26.3-419.el8_4.1.x86_64                                   perl-macros-4:5.26.3-419.el8_4.1.x86_64                      
  perl-parent-1:0.237-1.el8.noarch                       perl-podlators-4.11-1.el8.noarch                                        perl-threads-1:2.21-2.el8.x86_64                             
  perl-threads-shared-1.58-2.el8.x86_64                  pkgconf-1.4.2-1.el8.x86_64                                              pkgconf-m4-1.4.2-1.el8.noarch                                
  pkgconf-pkg-config-1.4.2-1.el8.x86_64                  platform-python-pip-9.0.3-19.el8.noarch                                 publicsuffix-list-dafsa-20180723-1.el8.noarch                
  python3-pip-9.0.3-19.el8.noarch                        python3-setuptools-39.2.0-6.el8.noarch                                  python36-3.6.8-2.module_el8.4.0+790+083e3d81.x86_64          
  wget-1.19.5-10.el8.x86_64                             

Complete!

# 3. 导入IDF_PATH
[root@df1dfb388b94 ESP8266_RTOS_SDK]# pwd
/home/esp8266/ESP8266_RTOS_SDK
[root@df1dfb388b94 ESP8266_RTOS_SDK]# export IDF_PATH=/home/esp8266/ESP8266_RTOS_SDK
[root@df1dfb388b94 ESP8266_RTOS_SDK]# 

# 4.设置编译工具链位置
[root@df1dfb388b94 ESP8266_RTOS_SDK]# ls /opt/toolchain/xtensa-lx106-elf/bin 
xtensa-lx106-elf-addr2line  xtensa-lx106-elf-c++filt	   xtensa-lx106-elf-gcc		xtensa-lx106-elf-gcov	    xtensa-lx106-elf-ld.bfd   xtensa-lx106-elf-readelf
xtensa-lx106-elf-ar	    xtensa-lx106-elf-cpp	   xtensa-lx106-elf-gcc-5.2.0	xtensa-lx106-elf-gcov-tool  xtensa-lx106-elf-nm       xtensa-lx106-elf-size
xtensa-lx106-elf-as	    xtensa-lx106-elf-ct-ng.config  xtensa-lx106-elf-gcc-ar	xtensa-lx106-elf-gdb	    xtensa-lx106-elf-objcopy  xtensa-lx106-elf-strings
xtensa-lx106-elf-c++	    xtensa-lx106-elf-elfedit	   xtensa-lx106-elf-gcc-nm	xtensa-lx106-elf-gprof	    xtensa-lx106-elf-objdump  xtensa-lx106-elf-strip
xtensa-lx106-elf-cc	    xtensa-lx106-elf-g++	   xtensa-lx106-elf-gcc-ranlib	xtensa-lx106-elf-ld	    xtensa-lx106-elf-ranlib
[root@df1dfb388b94 ESP8266_RTOS_SDK]# export PATH=$PATH:/opt/toolchain/xtensa-lx106-elf/bin
[root@df1dfb388b94 ESP8266_RTOS_SDK]# 

# 5. 安装漏网的pyserial 
pip3 install pyserial

# 6. 安装gperf 由于无法使用yum install gperf 来安装,所以只能使用源码安装的方式
# 具体的安装教程请参考 http://blog.fpliu.com/it/software/GNU/gperf/build-for-current-host

# 7. 直接编译工程
make -j8 all
# 当看到如下信息时,表示已经完成编译
LD build/esp8266-qcloud-iot.elf
esptool.py v2.4.0
To flash all build output, run 'make flash' or:
python /home/esp8266/ESP8266_RTOS_SDK/components/esptool_py/esptool/esptool.py --chip esp8266 --port /dev/ttyUSB0 --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq 40m --flash_size 4MB 0x0000 /home/lesson1/dynreg_demo/build/bootloader/bootloader.bin 0x10000 /home/lesson1/dynreg_demo/build/esp8266-qcloud-iot.bin 0x8000 /home/lesson1/dynreg_demo/build/partitions_qcloud_demo.bin
[root@df1dfb388b94 dynreg_demo]# 
[root@df1dfb388b94 dynreg_demo]# 
[root@df1dfb388b94 dynreg_demo]# 
# 查看主机目录下是否已经生成可执行文件
[root@VM-87-165-centos /home/docker_test/lesson1/dynreg_demo/build]# ls
app_update          coap                    espos       include    main       partitions_qcloud_demo.bin  spiffs         vfs
aws_iot             esp8266                 esp-tls     jsmn       mdns       partition_table             spi_flash      wpa_supplicant
bootloader          esp8266-qcloud-iot.bin  esptool_py  libsodium  mqtt       pthread                     ssl
bootloader_support  esp8266-qcloud-iot.elf  freertos    log        newlib     qcloud_iot                  tcpip_adapter
cjson               esp8266-qcloud-iot.map  heap        lwip       nvs_flash  smartconfig_ack             util
[root@VM-87-165-centos /home/docker_test/lesson1/dynreg_demo/build]# 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值