ubuntu 使用docker以及在X86上交叉编译arm版本ubuntu

前言

在ubuntu中一键安装docker

curl -sSL https://get.daocloud.io/docker | sh

在docker中安装ubuntu

docker pull ubuntu

docker免sudo

  • 创建一个docker组
sudo groupadd docker
  • 添加当前用户到docker组
sudo usermod -aG docker $USER
  • 登出
  • 验证docker命令是否可以运行
docker run hello-world

docker容器操作

启动容器

以下命令使用 ubuntu 镜像启动一个容器,参数为以命令行模式进入该容器:

docker run -it ubuntu /bin/bash

参数说明:

-i: 交互式操作。
-t: 终端。
ubuntu: ubuntu 镜像。
/bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。
--rm,容器退出时自动清理容器内部的文件系统
-v : 挂载

要退出终端,直接输入 exit:

root@ed09e4490c57:/# exit

启动已停止运行的容器

查看所有的容器命令如下:

docker ps -a

使用 docker start 启动一个已停止的容器:

docker start b750bbbcfd88 
## 停止一个容器
停止容器的命令如下:

```c
docker stop <容器 ID>

停止的容器可以通过 docker restart 重启:

 docker restart <容器 ID>

查看容器

docker ps [-a] [-l]

省略 列出正在运行的容器

-a all 列出所有容器

-l latest 列出最近的容器

进入容器

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

docker attach

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

attach 命令

下面演示了使用 docker attach 命令。

 docker attach 1e560fca3906 

重新启动停止的容器

docker start [-i] 容器名

实际使用时,没必要每次都重新启动一个新的容器,我们可以重新启动之前创建的容器,现实情况也需要我们这样使用。

docker start -i haha

多个终端进入容器

对于已经开启的容器cd3b79a85d7e

使用docker exec -it 容器id /bin/bash命令进入容器即可

docker exec -it cd3b79a85d7e /bin/bash

导出和导入容器

  • 导出容器

如果要导出本地某个容器,可以使用 docker export 命令。

docker export 1e560fca3906 > ubuntu.tar
  • 导入容器快照

可以使用 docker import 从容器快照文件中再导入为镜像,以下实例将快照文件 ubuntu.tar 导入到镜像 test/ubuntu:v1:

 cat docker/ubuntu.tar | docker import - test/ubuntu:v1

删除容器

删除容器使用 docker rm 命令:

docker rm -f 1e560fca3906


容器挂载

docker挂载本地目录的方法总结:

Docker容器启动的时候,如果要挂载宿主机的一个目录,可以用-v参数指定。

譬如我要启动一个centos容器,宿主机的/test目录挂载到容器的/soft目录,可通过以下方式指定:

docker run -it -v /test:/soft centos /bin/bash

这样在容器启动后,容器内会自动创建/soft的目录。通过这种方式,我们可以明确一点,即-v参数中,冒号":"前面的目录是宿主机目录,后面的目录是容器内目录。

docker 镜像

列出镜像列表

我们可以使用 docker images 来列出本地主机上的镜像。

各个选项说明:

REPOSITORY:表示镜像的仓库源

TAG:镜像的标签

IMAGE ID:镜像ID

CREATED:镜像创建时间

SIZE:镜像大小

删除镜像

镜像删除使用 docker rmi 命令,比如我们删除 hello-world 镜像:

docker rmi hello-world

设置镜像标签

我们可以使用 docker tag 命令,为镜像添加一个新的标签。

 docker tag 860c279d2fec runoob/centos:dev

docker tag 镜像ID,这里是 860c279d2fec ,用户名称、镜像源名(repository name)和新的标签名(tag)。

使用 docker images 命令可以看到,ID为860c279d2fec的镜像多一个标签。

基于已有的容器创建自己需要的image

sudo docker commit -m "Imformation" -a "Author" 0b2616b0e5a8 ouruser/sinatra:v2

其中,-m表示一个commit message,-a 表示author的信息,指定创建的new image来自于container id
0b2616b0e5a8,此外还为新建的image定义一个组合名称ouruser/sinatra:v2。

使用docker images可以看到新建的images

docker images
REPOSITORY          TAG     IMAGE ID       CREATED       VIRTUAL SIZE
training/sinatra    latest  5bc342fa0b91   10 hours ago  446.7 MB
ouruser/sinatra     v2      3c59e02ddd1a   10 hours ago  446.7 MB
ouruser/sinatra     latest  5db5f8471261   10 hours ago  446.7 MB 

导出镜像

docker save -o centos-httpd-docker-image.tar centos:httpd

使用加载本地镜像

docker load -i centos-httpd-docker-image.tar 

在x86上交叉编译arm/ubuntu

使用模拟器

x86 无法运行 arm 平台程序,可以通过 qemu-arm-static 可以达到目的。在 ubuntu 上安装:

sudo apt install qemu-user-static

容器内: 下载arm版本的基础镜像,使用上节方式运行容器,再在其中进行编译,至于源码及压缩包,使用docker cp命令即可。

# 64位的:
docker run -it --rm -v /usr/bin/qemu-aarch64-static:/usr/bin/qemu-aarch64-static arm64v8/ubuntu:16.04 bash

# 32位的:
docker run -it --rm -v /usr/bin/qemu-arm-static:/usr/bin/qemu-arm-static arm32v7/ubuntu:16.04 bash

进入容器后用 getconf LONG_BIT 可确诊系统位数。在此容器中安装gcc、make等均为arm版本,此时无须再指定 CROSS_COMPILE 变量。

容器外 :编写 Dockerfile 文件,基于arm版本的基础镜像,其它如apt-get install无须修改。

创建文件 Dockerfile.arm,以示区别:

ARG BUILD_FROM=arm64v8
FROM ${BUILD_FROM}/ubuntu:16.04

RUN apt-get update

RUN ...

注意,此处为了兼容不同版本的arm,因而使用了参数。

首先运行 qemu-user-static 镜像,否则无须执行 arm 版本的构建:

docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
docker build -t metaverse -f Dockerfile.arm --build-arg BUILD_FROM=arm64v8 .

修改bash文件

  1. 下载arm-linux-gcc-3.4.1.tar.bz2到任意的目录下
wget http://voipac.com/downloads/pxa/toolchain/bin/arm-linux-gcc-3.4.1.tar.gz

或者直接通过网址下载 http://voipac.com/downloads/pxa/toolchain/bin/arm-linux-gcc-3.4.1.tar.gz

  1. 解压 arm-linux-gcc-3.4.1.tar.bz2
tar -jxvf arm-linux-gcc-3.4.1.tar.bz2
  1. 解压过程需要一段时间,解压后的文件形成了 usr/local/ 文件夹,进入该文件夹,将arm文件夹拷贝到/usr/local/下
cd usr/local/ 
cp -rv arm /usr/local/

现在交叉编译程序集都在/usr/local/arm/3.4.1/bin下面了
  
4. 修改环境变量,把交叉编译器的路径加入到PATH。

vim /etc/bash.bashrc

在最后加上:

export PATH=/usr/local/arm/3.4.1/bin:$PATH
export PATH
  1. 立即使新的环境变量生效,不用重启电脑:
   source /root/bash.bashrc
  1. 检查是否将路径加入到PATH:
echo $PATH

显示的内容中有/usr/local/arm/bin,说明已经将交叉编译器的路径加入PATH。至此,交叉编译环境安装完成。

  1. 测试是否安装成功
 arm-linux-gcc -v7.

报错的话执行以下命令再试一次

sudo apt-get install lib32z1

参考

https://www.latelee.org/docker/armdocker-cross-comiple-for-arm-on-x86.html
https://www.cnblogs.com/gary-guo/p/6085094.html

  • 4
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值