镜像和容器的区别
镜像有分层堆叠的概念,每一层(layer)都是一个只读的层。
容器也有分层堆叠的概念,与镜像的唯一区别在于容器的最上面的那一层是可读写的。
所以,容器 = 镜像 + 读写层。
镜像的使用
1.查询镜像
[root@docker ~]# docker search nginx
2.获取镜像
[root@docker ~]# docker pull nginx
3.查看镜像
[root@docker ~]# docker images
4.删除镜像
[root@docker ~]# docker image rm nginx
5.镜像历史
[root@docker ~]# docker history nginx:latest
6.查看镜像元数据信息
[root@docker ~]# docker inspect nginx:latest
操作容器
1.新建并启动容器
[root@docker ~]# docker run --name nginxweb -d -p 9527:80 -v /home/nginx:/etc/nginx -v /home/nginx/html:/usr/share/nginx/html nginx
参数
--name 容器名字
-d 后台运行
-p 端口映射
-v 文件挂载
2.新建一个容器但不启动它
[root@docker ~]# docker create --name nginxweb -d -p 9527:80 -v /home/nginx:/etc/nginx -v /home/nginx/html:/usr/share/nginx/html nginx
3.开始一个终止状态的容器
[root@docker ~]# docker start nginxweb
4.停止一个运行状态的容器
[root@docker ~]# docker stop nginxweb
5.查看所有运行状态的容器
[root@docker ~]# docker ps
6.查看所有运行状态以及终止状态的容器
[root@docker ~]# docker ps -a
7.删除容器
[root@docker ~]# docker rm nginxweb
8.进入容器
[root@docker ~]# docker attach nginxweb
[root@docker ~]# docker exec -it nginxweb /bin/bash
这两个命令都可进入容器,区别:attach进入容器后再退出容器,容器会终止运行
建议使用 docker exec -it 的方式进入容器
9.查看容器内文件变动情况
[root@docker ~]# docker diff nginxweb
10.复制文件
[root@docker ~]# docker cp 容器id:路径 ./
11.查看所有运行容器的IP地址
[root@docker ~]# docker inspect --format='{{.Name}} - {{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -q)
镜像的导入与导出
1.容器导出(export)、导入(import)
[root@docker ~]# docker export nginxweb > nginxweb.tar
[root@docker ~]# docker import nginxweb.tar nginx:bak
2.镜像导出(save)、导入(load)
[root@docker ~]# docker save > nginx.tar nginx:latest
[root@docker ~]# docker load < nginx.tar
3.两者区别:
export是从容器中导出,save是从镜像中导出;
export导出的文件再import回去,会丢失镜像历史,无法回滚;而save导出的文件再load回去时,可以保存完整的镜像历史。