一、写在前面

本章主要讲述docker中镜像和容器的具体操作。

一、镜像和容器概念及联系

docker的整个生命周期有三部分组成:镜像(image)+容器(container)+仓库(repository)。容器是由镜像实例化而来。也可以说,镜像是文件,容器是进程。容器是基于镜像创建的,即容器中的进程依赖于镜像中的文件。


docker 的镜像概念类似虚拟机虚拟机的镜像。是一个只读的模板,一个独立的文件系统,包括运行容器所需的数据,可以用来创建新的容器。


docker利用容器来运行应用:docker容器是由docker镜像创建的运行实例。docker容器类似虚拟机,可以执行包含启动,停止,删除等。每个容器间是相互隔离的。容器中会运行特定的运用,包含特定应用的代码及所需的依赖文件。可以把容器看作一个简易版的linux环境(包含root用户权限,进程空间,用户空间和网络空间等)和运行在其中的应用程序。


为了镜像的统一管理,有一个镜像仓库的东西,可以通过 push将本地的镜像放到统一的镜像库中保存,可以通过 pull将镜像库中的镜像拉到本地来。

三、镜像的使用和操作

下面的命令涉及的镜像都以tomcat为例,大家可以根据实际情况换成其他的。

# 查看当前镜像列表

docker images

docker :ro docker容器和镜像_docker :ro

 # 在dockerhub上查找镜像

docker search tomcat

docker :ro docker容器和镜像_容器_02

# 拉取镜像到本地(默认是官方最新的镜像) 

docker pull tomcat

拉取完成后可以通过docker images查看

docker :ro docker容器和镜像_docker :ro_03

 # 删除镜像

docker rmi 镜像ID或者镜像名称

通过docker images可以查看镜像ID

镜像名称是REPOSITORY:TAG

强制删除镜像添加参数 -f

docker :ro docker容器和镜像_tomcat_04

 # 镜像打包后的归档文件输出

docker save -o  文件名.tar   镜像名

镜像为docker images查出来的REPOSITORY:TAG

docker :ro docker容器和镜像_tomcat_05

# 使用tar文件加载镜像

docker load -i 文件名.tar

加载image的命令,覆盖本地原有image

-i:指定导入的文件

load不能对载入的镜像重命名

docker :ro docker容器和镜像_容器_06

 四、容器使用和操作

# 查看所有的容器  包括停止的

docker ps -a

docker :ro docker容器和镜像_centos_07

 

# 使用镜像创建容器不运行

docker create 镜像名称

docker :ro docker容器和镜像_容器_08

 # 使用镜像创建容器并后台运行

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 :ro docker容器和镜像_docker :ro_09

# 启动容器 

docker start  容器ID

# 停止容器

docker stop  容器ID

# 暂停容器

docker pause  容器ID

# 移除容器

docker rm  容器ID

# 强制移除容器

docker rm  -f 容器ID

# 容器导出 

docker export 容器ID或者容器名称> 文件.tar

docker :ro docker容器和镜像_docker_10

# 容器导入

docker import tomcat.tar tomcat:v1.0

tomcat.tar是需要导入的tar包文件名

tomcat:v1.0是自定义的镜像名字:版本号

docker :ro docker容器和镜像_docker :ro_11

 

注意事项:docker export import后,导入镜像,docker run启动时的错误,Error response from daemon: No command specified,原因是运行导入的镜像没有带command。


运行命令 docker ps -a 查看导出前的容器的"COMMAND"列, 这个列时容器启动时的命令, 请把它追加到docker run … 后面, 使用"docker ps -a --no-trunc"查看完整的信息

docker :ro docker容器和镜像_centos_12

 使用下面命令运行import导入镜像创建容器

docker run --name tomcat -d -p 8088:8080 tomcat:v1.0 "catalina.sh run"

--name是指定容器名字

tomcat:v1.0是镜像名字

"catalina.sh run"是执行的command命令