Docker镜像、容器的基本操作
Docker Hub是由Docker公司负责维护的公共注册中心,包含大量的容器镜像。
Docker工具默认从这个公共镜像库下载镜像。https://hub.docker.com/explore。
镜像不是一个单一的文件,而是有多层构成。我们可以通过docker history <ID/NAME> 查看镜像中各层内容及大小,每层对应着Dockerfile中的一条指令。Docker镜像默认存储在/var/lib/docker/<storage-driver>目录中。
容器其实是在镜像的最上面加了一层读写层,在运行容器里做的任何文件改动,都会写到这个读写层。如果容器删除了,最上面的读写层也就删除了,改动也就丢失了。Docker使用存储驱动管理镜像每层内容及可读写层的容器层。
docker镜像常用的命令
# 搜索镜像:docker search <image>
例:docker search centos
# 下载镜像:docker pull <image>
docker pull centos:7.6.1810(没有指定版本,默认会下载最新版)
# 查看镜像:docker images
# 删除镜像:docker rmi 镜像 + ID
docker rmi 镜像名称 + 版本号
docker rmi 例子:docker image rmi centos:latest
# 导出镜像:
docker save 例子:docker image save centos > docker-centos7.6.tar.gz
简写方法:docker save centos > docker-centos7.6.tar.gz
# 导入镜像:
docker load 例子:docker image load -i docker-centos7.4.tar.gz
简写方法:docker load -i docker-centos7.4.tar.gz
# 上传镜像:docker push NAME[:TAG]
可将自制的镜像,上传至自己的dockerhub账户
docker容器日常管理命令
# 创建容器:
docker run -it centos:7.6.1810 /bin/bash (默认启动环境为/bin/bash)
docker run -d nginx (启动一个镜像在后台运行)
docker run --name centos7.6 -it centos:7.6.1810 /bin/bash
-it: 进入了命令交互界面
-d: 后台运行
-h: 指定容器的主机名
--name: 指定容器名称(所指定的名称不能在同一个容器中重复使用)
--cpus: 指定CPU数量
--memory: 限定内存的大小
--restart=always: 指宿主机在重启docker服务时,容器也自动重启docker容器
例如:启动一个容器: docker run -d --restart=always centos:6.9 重启docker服务: systemctl restart docker #通常情况下,启动一个容器不添加 --restart=always时,重启docker服务 (systemctl restart docker)后,
后台运行的docker容器处于停止状态 (Exited);
在启动容器时,添加--restart=always,重启docker服务后,则后台 容运行的容器自动重启,处于(up)状态。
例如: docker run --name nginx nginx
docker stop nginx 将指定名称为nginx的镜像停止
docker run --name nginx nginx 再次指定同样的名称启动nginx容器就会报错哦!!
需要更改指定的容器名称,不能重复使用
# 列出容器: docker ps
-a:显示所有的容器,包括未运行的
-l: 显示最近创建的容器
-n:列出最近创建的n个容器
-s:显示总的文件大小
# 停止容器:docker stop + 容器名称 或 ID
# 杀死容器:docker kill container_name
# 删除docker容器:docker rm + 容器名称 或 ID
(删除docker容器之前需要先停止容器,或者使用强制删除docker rm -f + 容器名称 或 ID)
# 批量删除容器: docker rm -f `docker ps -a -q` #更加简单
for i in `docker ps -a |grep -i exit|sed '1d' |awk '{print $1}'`;do docker rm $i;done
# 进入容器方法一: docker attach + 容器名称 或 ID
例:docker attach nginx (快捷键Ctrl + p + q 可是实现退出容器,使容器继续在后台运行。)
# 进入容器方法二: docker exec -it + 容器名字 或 ID /bin/bash
例:docker exec -it nginx
推荐使用exec方式:exec使用时会重新分配一个终端,不会影响容器的原有状态,反之attach不会重新分配终端。
docker的本质是:在隔离的环境运行的一个进程,所以docker容器内的第一个进程必须一直处于前台运行的状态(必须夯住),
否则这个容器,就会处于退出状态!
附加:
docker image 镜像管理指令:
docker 容器常用选项