安装docker
卸载旧版本
1 | sudo apt-get remove docker docker-engine docker.io containerd runc |
安装新版本
设置仓库源
- 更新apt包索引,安装依赖
1
2sudo apt-get update
sudo apt-get install ca-certificates curl gnupg lsb-release
添加docker官方GPG key
1
2sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://mirrors.huaweicloud.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
设置仓库源
1
2
3echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.cloud.tencent.com/docker-ce/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
安装docker引擎
安装最新版本
1
2sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin
至此,你已经完成了docker最新稳定版本的安装!!!
选择安装指定版本
1
2
3
4
5
6
7
8
9
101. 列出可用版本
$ apt-cache madison docker-ce | awk '{ print $3 }'
5:20.10.16~3-0~ubuntu-jammy
5:20.10.15~3-0~ubuntu-jammy
5:20.10.14~3-0~ubuntu-jammy
5:20.10.13~3-0~ubuntu-jammy
2. 安装指定版本
$ VERSION_STRING=5:20.10.13~3-0~ubuntu-jammy
$ sudo apt-get install docker-ce=$VERSION_STRING docker-ce-cli=$VERSION_STRING containerd.io docker-compose-plugin
设置非root用户不使用sudo
1 | usermod -a -G docker username |
一些基本指令
合并不同平台容器到同一个tag
1 | docker manifest create image:tag image1:tag1 image2:tag2 |
拉取镜像
1 | docker pull ubuntu:20.04 |
从远程拉取名仓库为ubuntu的,tag为20.04的镜像到本地
运行容器
我们前面已经拉取了一个ubuntu 20.04的基础容器,现在我们可以试着运行这个容器。进入容器并执行bash命令。
1 | docker run --name=network_test --net=host -it ubuntu:20.04 bash |
- –name 给即将运行的容器命名一个别名
- –net 这个参数默认是使用doker的内置网桥,这里使用host说明容器直接使用主机网络
- -it 这里-i表示标准输出,-t表示生成tty
- bash 是表示进入容器之后需要运行的指令
重新运行容器
实际操作里面,我们时常想重新进入容器。比如
1 | ╰─ docker ps -l |
从上面的信息看到,这个容器执行指令bash,在2分钟之前退出了。可是使用以下指令重启容器
1 | docker start network_test |
容器启动之后,我们可以使用docker attach指令重新进入终端,如:
1 | docker attach network_test |
但是,有时候可能需要加入多个终端,所以可以使用docker exec来实现
1 | docker exec -it network_test bash |
文件夹映射
在实际的开发过程中,我们经常需要共享主机和docker的文件。所以我们可以把主机某些文件夹映射到docker的目录下
1 | docker run -it -v /opt/kaylor/:/root/data/ --name=map_test ubuntu:20.04 bash |
-v 主机文件夹路径:docker的文件夹映射路径
保存与加载
1 | docker save -o rk3588_docker.tar kaylor/rk3588_dev_env:latest |
将本机的名为kaylor/rk3588_dev_env,tag为latest的镜像保存输出为rk3588_docker.tar
1 | docker load --input rk3588_docker.tar |
这里注意,加载的tar包需要时通过docker save保存的,通过docker save的镜像会带有原始的提交信息。
构建镜像
通常我们会在容器中添加了我们的一些自定义的操作,我们可以通过构建镜像的方式,把容器保存成镜像。
比如:
1 | docker container ps -a ##查看所有容器的信息 |
上面的命令我们知道容器的ID是05cd5820058b,下面的命令是将这个容器提交生成image
-a 是添加作者信息
-m 是添加commit的信息
kaylor/rk3588_dev_env:v1 镜像名为kaylor/rk3588_dev_env tag为v1
1 | docker commit -a "kaylorchen" -m "add libsystemd-dev" 05cd5820058b kaylor/rk3588_dev_env:v1 |
使用主机GPU
查看 -gpus 参数是否安装成功
1
docker run --help | grep -i gpus
运行容器
1
2docker run --gpus all --name container_name -d -t image_id
docker run --gpus="1" images_id
创建自定义子网使用固定IP
1 | docker network create --subnet=192.168.77.0/24 kaylor_bridge |
跨平台使用
- 使用特权容器
windows和mac使用的是桌面版,默认已经启动了binfmt_misc, 我们使用的是Linux,可以手动启动该功能,但是我们有更好的方法,就是启动一个特权容器,指令如下:
1 | docker run --rm --privileged docker/binfmt:a7996909642ee92942dcd6cff44b9b95f08dad64 |
使用指令ls -al /proc/sys/fs/binfmt_misc,看看是否有qemu字样的输出。
使用 docker buildx ls查看构建器支持的CPU架构。
安装qemu包
1
sudo apt install qemu-user-static
构建树莓派交叉编译镜像
1 | #下载官方镜像 |
退出容器之后,可以使用docker start ID 和 docker attach ID 重新进入
我已经设置好了基础仓库,可以直接使用docker pull kaylor/rpi-env拉取
共享宿主机文件夹
/home/kaylor/aaa –> /share
1 | docker run -it -v /home/kaylor/aaa:/share kaylor/rpi-env:20210507 /bin/bash |
从根文件系统构建docker镜像
参考链接 https://docs.docker.com/engine/reference/commandline/import/
1 | cd rootfs_path |