[OS] docker 使用
嵌入式有哪些应用场景。
回顾一下Docker历史 https://blog.csdn.net/u014421520/article/details/120172428
Docker 在centos和WSL2 下的安装教程 https://blog.csdn.net/u014421520/article/details/120172516
Dockerfile的使用 https://blog.csdn.net/u014421520/article/details/120248498
Docker常用命令 https://blog.csdn.net/u014421520/article/details/120248405?spm=1001.2014.3001.5502
Docker容器数据卷 https://blog.csdn.net/u014421520/article/details/120248472?spm=1001.2014.3001.5502
Dokce镜像的理解 https://blog.csdn.net/u014421520/article/details/120248419?spm=1001.2014.3001.5502
@supperthomas 研究一下docker 如何使用
ocker 极简入门指南,10 分钟就能看懂~
https://mp.weixin.qq.com/s/ueD5htayKhCnzQ5C4ngJqQ
- docker volume ls 显示挂在的目录
issue: docker pull 下载太慢了
TODO:
写一个dockerfile 构建RTTHREAD
dockerfile:
所有指令都是大写:
docker build -f dockerfile
FROM ubuntu
VOLUME ["volume01","volume02"]
CMD echo "--------hello world---------"
CMD /bin/bash
docker build -f dockerfile -t thomas .
路径不要忘记了
到这里,恭喜你已经完成了 Docker 的入门项目!如果还想继续深入,不妨接着往下看看。
1.参数使用
FROM
指定基础镜像,所有构建的镜像都必须有一个基础镜像,且 FROM 命令必须是 Dockerfile 的第一个命令
FROM
FROM
示例:FROM mysql:5.0 AS database
MAINTAINER
镜像维护人的信息
MAINTAINER
示例:MAINTAINER Jartto [email protected]
RUN
构建镜像时要执行的命令
RUN
示例:RUN [“executable”, “param1”, “param2”]
ADD
将本地的文件添加复制到容器中去,压缩包会解压,可以访问网络上的文件,会自动下载
ADD
示例:ADD *.js /app 添加 js 文件到容器中的 app 目录下
COPY
功能和 ADD 一样,只是复制,不会解压或者下载文件
CMD
启动容器后执行的命令,和 RUN 不一样,RUN 是在构建镜像是要运行的命令
当使用 docker run 运行容器的时候,这个可以在命令行被覆盖
示例:CMD [“executable”, “param1”, “param2”]
ENTRYPOINT
也是执行命令,和 CMD 一样,只是这个命令不会被命令行覆盖
ENTRYPOINT [“executable”, “param1”, “param2”]
示例:ENTRYPOINT [“donnet”, “myapp.dll”]
LABEL:为镜像添加元数据,key-value 形式
LABEL
示例:LABEL version=”1.0” description=”这是一个web应用”
ENV:设置环境变量,有些容器运行时会需要某些环境变量
ENV
ENV
示例:ENV JAVA_HOME /usr/java1.8/
EXPOSE:暴露对外的端口(容器内部程序的端口,虽然会和宿主机的一样,但是其实是两个端口)
EXPOSE
示例:EXPOSE 80
容器运行时,需要用 -p 映射外部端口才能访问到容器内的端口
VOLUME:指定数据持久化的目录,官方语言叫做挂载
VOLUME /var/log 指定容器中需要被挂载的目录,会把这个目录映射到宿主机的一个随机目录上,实现数据的持久化和同步。
VOLUME [“/var/log”,”/var/test”…..] 指定容器中多个需要被挂载的目录,会把这些目录映射到宿主机的多个随机目录上,实现数据的持久化和同步
VOLUME /var/data var/log 指定容器中的 var/log 目录挂载到宿主机上的 /var/data 目录,这种形式可以手动指定宿主机上的目录
WORKDIR:设置工作目录,设置之后 ,RUN、CMD、COPY、ADD 的工作目录都会同步变更
WORKDIR
示例:WORKDIR /app/test
USER:指定运行命令时所使用的用户,为了安全和权限起见,根据要执行的命令选择不同用户
USER
示例:USER test
ARG:设置构建镜像是要传递的参数
ARG
ARG name=sss
TOPIC: 如何写dockerfile https://abcnull.blog.csdn.net/article/details/107902346
arm-none-eabi-gcc scons menuconfig needed libraries vscode remote support RTT_EXEC_PATH env variable for rtconfig.py
代码放外面
pip install requests -qq
python -c "import tools.menuconfig; tools.menuconfig.touch_env()"
echo "RTT_ROOT=${{ github.workspace }}" >> $GITHUB_ENV
echo "RTT_CC=gcc" >> $GITHUB_ENV
在线play docker https://labs.play-with-docker.com/
docker 后台执行: ctrl+p 再按ctrl+q
恢复 docker attach [container]
docker 如何push到docker hub
docker commit -m "add code" eb8bced32f05 new-repo:tagname
docker tag local-image:tagname new-repo:tagname
docker push new-repo:tagname
四、清理镜像
我们在使用 Docker 一段时间后,系统一般都会残存一些临时的、没有被使用的镜像文件,可以通过以下命令进行清理: `docker images prune 它支持的子命令有:
-a, --all: 删除所有没有用的镜像,而不仅仅是临时文件;
-f, --force:强制删除镜像文件,无需弹出提示确认;
#
# NuttX development environment
#
FROM ubuntu:xenial
MAINTAINER David Sidrane <[email protected]>
ENV DEBIAN_FRONTEND noninteractive
RUN dpkg --add-architecture i386 \
&& apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get -y --quiet --no-install-recommends install \
bison \
bzip2 \
ca-certificates \
ccache \
cmake \
file \
flex \
g++ \
gcc \
genromfs \
git \
gosu \
gperf \
libc6:i386 \
libgcc1:i386 \
libncurses-dev \
libstdc++5:i386 \
libstdc++6:i386 \
make \
ninja-build \
patch \
python \
sudo \
unzip \
wget \
&& apt-get -y autoremove \
&& apt-get clean autoclean \
# astyle v2.06
&& wget https://downloads.sourceforge.net/project/astyle/astyle/astyle%202.06/astyle_2.06_linux.tar.gz -O /tmp/astyle.tar.gz \
&& tar -xvf /tmp/astyle.tar.gz && cd astyle/src && make -f ../build/gcc/Makefile && cp bin/astyle /usr/local/bin && cd .. && rm -rf astyle \
# manual ccache setup
&& ln -s /usr/bin/ccache /usr/lib/ccache/cc \
&& ln -s /usr/bin/ccache /usr/lib/ccache/c++ \
# cleanup
&& rm -rf /var/lib/apt/lists/{apt,dpkg,cache,log} /tmp/* /var/tmp/*
RUN git clone --depth 1 https://bitbucket.org/nuttx/tools.git /tmp/tools; \
cd /tmp/tools/kconfig-frontends; \
./configure --enable-mconf -prefix=/usr; \
make; \
make install; \
rm -rf /tmp/*
# GCC 5.4
RUN mkdir -p /opt/gcc && cd /opt/gcc && \
wget -qO- https://launchpad.net/gcc-arm-embedded/5.0/5-2016-q3-update/+download/gcc-arm-none-eabi-5_4-2016q3-20160926-linux.tar.bz2 | tar jx --strip 1 && \
rm -rf /opt/gcc/share/doc; \
ln -s /usr/bin/ccache /usr/lib/ccache/arm-none-eabi-g++; \
ln -s /usr/bin/ccache /usr/lib/ccache/arm-none-eabi-gcc
ENV CCACHE_CPP2=1
ENV CCACHE_MAXSIZE=1G
ENV DISPLAY :0
ENV PATH "/usr/lib/ccache:/opt/gcc/bin:$PATH"
ENV TERM=xterm
# create and start as LOCAL_USER_ID
COPY entrypoint.sh /usr/local/bin/entrypoint.sh
ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
CMD ["/bin/bash"]
官方docker教程:https://training.play-with-docker.com/
目前掌握dockerfile。https://github.com/supperthomas/Dockerfiles
发布自己的镜像到docker hub
- 首先需要给自己的镜像打一个tag,
# docker tag esp32_adf_build:0.1 hubertxxu/esp32_adf_build:latest
- 然后push到docker hub
docker push hubertxxu/esp32_adf_build:latest
如果直接push会报错,因为自己做的docker镜像是没有加docker hub的用户名的。
docker 从入门到精通 https://vuepress.mirror.docker-practice.com/
Dockerfile最佳实践 https://vuepress.mirror.docker-practice.com/appendix/best_practices/
数据卷使用: docker run -it -v 宿主机绝对路径目录: /容器内目录 镜像名
docker run -it -w /root/rtthread -v /f/04_git_repo/GITEE/test/rt-thread_github:/root/rtthread lt6210925/rtthread
docker跑起来还是挺耗资源的