Docker镜像管理

一、镜像管理

构建镜像

参考下面 👇

删除镜像

删除本地一个或多个镜像

docker rmi [参数] 镜像1 [镜像2...]

参数说明:

参数

作用

-f

强制删除镜像。

--no-prune

不移除该镜像的过程镜像,默认移除。

# 按镜像ID删除镜像
docker rmi 镜像ID

# 删除所有镜像
docker rmi `docker images ‐q`

给镜像打标签

标记本地镜像,将其归入某一仓库

docker tag 原镜像名称[:原镜像标签] [镜像仓库/][账号/]新镜像名称[:新镜像标签]

docker tag centos centos-vim

列出本地镜像

docker images [参数] [镜像名称[:镜像标签]]

参数说明:

参数

作用

-a

列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层)

–digests

显示镜像的摘要信息

–no-trunc

显示完整的镜像描述

--limit

显示的数量

-f <过滤条件>

列出指定条件的镜像

支持的过滤器:

  • stars 镜像的星数
  • is-automated 是否是自动构建的镜像
  • is-official 是否是官方镜像

--format

格式化输出
模板的有效占位符:

  • .name       镜像名称
  • .Description 镜像描述
  • .StarCount 镜像星数
  • .IsOfficial 官方镜像
  • .IsAutomated 自动构建的镜像

使用 --format 选项时,search 命令将完全按照模板的声明输出数据。如果显示列标题,需要加上 table 伪指令

-q

只显示镜像ID

# 查看本地镜像列表
docker images
REPOSITORY               TAG       IMAGE ID       CREATED        SIZE
redis                    latest    3edbb69f9a49   7 weeks ago    117MB
wurstmeister/kafka       latest    a692873757c0   3 months ago   468MB
dushixiang/kafka-map     latest    e732f1d7306a   3 months ago   295MB
mysql                    5.7.29    5d9483f9a7b2   2 years ago    455MB
wurstmeister/zookeeper   latest    3f43f72cb283   3 years ago    510MB

# 列出本地镜像中REPOSITORY为ubuntu的镜像列表。  
docker images  ubuntu
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              14.04               90d5884b1ee0        9 weeks ago         188 MB
ubuntu              15.10               4e3b13c8a266        3 months ago        136.3 MB

字段名

字段描述

REPOSITORY

镜像名称

TAG

镜像标签

IMAGE ID

镜像ID

CREATED

镜像的创建日期(不是获取该镜像的日期)

SIZE

镜像大小

这些镜像都是存储在Docker宿主机的/var/lib/docker目录下

images子命令

docker image inspect命令 -Docker教程

查看镜像创建历史

docker history [参数] 镜像

参数说明:

参数

作用

-H

以可读的格式打印镜像大小和日期,默认为true

--no-trunc

显示完整的提交记录

-q

仅列出提交记录ID

# 查看本地镜像runoob/ubuntu:v3的创建历史
docker history runoob/ubuntu:v3

IMAGE             CREATED           CREATED BY                                      SIZE      COMMENT
4e3b13c8a266      3 months ago      /bin/sh -c #(nop) CMD ["/bin/bash"]             0 B                 
<missing>         3 months ago      /bin/sh -c sed -i 's/^#\s*\(deb.*universe\)$/   1.863 kB            
<missing>         3 months ago      /bin/sh -c set -xe   && echo '#!/bin/sh' > /u   701 B               
<missing>         3 months ago      /bin/sh -c #(nop) ADD file:43cb048516c6b80f22   136.3 MB

导出镜像

将指定镜像保存成 tar 归档文件

docker save [参数] 镜像1 [镜像2...]

参数说明:

参数

作用

-o

输出到的文件

runoob@runoob:~$ docker save -o my_ubuntu_v3.tar runoob/ubuntu:v3
runoob@runoob:~$ ll my_ubuntu_v3.tar
-rw------- 1 runoob runoob 142102016 Jul 11 01:37 my_ubuntu_v3.ta

加载镜像

导入使用 docker save 命令导出的镜像

docker load [参数]

参数说明:

参数

作用

--input 或 -i

指定导入的文件,代替 STDIN

--quiet 或 -q

精简输出信息

# 导入本地镜像到服务器的docker中
docker load -i d:/www/centos.tar

导入镜像

从归档文件中创建镜像

docker import [参数] 文件路径|文件外链|- [镜像名称[:镜像标签]]

参数说明:

参数

作用

-c

应用docker 指令创建镜像

-m

提交时的说明文字

# 从镜像归档文件my_ubuntu_v3.tar创建镜像,命名为runoob/ubuntu:v4
runoob@runoob:~$ docker import  my_ubuntu_v3.tar runoob/ubuntu:v4  
sha256:63ce4a6d6bc3fabb95dbd6c561404a309b7bdfc4e21c1d59fe9fe4299cbfea39
runoob@runoob:~$ docker images runoob/ubuntu:v4
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
runoob/ubuntu       v4                  63ce4a6d6bc3        20 seconds ago      142.1 MB

二、构建镜像(Dockerfile)

什么是Dockerfile

Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个

新的镜像

  • 对于开发人员:可以为开发团队提供一个完全一致的开发环境;
  • 对于测试人员:可以直接拿开发时所构建的镜像或者通过Dockerfile文件构建一个新的镜像开始工作了;
  • 对于运维人员:在部署时,可以实现应用的无缝移植。

Dockerfile 常用命令

指定

指定说明

FROM image_name:tag

一般需要一个非常基础的镜像来做构建

RUN command

编译镜像时运行的脚本,可以写多条

ENV key value

设置环境变量,可以设置多个

CMD

设置容器的启动命令

ENTRYPOINT

设置容器的入口程序

ADD source_dir/file des_dir/file

将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后自动解压

COPY source_dir/file des_dir/file

与ADD相似,但是不会自动解压

WORKDIR path_dir

设置工作目录

ARG

设置编译镜像时加入的参数

VOLUMN

设置容器的挂载卷

EXPOSE 端口号

向外开放一个端口号

看了这么多指令,感觉有点懵?别担心,通过一个实例来熟悉它们。这是一个 Dockerfile:

FROM centos:7
COPY nginx.repo /etc/yum.repos.d/nginx.repo
RUN yum install -y nginx
EXPOSE 80
ENV HOST=mynginx
CMD ["nginx","-g","daemon off;"]

逐行分析一下上述的 Dockerfile。

  • 第一行表示我要基于 centos:7 这个镜像来构建自定义镜像。这里需要注意,每个 Dockerfile 的第一行除了注释都必须以 FROM 开头。
  • 第二行表示拷贝本地文件 nginx.repo 文件到容器内的 /etc/yum.repos.d 目录下。这里拷贝 nginx.repo 文件是为了添加 nginx 的安装源。
  • 第三行表示在容器内运行yum install -y nginx命令,安装 nginx 服务到容器内,执行完第三行命令,容器内的 nginx 已经安装完成。
  • 第四行声明容器内业务(nginx)使用 80 端口对外提供服务。
  • 第五行定义容器启动时的环境变量 HOST=mynginx,容器启动后可以获取到环境变量 HOST 的值为 mynginx。
  • 第六行定义容器的启动命令,命令格式为 json 数组。这里设置了容器的启动命令为 nginx ,并且添加了 nginx 的启动参数 -g ‘daemon off;‘ ,使得 nginx 以前台的方式启动。

上面这个 Dockerfile 的例子基本涵盖了常用的镜像构建指令

构建镜像

Dockerfile自动构建docker镜像

Spring Boot项目
构建镜像

① 将项目打成jar包

项目jar包名称为:demo-project.jar

② 上传Jar包到docker服务器

# 创建项目目录
mkdir -p /apps/server/demo-project

# 上传jar包到项目目录下

# 创建日志文件目录
mkdir -p /apps/server/demo-project/logs

# 创建项目存储目录,例如项目相关的一些图片模板等,可以存放在该目录下
mkdir -p /apps/server/demo-project/storage

③ 创建Dockerfile文件

注意:Dockerfile只能读取到所在的目录及所在目录的子级目录,jar包存放的位置最好和Dockerfile同一目录

rm -rf /apps/server/demo-project/Dockerfile
touch /apps/server/demo-project/Dockerfile

tee /apps/server/demo-project/Dockerfile <<-'EOF'

# 该镜像需要依赖的基础镜像
FROM openjdk:8
# 指定维护者的名字
MAINTAINER hbsc

# 设置时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

# 工作目录
ENV WORCSPACES="/apps/server/demo-project"

# 设置工作目录
WORKDIR $WORCSPACES
# 将jar包复制到工作目录下
ADD demo-project.jar $WORCSPACES
# jar包名字改查app
RUN mv demo-project.jar app.jar

# 指定docker容器启动时运行jar包
ENV PARAMS=""
ENTRYPOINT ["sh","-c","java -jar $JAVA_OPTS $WORCSPACES/app.jar $PARAMS"]

EOF

④ 执行命令构建镜像

# 进入项目目录
cd /apps/server/demo-project

# 执行构建命令,构建完成后通过docker images查看镜像列表,验证是否构建成功了
docker build -t aliyun/demo-project:0.1 .

创建和运行容器
# 指定项目运行的环境及容器内的时区
docker run --name demo-project-0.1 -p 8082:8082 \
  -v /apps/server/demo-project/logs:/apps/server/demo-project/logs \
  -v /apps/server/demo-project/storage:/apps/server/demo-project/storage \
	-e TZ=Asia/Shanghai -e JAVA_OPTS='-Dspring.profiles.active=test' \
	-d aliyun/demo-project:0.1

注意:项目的日志路径你需要跟你实际配置的来,我在项目中配置的日志路径就是/apps/server/demo-project/logs/out.log

⑤ 放开防火墙,使其它电脑也能访问8082

firewall-cmd --permanent --add-port=8082/tcp 
firewall-cmd --reload

连接容器
docker exec -i -t demo-project-0.1 /bin/bash  

查看日志

① 容器日志

# 实时查看日志
docker logs -ft demo-project-0.1

# 查看最近 n 行日志
docker logs -t --tail 10 demo-project-0.1

② 应用日志

因为之前创建容器时,已经将容器的日志目录挂载到了宿主机的/apps/server/demo-project/logs目录下,所以直接可以访问宿主机/apps/server/demo-project/logs目录下的日志文件

# 实时查看文件内容
tail -f /apps/server/demo-project/logs/out.log

# 日志搜索 less -mp/?'需要搜索的内容' 文件
less -mp/?'Exception' /apps/server/demo-project/logs/out.log

卸载镜像及容器
docker stop demo-project-0.1
docker rm demo-project-0.1
docker rmi aliyun/demo-project:0.1

Dockerfile文件示例

jar包项目

war包项目
# 使用 Tomcat 8.5 作为基础镜像
FROM tomcat:8.5-jdk8

# 指定维护者的名字
MAINTAINER hy

# 切换到Tomcat的工作目录
WORKDIR /usr/local/tomcat

# 设置时区
ENV TZ=Asia/Shanghai LANG=C.UTF-8 LANGUAGE=C.UTF-8 LC_ALL=C.UTF-8
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

# 将 WAR 包复制到 Tomcat 的 webapps 目录中
COPY target/*.war /usr/local/tomcat/webapps/ROOT.war
#COPY $APP_DIR/target/*.war /usr/local/tomcat/webapps/ROOT.war

# 暴露 Tomcat 的 HTTP 端口(默认为 8080)
EXPOSE 8080

# 启动 Tomcat 服务器
CMD ["catalina.sh", "run"]

html项目
# 使用 nginx 作为基础镜像
FROM nginx:1.20.0-alpine

# 指定维护者的名字
MAINTAINER hy

# 切换到nginx的工作目录
WORKDIR /usr/share/nginx

# 复制静态文件到 nginx的 html 目录中
COPY dist /usr/share/nginx/html
#RUN sed -i "30a server_tokens off;" /etc/nginx/nginx.conf

# 暴露 nginx 的 HTTP 端口(默认为 80)
EXPOSE 80

  • 8
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值