目录
- 前言
- 在ubuntu中一键安装docker
- 在docker中安装ubuntu
- docker免sudo
- docker容器操作
- 启动容器
- 启动已停止运行的容器
- 查看容器
- 进入容器
- 重新启动停止的容器
- 多个终端进入容器
- 导出和导入容器
- 删除容器
- 容器挂载
- docker 镜像
- 列出镜像列表
- 删除镜像
- 设置镜像标签
- 基于已有的容器创建自己需要的image
- 导出镜像
- 在x86上交叉编译arm/ubuntu
- 使用模拟器
- 修改bash文件
- 参考
前言
在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文件
- 下载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
- 解压 arm-linux-gcc-3.4.1.tar.bz2
tar -jxvf arm-linux-gcc-3.4.1.tar.bz2
- 解压过程需要一段时间,解压后的文件形成了 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
- 立即使新的环境变量生效,不用重启电脑:
source /root/bash.bashrc
- 检查是否将路径加入到PATH:
echo $PATH
显示的内容中有/usr/local/arm/bin,说明已经将交叉编译器的路径加入PATH。至此,交叉编译环境安装完成。
- 测试是否安装成功
arm-linux-gcc -v7.
报错的话执行以下命令再试一次
sudo apt-get install lib32z1
参考
https://www.latelee.org/docker/armdocker-cross-comiple-for-arm-on-x86.htmlhttps://www.cnblogs.com/gary-guo/p/6085094.html