docker组成

仓库 (Registry)

镜像(Image)

容器(Container)

image.png
image.png

安装docker

https://docs.docker.com/get-docker/
https://www.runoob.com/docker/ubuntu-docker-install.html

将当前用户加入docker用户组,防止每次启动docker都需要用root权限
sudo usermod -aG docker $(whoami)
sudo reboot now #退出并重新登录后即可生效

查看docker 版本信息

sudo docker version

docker默认的工作路径

/var/lib/docker
https://blog.csdn.net/weixin_32820767/article/details/81196250

阿里云镜像加速

通过阿里云服务器登录
image.png
image.png

Docker底层原理

image.png
image.png

Docker常用命令

https://docs.docker.com/engine/reference/commandline/cli/
image.png

镜像命令

列出所有镜像

docker images
image.png

下载镜像

docker pull
image.png
image.png

删除镜像

docker基础 - 图11
#删除本地镜像
docker rmi 镜像ID
haicoder(www.haicoder.net)# docker rmi 67fa590cfc1c

#删除全部镜像
docker rmi -f $(docker images -aq)

镜像分层理解

image.png
image.png
image.png

查看分层

docker image inspect redis:latest
image.png

提交镜像

image.png
实战测试
image.png

启动镜像,映射主机目录

使用下面的命令启动镜像:

docker run -d -v /virtual_env1/home:/home:rw -p 12306:22 —name=quectel base_env:16.04
或者
docker run -it —privileged=true -v ~/workspace2/standard-robots/tk1/sdk-v5.4/kernel:/workspace a09dd0db7876

参数解释:
-d:表示在后台运行
-v:挂载宿主机硬盘,表示将宿主机的/virtual_env1/home挂载到容器的/home目录,主要为了数据持久化,这样容器里的/home目录的内容不会因为容器的消失而消失。
-p:端口映射,将宿主机的12306端口映射进容器的22端口,这样访问宿主机的12306端口等于访问容器的22端口。
—name=quectel:指定容器的名称
这时候使用docker ps可以看到容器已经启动:
image.png

容器命令

说明:有了镜像才可以创建容器,下载一个ubuntu镜像来学习
docker pull ubuntu:18.04 #下载镜像
image.png

启动并进入容器

➜ ~ docker run -it ubuntu:18.04 /bin/bash
root@48c509d4a292:/#

查看容器内的Ubuntu,基础版本很多命令都是不完善的

root@48c509d4a292:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@48c509d4a292:/#

列出所有运行中的容器

docker ps -a
image.png

退出容器

exit # 直接容器停止并退出
crtl + p + q #容器不停止退出

删除容器

docker rm 容器ID #删除指定的容器,不能删除正在运行的容器。除非强制删除rm -f
docker rm -f $(docker ps -aq) #删除所有的容器

启动和停止容器

docker start 容器id
docker restart 容器id
docker stop 容器id
docker kill 容器id

常见的其他的命令

命令 docker run -d 镜像名
docker run -d ubuntu:18.04

查看日志

docker logs
image.png

查看容器中的进程信息

image.png

进入当前正在运行的容器

image.png
image.png

从容器内拷贝文件到主机

image.png
image.png

image.png

创建ubuntu

Dockerfile

image.png

  1. FROMubuntu:18.04
  2. MAINTAINERneethan<lijun@standard-robots.com>
  3. # COPY sources.list /etc/apt/ # 更换源操作,目前无其他合适的国内源,更换后会导致失败。
  4. # COPY linux-2.6.34 /opt/linux-2.6.34/
  5. RUN mkdir -p /workspace
  6. RUN mkdir -p /data/toolchains/nvidia/tk1/v5.4
  7. # 交叉编译工具链
  8. COPY tdx-xwayland-rt-glibc-x86_64-Reference-Minimal-Image-rt-armv7at2hf-neon-apalis-tk1-toolchain-5.4.0.sh \
  9. /data/toolchains/nvidia/tk1/v5.4
  10. # 内核sdk
  11. # COPY linux-toradex-toradex_5.4.y.tar.bz2 /workspace
  12. # 暂不指定环境变量,因为发现设置source交叉工具链会报错<...you probably need to 'unset LD_LIBRARY_PATH'>
  13. # ENV LIBRARY_PATH=/usr/local/lib
  14. # ENV LD_LIBRARY_PATH=/usr/lib
  15. RUN export LD_LIBRARY_PATH=/usr/local/lib
  16. ENV WORK_PATH=/workspace
  17. WORKDIR $WORK_PATH
  18. RUN apt-getupdate
  19. RUN apt-get install -y vim gcc g++
  20. # menuconfig 依赖
  21. RUN apt-get install -y ncurses-dev
  22. # 解决arm-linux- 找不到
  23. RUN apt-get install -y lsb-core
  24. # mkimage 工具
  25. RUN apt-get install -y u-boot-tools
  26. # .autogen.sh 失败
  27. RUN apt-get install -y autoconf automake libtool
  28. RUN apt-get install -y lzop
  29. RUN apt-get install -y lib32c-dev
  30. # make_ext4fs libstdc++.so.6:
  31. RUN apt-get install -y lib32stdc++6
  32. # 安装ssh
  33. RUN apt-get install -y openssh-server
  34. RUN apt-get install -y net-tools
  35. RUN apt-get install -y net-tools
  36. RUN apt-get install -y libssl-dev
  37. RUN apt-get install -y u-boot-tools
  38. RUN apt-get install -y bc build-essential git libncurses5-dev lzop perl libssl-dev bison flex
  39. RUN apt-get install -y python3-pip
  40. RUN pip3 install pyyaml
  41. RUN apt-get install -y gawk
  42. RUN apt-get install -y cmake
  43. RUN apt-get install -y liblapacke-dev checkinstall
  44. # sros依赖,可选性安装
  45. RUN apt-get install -y libboost-all-dev libopencv-dev \
  46. cimg-dev qtdeclarative5-dev qt5-qmake libqglviewer-headers google-perftools \
  47. libopenblas-dev libeigen3-dev sqlite3 unzip pkg-config curl \
  48. software-properties-common libcurl4-openssl-dev
  49. EXPOSE 80 22 8080
  50. CMD echo "docker image build success!"
  51. # 指定运行脚本
  52. CMD /bin/bash

编译docker镜像

docker build -f ubuntu18.04.dockerfile -t ubuntu18.04:1.0 .
查看docker镜像
docker images
image.png
运行镜像
docker run -it ubuntu18.04:1.0

创建centos

Dockerfile

image.png
image.png
image.png

查看docker历史记录

docker history 镜像id
image.png

发布自己的镜像

发布到DockerHub

image.png
image.png
image.png

发布到阿里云

image.png
5.浏览阿里云
image.png

样例

https://www.bilibili.com/video/BV1Bp4y1W7eU?from=search&seid=6144157487329769686&spm_id_from=333.337.0.0
image.png
image.png

编译内核

➜ ~ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu18.04 1.1 1ecb2470b73a 14 minutes ago 9.58GB
ubuntu18.04 1.0 84e64b604cc2 23 minutes ago 1.98GB
ubuntu 18.04 5a214d77f5d7 2 months ago 63.1MB
161.189.41.29:8082/sros/native latest 4a2faa33ab77 6 months ago 4.61GB

docker run -it —privileged=true -v ~/workspace2/standard-robots/tk1/sdk-v5.4/kernel:/workspace 1ecb2470b73a

命令解释:
docker run -it 运行docker终端
—privileged=true docker 挂载文件可编辑
~/workspace2/standard-robots/tk1/sdk-v5.4/kernel 主机路径, /workspace docker路径
1ecb2470b73a docker镜像ID

image.png

容器内部:
root@e5b9b511965a:/workspace/linux-toradex# cd linux-toradex
root@e5b9b511965a:/workspace/linux-toradex# . /data/toolchains/nvidia/tk1/v5.4/environment-setup-armv7at2hf-neon-tdx-linux-gnueabi
root@e5b9b511965a:/workspace/linux-toradex# make tegra_defconfig
root@e5b9b511965a:/workspace/linux-toradex# make -j15
image.png
设备树
root@e5b9b511965a:/workspace/linux-toradex# make DTC_FLAGS=”-@” tegra124-apalis-v1.2-eval.dtb

内核模块
root@e5b9b511965a:/workspace/linux-toradex# make -j$(nproc) modules
$ mkdir modules
$ export INSTALL_MOD_PATH=modules
$ make modules_install
$ cd modules
$ tar -czf ../modules.tar.gz .