docker学习记录第2节:docker容器&镜像
Docker 镜像就是一个 Linux 的文件系统(Root FileSystem),这个文件系统里面包含可以运 行在 Linux 内核的程序以及相应的数据。
两个特征:
- 镜像是分层(Layer)的:即一个镜像可以多个中间层组成,多个镜像可以共享同一中 间层,我们也可以通过在镜像添加多一层来生成一个新的镜像。
- 镜像是只读的(read-only):镜像在构建完成之后,便不可以再修改,而上面我们所说 的添加一层构建新的镜像,这中间实际是通过创建一个临时的容器,在容器上增加或 删除文件,从而形成新的镜像,因为容器是可以动态改变的。
容器:
类似 linux 系统环境,运行和隔离应用。容器从镜像启动的时候,docker 会在镜像的最上一 层创建一个可写层,镜像本身是只读的,保持不变。容器与镜像的关系,就如同面向编程中 对象与类之间的关系
容器是通过镜像来创建的,必须先有镜像才能创建容器,而生成的容器是一个独立 于宿主机的隔离进程,并且有属于容器自己的网络和命名空间。
仓库:
仓库(Repository)是集中存储镜像的地方,这里有个概念要区分一下,那就是仓库与仓库 服务器(Registry)是两回事,Docker Hub就是 Docker 官方提供的一个仓库服务器,不过其实有时候我们不太需要太过区分这两个概念。
Docker 镜像以及仓库
1.搜索镜像
例:搜索centos镜像
docker search centos
搜索STARS大于3000的mysql镜像
docker search mysql -f STARS=3000
2.下载镜像
docker pull centos
下载指定的tag
docker pull centos:x.x.xxx
镜像结构: registryname/repositoryname/imagename:tagname
例如:docker.io/library/centos:8.3.2011
3.查看本地镜像
docker images
//REPOSITORY TAG IMAGE ID CREATED SIZE
//hello-world latest d1165f221234 4 months 13.3kB
4.docker tag 给镜像打标签
查看语法
docker tag --help
//Usage: docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
例:
给 IMAGE ID 为 300e315adb2f 的镜像打个标签
docker tag 300e315adb2f docker.io/myimages/centos:v1.0.1
然后查看镜像:
docker images
//REPOSITORY TAG IMAGE ID CREATED SIZE
//myimages/centos v1.0.1 300e315adb2f 1 months ago 209MB
给 IMAGE ID 为 300e315adb2f 的镜像重新打个 latest 标签
docker tag 300e315adb2f docker.io/myimages/centos:latest
docker images
//REPOSITORY TAG IMAGE ID CREATED SIZE
//itying/centos latest 300e315adb2f 7 months ago 209MB
//itying/centos v1.0.1 300e315adb2f 7 months ago 209MB
5.删除镜像
docker rmi 删除镜像
查看本地镜像
docker images | grep cento
删除指定镜像
docker rmi docker.io/myimages/centos:latest
//Untagged: itying/centos:latest
这样删除只会删除对应的标签
要删除 imagesID 为 300e315adb2f 的镜像需要通过 id 删除
docker rmi -f 300e315adb2f
//Untagged: myimages/centos:v1.0.1
//Untagged: centos:X.X.XXXX
//....
Docker 容器
类似 linux 系统环境,运行和隔离应用。容器从镜像启动的时候,docker 会在镜像的最上一 层创建一个可写层,镜像本身是只读的,保持不变。容器与镜像的关系,就如同面向编程中 对象与类之间的关系。
查看所有运行的容器
docker ps
查看所有容器
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
docker run + 参数
docker run :创建一个新的容器并运行一个命令
docker run 是日常用的最频繁用的命令之一,同样也是较为复杂的命令之一 命令格式:docker run [OPTIONS] IMAGE [COMMAND] [ARG…]
OPTIONS :选项
- -i :表示启动一个可交互的容器,并持续打开标准输入
- -t: 表示使用终端关联到容器的标准输入输出上
- -d :表示容器放置后台运行
- –rm:退出后即删除容器
- –name :表示定义容器唯一名称
- -p 映射端口
- -v 指定路径挂载数据卷
- -e 运行容器传递环境变量
- IMAGE :表示要运行的镜像
- COMMAND :表示启动容器时要运行的命令
-it 启动一个交互式容器
docker run 启动一个交互式容器在容器内执行/bin/bash 命令
docker run -it myimages/centos /bin/bash
exit: 容器停止并退出
ctrl+p+q:容器不停止退出
–rm 启动一个退出即删除容
创建一个非交互式的容器用完就删除
//docker run -it --rm myimages/centos /bin/bash
//exit
//docker ps -a
启动一个后台容器
开启一个后台交互的容器,注意启动的时候加上-it,如果不加的话 docker 启动容器会自动停 止
docker run -ti -d myimages/centos
exec 进入置为后台已经启动的容器
进入一个容器可以使用 docker exec 或者 docker attac
docker exec
docker exec -ti 93200113fb7e /bin/bash
交互式方式进入容器,容器内执行/bin/bash 命
docker attac
docker attach 93200113fb7e
区别:
docker exec:进入容器开启一个新的终端(常用) 执行 exit 退出的时候不会停止容器
docker attach:进入容器正在执行的终端 exit 退出会停止容器
–name 启动容器的时候指定名称
docker run -it --name MyCentos myimages/centos /bin/bash
start 启动
stop 停止
restart 重启容器
exit 退出容器
docker start XXXXXX
docker stop XXXXX
docker restart XXXXX
docker restart XXXX
退出容器 exit: 容器停止并退出
ctrl+p+q:容器不停止退出
删除容器
docker rm myCentos
docker rm -f myCentos
删除所有容器
docker rm -f $(docker ps -q)
根据容器的状态,删除 Exited 状态的容器
docker rm $(docker ps -qf status=exited)
查看容器操作日志
docker logs : 获取容器的日志
docker logs [OPTIONS] CONTAINER OPTIONS
说明:
-f : 跟踪日志输出
–since :显示某个开始时间的所有日志
-t : 显示时间戳
–tail :仅列出最新 N 条容器
docker cp 实现数据拷贝
docker cp :用于容器与主机之间的数据拷贝。
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH
docker cp [OPTIONS] SRC_PATH CONTAINER:DEST_PATH
例子:
将主机/www/myroot 目录拷贝到容器 5e324512adf1 的/root 目录下。
docker cp /www/myroot/ 5e324512adf1:root
将主机/root/myRoot 目录拷贝到容器 5e324512adf1 中,目录重命名为 wwwroot。
docker cp /www/myroot/ 5e324512adf1:root/wwwroot