一、写在前面
本章主要讲述docker中镜像和容器的具体操作。
一、镜像和容器概念及联系
docker的整个生命周期有三部分组成:镜像(image)+容器(container)+仓库(repository)。容器是由镜像实例化而来。也可以说,镜像是文件,容器是进程。容器是基于镜像创建的,即容器中的进程依赖于镜像中的文件。
docker 的镜像概念类似虚拟机虚拟机的镜像。是一个只读的模板,一个独立的文件系统,包括运行容器所需的数据,可以用来创建新的容器。
docker利用容器来运行应用:docker容器是由docker镜像创建的运行实例。docker容器类似虚拟机,可以执行包含启动,停止,删除等。每个容器间是相互隔离的。容器中会运行特定的运用,包含特定应用的代码及所需的依赖文件。可以把容器看作一个简易版的linux环境(包含root用户权限,进程空间,用户空间和网络空间等)和运行在其中的应用程序。
为了镜像的统一管理,有一个镜像仓库的东西,可以通过 push将本地的镜像放到统一的镜像库中保存,可以通过 pull将镜像库中的镜像拉到本地来。
三、镜像的使用和操作
下面的命令涉及的镜像都以tomcat为例,大家可以根据实际情况换成其他的。
# 查看当前镜像列表
docker images
# 在dockerhub上查找镜像
docker search tomcat
# 拉取镜像到本地(默认是官方最新的镜像)
docker pull tomcat
拉取完成后可以通过docker images查看
# 删除镜像
docker rmi 镜像ID或者镜像名称
通过docker images可以查看镜像ID
镜像名称是REPOSITORY:TAG
强制删除镜像添加参数 -f
# 镜像打包后的归档文件输出
docker save -o 文件名.tar 镜像名
镜像为docker images查出来的REPOSITORY:TAG
# 使用tar文件加载镜像
docker load -i 文件名.tar
加载image的命令,覆盖本地原有image
-i:指定导入的文件
load不能对载入的镜像重命名
四、容器使用和操作
# 查看所有的容器 包括停止的
docker ps -a
# 使用镜像创建容器不运行
docker create 镜像名称
# 使用镜像创建容器并后台运行
docker run --name tomcat -d -p 8088:8080 tomcat:9.0.54-jre8-temurin-focal
tomcat:9.0.54-jre8-temurin-focal是镜像名称
--name可以指定容器的名称
d表示后台运行,-p端口映射,前面的8088是外围访问端口(也就是本机ip对外开放的端口),后面8080是docker容器内部的端口
# 启动容器
docker start 容器ID
# 停止容器
docker stop 容器ID
# 暂停容器
docker pause 容器ID
# 移除容器
docker rm 容器ID
# 强制移除容器
docker rm -f 容器ID
# 容器导出
docker export 容器ID或者容器名称> 文件.tar
# 容器导入
docker import tomcat.tar tomcat:v1.0
tomcat.tar是需要导入的tar包文件名
tomcat:v1.0是自定义的镜像名字:版本号
注意事项:docker export import后,导入镜像,docker run启动时的错误,Error response from daemon: No command specified,原因是运行导入的镜像没有带command。
运行命令 docker ps -a 查看导出前的容器的"COMMAND"列, 这个列时容器启动时的命令, 请把它追加到docker run … 后面, 使用"docker ps -a --no-trunc"查看完整的信息
使用下面命令运行import导入镜像创建容器
docker run --name tomcat -d -p 8088:8080 tomcat:v1.0 "catalina.sh run"
--name是指定容器名字
tomcat:v1.0是镜像名字
"catalina.sh run"是执行的command命令