Docker基础操作

类似于数据库,有增删改查,docker镜像也有这些操作。

镜像获取

1
docker pull ubuntu

这个命令可以把镜像从仓库中下载下来,那仓库的地址又是哪个呢?
默认地址是Docker Hub仓库,如果有需要修改仓库地址的需求,可以在/etc/docker/下面新建daemon.json文件,其内容变更如下:

1
2
3
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}

Note:网址仅是示例。

上述pull命令拉下来的镜像默认是latest标签的镜像,如果想下载其他标签,例如14.04的镜像,可以使用以下命令:

1
docker pull ubuntu:14.04

镜像查看

docker images可以查看本地所有的镜像。
以下是输出:

1
2
3
4
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu 14.04 7e4b16ae8b23 10 days ago 188MB
ubuntu latest 1d9c17228a9e 10 days ago 86.7MB
ubuntu ttag 1d9c17228a9e 10 days ago 86.7MB

IMAGE ID唯一标识了镜像,TAG是标签,其他字段含义均符合字段名含义。这里有2个镜像的IMAGE ID是一样的,这是因为我刚刚通过命令为其中一个镜像打上了标签。打上标签,看着是2个镜像,其实底层是一个镜像。删除的时候,也仅仅是删除tag而已。直到该镜像的最后一个tag删除时,该镜像才会被删除。

镜像删除

2种删除方式。

根据tag删除。

1
docker rmi xxxxxx

其中xxxxx可以为标签或者ID

根据ID删除

使用docker rmi删除镜像时,会先尝试删除该镜像的所有标签,然后删除该镜像。
NOTE:当有基于该镜像创建的容器存在时,该镜像是无法被删除的,无论该容器是什么状态。
删除容器的命令:

1
docker rm xxxxx

其中xxxx是容器的id

创建容器

基于已有镜像的容器创建

1
2
3
docker run -it ubuntu:latest /bin/bash
touch test
exit

查看容器id

1
docker ps -a

找到id,这里为9xx937d9adf,然后根据这个容器创建一个新的镜像。

1
docker commit -m "create a new image " -a "volcanno" 9xx937d9adf test

现在就已经创建出来一个新的镜像,docker images查看:

1
2
3
4
5
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
test latest 17b8285f6baf 5 minutes ago 86.7MB
ubuntu 14.04 7e4b16ae8b23 10 days ago 188MB
ubuntu latest 1d9c17228a9e 10 days ago 86.7MB
ubuntu ttag 1d9c17228a9e 10 days ago 86.7MB

可以看到test仓库有了一个新镜像。

根据模板创建镜像

根据模板创建镜像,指的是根据操作系统模板文件在本地仓库导入一个镜像:

1
cat ubuntu-14.04-x86_64-minimal.tar.gz|docker import - ubuntu:14.04

镜像存入存出

存入存出指的是可以将镜像从本地文件的形式导入本地镜像库,或者从本地镜像库导出为本地文件,这样可以文件的形式进行迁移。

镜像导出

1
docker save -o ubuntu_14.04.tar ubuntu:latest

上面命令的含义是将本地镜像库中ubuntu:latest导出到本地,本地名字为ubuntu_14.04.tar

镜像导入

1
docker load < ubuntu_14.04.tar

镜像上传

从本地仓库上传到DockerHub官方仓库。

1
docker push ubuntu:latest