标签归档:docker

docker 编译micropython esp8266 添加PYthon模块

1.git 官方的micropython库(默认在root目录下执行)

git clone https://github.com/micropython/micropython.git

2.对需要的模块进行修改,在ports/esp8266/modules 文件下创建的python文件都会被编译到固件中(bbb.py 到时候引入 import bbb),若是文件夹 lis下的 a.py文件,到时候访问时 import lis.a

3.使用docker安装官方的镜像,进行编译(若第二步git在root下 ,那文件就是 root/micropython 即~/micropython)

DOCKER:

docker run -it --rm -v ~/micropython:$HOME -u $UID -w $PWD larsks/esp-open-sdk bash

进入docker的mpy编译系统之后

make -C mpy-cross

然后 转到ports/esp8266目录进行编译

$ cd ports/esp8266 #转到esp8266目录
$ make submodules #初始化模块
$ make -j BOARD=ESP8266_GENERIC
#进行交叉编译,保存到ports/esp8266下的build-ESP8266_GENERIC文件夹下的firmware.bin固件,若该文件夹存在,则无法编辑,可以先删除
$ exit
#退出docker的mpy编译界面

注意:

1.无法放入非python文件在modules中,modules中的文件无法使用open()去读取

2.若需要对不同esp8266进行编译(esp8266默认4MBFlash ESP01S为1MB 则需要设置)

#在执行make -j BOARD=ESP8266_GENERIC前先设置大小
$ make BOARD=ESP8266_GENERIC BOARD_VARIANT=FLASH_512K
#设置flash为512KB
$ make BOARD=ESP8266_GENERIC BOARD_VARIANT=FLASH_1M
#设置flash为1MB,esp01s编译mpy固件,请选择该语句设置。

全自动设置:

$ cd ~/micropython
#先设置到micropython目录下
$ docker run --rm -v $HOME:$HOME -u $UID -w $PWD larsks/esp-open-sdk make -C mpy-cross

$ cd ports/esp8266
$ docker run --rm -v $HOME:$HOME -u $UID -w $PWD larsks/esp-open-sdk make -j BOARD=ESP8266_GENERIC

Building with Docker

Once you have installed Docker, you can run all of the following build commands inside the Docker container by prefixing them with docker run --rm -v $HOME:$HOME -u $UID -w $PWD larsks/esp-open-sdk ...command.... This will automatically download the Docker image provided by @larsks which contains the full toolchain and SDK.

Then you need to compile the MicroPython cross-compiler (mpy-cross). From the root of this repository, run:$ docker run –rm -v $HOME:$HOME -u $UID -w $PWD larsks/esp-open-sdk make -C mpy-cross

Note: The mpy-cross binary will likely only work inside the Docker container. This will not be a problem if you’re only building ESP8266 firmware, but if you’re also working on other ports then you will need to recompile for your host when switching between ports. To avoid this, use the local toolchain instead.

Then to compile the ESP8266 firmware:

$ cd ports/esp8266
$ docker run --rm -v $HOME:$HOME -u $UID -w $PWD larsks/esp-open-sdk make -j BOARD=ESP8266_GENERIC

全自动设置

1.选择上传的python模块,记录下来,上传到对应的开发板【esp8266 esp32】的modules上面,并在数据库中标记,等待完成编译后删除

2.shell执行脚本

#esp8266为例子,micropython文件存放在root下【请删除ESP8266_GENERIC】
#! /bin/bash
cd ~/micropython
docker run --rm -v $HOME:$HOME -u $UID -w $PWD larsks/esp-open-sdk make -C mpy-cross
cd ports/esp8266
if [ ! -f "build-ESP8266_GENERIC" ];then
    echo "文件不存在,执行编译"
else
    rm -rf build-ESP8266_GENERIC
fi
docker run --rm -v $HOME:$HOME -u $UID -w $PWD larsks/esp-open-sdk make -j BOARD=ESP8266_GENERIC

Docker 更换工作目录

Docker 的工作目录一般在 Docker Root Dir: /var/lib/docker 如果根目录挂载的磁盘不够大的话,很可能有些大的Docker img无法使用,可以将磁盘挂载到新的目录给Docker专门使用。

具体流程是:

1.先停止Docker服务

2.设置daemon.json文件

3.启动docker服务

首先查看你的Docker info 使用命令

docker info

#可以看到一行
Docker Root Dir: /var/lib/docker 
#这里就是你的Docker工作目录

停止Docker服务,1.docker.socket 2.docker.socket


systemctl stop docker.socket


systemctl stop docker.service

创建daemon.json

vi /etc/docker/daemon.json
#在VI编辑器中
{
"data-root": "/docker"
}
#其中/docker为你的工作目录

启动docker服务并查看

systemctl start docker.socket


systemctl start docker.service

docker info

大功告成!!!

docker 使用

-td
docker pull 源地址

docker

run

-i 交互式操作。

-t 终端。

-d 后台

进入容器
在使用 -d 参数时,容器启动后会进入后台。此时想要进入容器,可以通过以下指令进入:

docker attach

docker exec:推荐大家使用 docker exec 命令,因为此命令会退出容器终端,但不会导致容器的停止。

使用 docker start 启动一个已停止的容器(ID号):

$ docker start b750bbbcfd88

ps -a 查看全部进程

docker stop <容器 ID>

docker restart <容器 ID>

导出

docker export 1e560fca3906 > ubuntu.tar

删除
docker rm -f 1e560fca3906

docker run -d -P training/webapp python app.py

-d:让容器在后台运行。

-P:将容器内部使用的网络端口随机映射到我们使用的主机上。

 docker run -d -p 5000:5000 training/webapp python app.py
 ```


 ## mysql

docker run -itd –name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql

 -p 3306:3306 :映射容器服务的 3306 端口到宿主机的 3306 端口,外部主机可以直接通过 宿主机ip:3306 访问到 MySQL 的服务。
MYSQL_ROOT_PASSWORD=123456:设置 MySQL 服务 root 用户的密码。

docker run -p 3306:3306 –name mysql -v /opt/docker_v/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 -d imageID

-p 3306:3306:将容器的3306端口映射到主机的3306端口
-v /opt/docker_v/mysql/conf:/etc/mysql/conf.d:将主机/opt/docker_v/mysql/conf目录挂载到容器的/etc/mysql/conf.d
-e MYSQL_ROOT_PASSWORD=123456:初始化root用户的密码
-d: 后台运行容器,并返回容器ID
imageID: mysql镜像ID

“-v”与“-mount”的区别是:挂载主机目录使用“-v”时,如果宿主机上没有指定文件不会报错,会自动创建指定文件;当使用“-mount”时,如果宿主机中没有这个文件会报错找不到指定文件,不会自动创建指定文件


docker run -itd –name tmptest –mount type=tmpfs,destination=/app nginx:latest
“`

挂载的类型 type,可以是 bind、volume 或 tmpfs。
要挂载的源 source,对于有名字的卷,这里是卷的名字。对于匿名卷忽略这个字段。可以指定为 src 或 source。
要挂载的目的地 destination,将文件或目录挂载在容器中的路径作为其值。 可能被指定为 destination、dst 或 target。

  1. 启动本地镜像。

2.使用命令下载镜像中的文件到本地磁盘。

docker cp 3b4550732f7d:/usr/local/pipenet-docker-patrol/ /mnt/c/Users/14661/upgrade/front-patrol/docker-patrol

3b4550732f7d: 容器id

/usr/local/pipenet-docker-patrol/ : 镜像中的文件路径

/mnt/c/Users/14661/upgrade/front-patrol/docker-patrol :本地磁盘文件路径

文件拷贝:

1、docker 如何从宿主机拷文件到docker容器里面

docker cp 需要拷贝的文件或目录 容器名称:容器目录
2、从docker 容器里将文件拷贝到宿主机。

docker cp 容器名称:容器目录/文件 需要拷贝到宿主机的目录

退出容器三种方式

一, 命令

exit
二,快捷方式

ctrl + D
三,快捷方式

ctrl + P 在加 ctrl + Q

docker使用micropython环境

docker安装micropython环境

docker pull micropython/unix:v1.18

使用

docker run -it --name micropython-1.18 --network=host --mount type=bind,source=/Users/bhav/Code,target=/home --entrypoint bash micropython/unix:v1.18

使用挂载/Users/bhav/Code对应docker内/home目录
开启micropython 虚拟环境

在其中使用

micropython-dev

直接使用。
MPY1.18