docker
docker介绍
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
容器与虚拟机的区别
容器是进程级别的隔离
虚拟机是操作系统级别的隔离
容器启动时是秒级的
操作系统启动时是分钟级的
docker的三大基本概念
镜像:
镜像就是启动一个容器的模板
容器:
容器就是对外提供服务的进程,也可以说容器就是镜像启动起来的一个实例
仓库:
仓库就是存放镜像的地方
常用镜像仓库
官方仓库:hub.docker.com
阿里云私有仓库:registry.cn-hangzhou.aliyuncs.com
docker镜像相关命令
搜索镜像
# 语法:
docker search [镜像名称]
# 示例
[root@web03 ~]# docker search apache
# 镜像名称 描述信息 收藏个数 是否是官方镜像 自构建镜像
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
httpd The Apache... 4097 [OK]
拉取镜像
# 语法:
docker pull [镜像名称]
# 示例:
[root@web03 ~]# docker pull redis
Using default tag: latest
latest: Pulling from library/redis
# 镜像层
a2abf6c4d29d: Pull complete
c7a4e4382001: Pull complete
4044b9ba67c9: Pull complete
c8388a79482f: Pull complete
413c8bb60be2: Pull complete
1abfd3011519: Pull complete
# 镜像ID号(镜像ID号是唯一的)
Digest: sha256:db485f2e245b5b3329fdc7eff4eb00f913e09d8feb9ca720788059fdc2ed8339
# 镜像下载状态
Status: Downloaded newer image for redis:latest
# 镜像的全称(镜像的tag)
docker.io/library/redis:latest
查看当前系统上有哪些镜像
# 语法:
docker images 或 docker image ls
[root@web03 ~]# docker images
# 镜像名称 镜像版本号 镜像ID(缩写) 镜像生成的时间到现在的时间 镜像大小
REPOSITORY TAG IMAGE ID CREATED SIZE
redis latest 7614ae9453d1 7 months ago 113MB
# 选项
-q:只显示镜像ID
[root@web03 ~]# docker images -q
7614ae9453d1
获取镜像的详细信息
# 语法
docker inspect [镜像名称或镜像ID]
# 选项
-f:格式化输出
[root@web03 ~]# docker inspect -f '{{.Id}}' redis
sha256:7614ae9453d1d87e740a2056257a6de7135c84037c367e1fffa92ae922784631
登录镜像仓库
# 语法
docker login
# 默认情况下,docker login登录的是官方仓库,如果登录其他镜像仓库则需要指定其它镜像仓库的URL链接
# 示例
[root@web03 ~]# docker login registry.cn-hangzhou.aliyuncs.com
Authenticating with existing credentials...
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
# 登录成功后会在用户的家目录下生成该目录
[root@web03 ~]# cat ~/.docker/config.json
{
"auths": {
"registry.cn-hangzhou.aliyuncs.com": {
"auth": "YWxpeXVuNzM2MDI2NzkyODpqaTE4Mjc5MzIyNzky"
}
}
}
# 选项
--username|-u:指定用户名
--password|-p:指定密码
为镜像标签
# 镜像标签的构成
docker.io/library/redis:latest
docker.io:镜像仓库的URl
library:镜像仓库命名空间
redis:镜像名称
latest:镜像版本号
# 为镜像打标签
# 语法:
docker tag [镜像ID] 镜像标签
[root@web03 ~]# docker tag 7614ae9453d1 registry.cn-hangzhou.aliyuncs.com/zhsb/zhzz:v1
[root@web03 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
redis latest 7614ae9453d1 7 months ago 113MB
registry.cn-hangzhou.aliyuncs.com/zhsb/zhzz v1 7614ae9453d1 7 months ago 113MB
镜像上传
# 语法:
docker push [镜像标签]
[root@web03 ~]# docker push registry.cn-hangzhou.aliyuncs.com/zhsb/zhzz:v1
镜像删除
# 语法
docker rmi [镜像名称或者镜像ID]
# 选项
-f:强制删除
# 当有容器正在使用镜像是,强制删除镜像,只能删除镜像的所有tag,不会删除镜像本身
镜像清空
# 语法:
docker image prune
# 选项:
-a:删除所有镜像
查看镜像历史(镜像的构建历史)
# 语法
docker history [镜像ID或镜像名称]
[root@web03 ~]# docker history redis
IMAGE CREATED CREATED BY SIZE COMMENT
7614ae9453d1 7 months ago /bin/sh -c #(nop) CMD ["redis-server"] 0B
<missing> 7 months ago /bin/sh -c #(nop) EXPOSE 6379 0B
保存镜像(commit)
# 保存正在运行的容器直接为镜像
# 语法
docker commit [容器ID|容器名称]
# 示例
docker commit -a "Alvin" -m "镜像" -p 295c18df826e test:v1
[root@web03 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
test v1 a2de4409ad06 About a minute ago 113MB
redis latest 7614ae9453d1 7 months ago 113MB
registry.cn-hangzhou.aliyuncs.com/zhsb/zhzz v1 7614ae9453d1 7 months ago 113MB
保存镜像(import/export)
# 保存正在运行的容器为镜像压缩包
# 保存容器为镜像
# 语法
docker export [容器的ID] > [包名称]
# 示例
[root@web03 ~]# docker export 295c18df826e > test.tar
[root@web03 ~]# ll
total 109924
-rw-------. 1 root root 1283 May 12 19:25 anaconda-ks.cfg
-rw-r--r--. 1 root root 201 May 12 20:38 host_ip.sh
-rw-r--r--. 1 root root 112551424 Aug 1 17:22 test.tar
# 语法
docker import 包名称 自定义镜像名称
# 示例
[root@web03 ~]# docker import test.tar test
sha256:c28570bd75b19462ca4af49bed8ff73d9410021d043fa056a61820fdb8cf86c9
[root@web03 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
test latest c28570bd75b1 8 seconds ago 109MB
redis latest 7614ae9453d1 7 months ago 113MB
registry.cn-hangzhou.aliyuncs.com/zhsb/zhzz v1 7614ae9453d1 7 months ago 113MB
保存镜像(save/load)
# 保存镜像为压缩包
# 语法
docker save 镜像名称|镜像ID > 包名称
# 示例
[root@web03 ~]# docker save c28570bd75b1 > tt1.tar
[root@web03 ~]# ll
total 219848
-rw-------. 1 root root 1283 May 12 19:25 anaconda-ks.cfg
-rw-r--r--. 1 root root 201 May 12 20:38 host_ip.sh
-rw-r--r--. 1 root root 112551424 Aug 1 17:22 test.tar
-rw-r--r--. 1 root root 112558592 Aug 1 17:29 tt1.tar
# 第二种写法
[root@web03 ~]# docker save -o ttw.tar c28570bd75b1
[root@web03 ~]# ll
total 329772
-rw-------. 1 root root 1283 May 12 19:25 anaconda-ks.cfg
-rw-r--r--. 1 root root 201 May 12 20:38 host_ip.sh
-rw-r--r--. 1 root root 112551424 Aug 1 17:22 test.tar
-rw-r--r--. 1 root root 112558592 Aug 1 17:29 tt1.tar
-rw-------. 1 root root 112558592 Aug 1 17:30 ttw.tar
# 导入镜像
# 语法
docker load < 包名称
docker load < tt1.tar
## save/load保存镜像无法自定义镜像名称,save保存镜像时如果使用ID保存则load导入镜像无名称使用名称导出时导入才有名称
保存镜像三种方式的区别
1.export保存的镜像体积要效益save(save保存更加完全,export保存会丢失一些不必要的数据)
2.export可以重命名镜像名称而save不行
3.save可以同时保存多个镜像而export不行