- 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04
就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。 - 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
- 仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。
跟据系统版本和CPU架构选择适合自己的教程,我参考Ubuntu18.04 arm 安装Docker
卸载历史版本
sudo apt-get remove docker docker-engine docker.io containerd runc
安装依赖
sudo apt-get update sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release
添加Docker官方GPG密匙
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
设置稳定仓库 (arm64) 此处将download.docker.com 更换为了mirrors.ustc.edu.cn/docker-ce
解决了doceker-ce镜像下载太慢导致多次下载不成功的问题!
echo "deb [arch=arm64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
安装
sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io
测试运行
sudo docker run hello-world
测试运行是虽然出现了hello world,但是上面有一段提示:
Unable to find image 'hello-world:latest' locally docker: Error response from daemon: Get https://registry-1.docker.io/v2/: x509: certificate is valid for www.doctorcom.com, not registry-1.docker.io. See 'docker run --help'.
我参考这边blogs解决了这个问题:docker安装踩坑:Unable to find image ‘hello-world:latest‘ locally
解决办法:
切换国内阿里云镜像,创建daemon.json文件
vim /etc/docker/daemon.json
在后面添加
{
"registry-mirrors": ["https://alzgoonw.mirror.aliyuncs.com"]
}
重启docker
systemctl restart docker systemctl status docker
这样能解决Unable to find image ‘hello-world:latest‘ locally的bug
三、docker指令查看docker指令帮助
docker
查看docker版本
docker -v
启动docker
sudo service docker start
停止docker
sudo service docker stop
重启docker
sudo service docker restart
创建docker组
docker groupadd docker
将用户加入docker group,${USER}可以为系统任意用户名
sudo gpass -a ${USER} docker
重启docker服务,然后更新用户组
newgrp docker
经过上述操作就可以用${USER}操作docker,不必每次在指令前添加sudo
四、镜像image指令1、管理和使用本地 Docker 主机镜像
2、创建镜像
列出本地主机上的镜像
nvidia@nvidia-master:~$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu latest 38af2b009885 2 hours ago 69.2MB hello-world latest 46331d942d63 4 weeks ago 9.14kB
参数说明:
REPOSITORY:表示镜像的仓库源
TAG:镜像的标签
IMAGE ID:镜像ID
CREATED:镜像创建时间
SIZE:镜像大小
同一仓库源可以有多个 TAG,代表这个仓库源的不同个版本,如 ubuntu 仓库源里,有 15.10、14.04 等多个不同的版本,我们使用 REPOSITORY:TAG 来定义不同的镜像
拉取ubuntu的image:注意,如果不指定版本,pull到的image TAG为latest即最新版本。
docker pull ubuntu
获取指定版本image
docker pull ubuntu:18.04
nvidia@nvidia-master:~$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu latest 38af2b009885 2 hours ago 69.2MB ubuntu 18.04 be0b1fd80f43 2 hours ago 56.7MB hello-world latest 46331d942d63 4 weeks ago 9.14kB
可以看到多了一个TAG为18.04的ubuntu image
查看可以pull的image
nvidia@nvidia-master:~$ docker search ubuntu NAME DESCRIPTION STARS OFFICIAL AUTOMATED ubuntu Ubuntu is a Debian-based Linux operating sys… 14103 [OK] websphere-liberty WebSphere Liberty multi-architecture images … 283 [OK] ubuntu-upstart DEPRECATED, as is Upstart (find other proces… 112 [OK] neurodebian NeuroDebian provides neuroscience research s… 88 [OK] open-liberty Open Liberty multi-architecture images based… 52 [OK] ubuntu-debootstrap DEPRECATED; use "ubuntu" instead 46 [OK]
参数说明:
NAME: 镜像仓库源的名称
DESCRIPTION: 镜像的描述
OFFICIAL: 是否 docker 官方发布
stars: 类似 Github 里面的 star,表示点赞、喜欢的意思。
AUTOMATED: 自动构建
删除镜像
docker rmi hello-world
如果当前有用该镜像生成的容器,会报bug
Error response from daemon: conflict: unable to remove repository reference "hello-world" (must force) - container 687920e38e31 is using its referenced image 46331d942d63 # 来自守护进程的错误响应:冲突:无法删除46331d942d63(必须强制) - 映像在多个存储库中被引用
两种办法,一种是先删除相应的container
nvidia@nvidia-master:~$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4463bd4f377d ubuntu:18.04 "/bin/bash" 20 minutes ago Exited (0) 20 minutes ago youthful_payne 78b8521fa098 ubuntu "/bin/bash" About an hour ago Up About an hour dreamy_morse 627a12a07819 hello-world "/hello" 17 hours ago Exited (0) 17 hours ago frosty_saha
nvidia@nvidia-master:~$ docker rm -f 627 627
nvidia@nvidia-master:~$ docker rmi hello-world Untagged: hello-world:latest Untagged: hello-world@sha256:10d7d58d5ebd2a652f4d93fdd86da8f265f5318c6a73cc5b6a9798ff6d2b2e67 Deleted: sha256:46331d942d6350436f64e614d75725f6de3bb5c63e266e236e04389820a234c4 Deleted: sha256:efb53921da3394806160641b72a2cbd34ca1a9a8345ac670a85a04ad3d0e3507
第二种办法,强制删除
nvidia@nvidia-master:~$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu latest 38af2b009885 2 hours ago 69.2MB ubuntu 18.04 be0b1fd80f43 2 hours ago 56.7MB nvidia@nvidia-master:~$ docker image rmi -f be0 Untagged: ubuntu:18.04 Untagged: ubuntu@sha256:43d8a96ef9acfbec2da181adc3b72ff1f30a555716c717e4a722b5031fa3d83e Deleted: sha256:be0b1fd80f43f89668ff30071f506582440ac60fdcbe254b5f22a63da42ab3b2 nvidia@nvidia-master:~$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu latest 38af2b009885 2 hours ago 69.2MB五、容器container指令
启动container
docker start containerID
后台运行container
docker run -itd --name ubuntu-test ubuntu /bin/bash
新建container
docker run -it ubuntu /bin/bash
参数说明:
-i: 交互式操作。
-t: 终端。
ubuntu: 代表ubuntu镜像。
/bin/bash:放在镜像名后的是命令,建立一个交互式 Shell,因此用的是 /bin/bash。
退出container
exit
停止container
docker stop containerID
查看所有container
docker ps -a
进入容器,两种方法:attach和exec,如果希望退出容器后,容器后台运行,用exec
docker attach:退出容器,容器停止
docker attach containerID
docker exec:退出容器,容器不停止
docker exec -it containerID /bin/bash
删除容器
docker rm -f containerID
导入容器这块暂时没用到,用到再回来添加。
docker export 1e560fca3906 > ubuntu.tar



