文章目录
用以记录docker镜像制作过程中遇到的问题
一、安装docker
参照这篇文档安装docker,并使docker可以非sudo运行
#通过该命令查看docekr是否成功安装
docker --version
Docker version 19.03.2, build 6a30dfc
二、拉取Ubuntu16.04基础镜像
Ubuntu16.04 amd64
docker pull ubuntu:16.04
#运行容器,i:交互式操作,t:终端
docker run -it ubuntu:16.04
#进入已经运行的容器
docker exec -it [id] /bin/bash
Ubuntu16.04 aarch64
Docker Hub 上可以找到各种非 x86_64 平台的镜像,但是在x86上直接运行会报错
在 x86_64 平台上缺少运行 arm32v7 的 Python 解释器所需要的“环境依赖”,值得庆幸的是在 Linux 上我们可以用 QEMU 来做到跨平台运行,QEMU 的 User-mode emulation 对于容器技术来说是最适合的模式
#在 https://github.com/multiarch/qemu-user-static/releases 下载qemu-xxx-static文件,注意要根据自己平台选择,如arm64是qemu-aarch64-static,arm32是qemu-arm-static,选错文件后面的步骤会失败
sudo cp qemu-aarch64-static /usr/bin/
chmod +x /usr/bin/qemu-aarch64-static
docker run --rm --privileged multiarch/qemu-user-static:register
docker run -it -v /usr/bin/qemu-aarch64-static:/usr/bin/qemu-aarch64-static arm64v8/ubuntu
#指定Ubuntu16.04 host网络
docker run -it --net host --name u16_aarch64 -v /usr/bin/qemu-aarch64-static:/usr/bin/qemu-aarch64-static arm64v8/ubuntu:16.04
docker容器重命名
# docker rename 原ID/NAME 新NAME
docker rename angry_dirac arm64
启动进入容器
docker start arm64
docker exec -it arm64 bash
三、如果docker内部ping不通网络
- 在docker内提示错误 bash: ping: command not found 或 bash: ifconfig: command not found的解决方法
apt-get update
apt install iputils-ping
apt install net-tools
四、环境搭建
安装python
#直接安装会报错
#E: Unable to locate package python
apt-get install python-software-properties
apt-get install software-properties-common
add-apt-repository ppa:jonathonf/python-3.6
apt-get update
apt-get install vim gcc g++
apt-get install ncurses-dev //menuconfig 依赖
yum install ncurses-devel // centos 下menuconfig 依赖
apt-get install lsb-core //解决arm-linux- 找不到
apt-get install u-boot-tools //mkimage 工具
apt-get install autoconf automake libtool //.autogen.sh 失败
apt-get install lzop //recipe for target ‘arch/arm/boot/compressed/piggy.lzo’ failed
sudo apt-get install lib32c-dev
sudo apt-get install lib32stdc++6 //make_ext4fs libstdc++.so.6:
安装sudo
docker基础容器中bash: sudo: command not found问题解决
apt-get install sudo
五、提交镜像
#OPTIONS说明:
#-a :提交的镜像作者;
#-c :使用Dockerfile指令来创建镜像;
#-m :提交时的说明文字;
#-p :在commit时,将容器暂停
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
#镜像重命名
# 命令格式:
docker tag 镜像id 仓库:标签
#或:
docker tag 旧镜像名 新镜像名
六、删除docker镜像
# 删除一个或多个image
docker rmi <image ID>
#强制删除
docker rmi -f <image ID>
#删除所有镜像
docker rmi $(docker images -q)
#删除所有未运行的docker容器
docker rm $(docker ps -a -q)
#删除所有停止运行的容器
docker container prune
七、查看dockerlog
ubuntu(16.04) journalctl -u docker.service
补充:
目前想到的Docker构建ARM镜像方法有如下几种。第三种就类似交叉编译。
- 使用ARM主机,安装ARM版本的Docker,docker build出来的就是ARM版本的镜像。
- 使用Linux的虚拟化软件,模拟ARM芯片+ Linux,例如qemu。
- 使用Docker试验功能buildx,可以构建多平台的镜像。