Docker镜像操作

镜像名称

镜名称一般分两部分组成:[repository]:[tag]

在没有指定tag时,默认是latest,代表最新版本的镜像。

image

这里的mysql就是repository5.7就是tag,合一起就是镜像名称,代表5.7版本的MySQL镜像。

镜像命令

帮助文档

# 查看帮助文档,会列出docker所有的命令
docker --help
# 查看某个命令的详解
docker [命令] --help

镜像操作命令

# 构建镜像
docker build
docker build [OPTIONS] PATH | URL |# 查看镜像
docker images
docker images [OPTIONS] [REPOSITORY[:TAG]]
# 删除镜像
docker rmi
docker rmi [OPTIONS] IMAGE [IMAGE...]# 推送镜像到服务
docker push
docker push [OPTIONS] NAME[:TAG]
# 从服务拉取镜像
docker pull
docker pull [OPTIONS] NAME[:TAG|@DIGEST]# 保存镜像为一个压缩包
docker save
docker save [OPTIONS] IMAGE [IMAGE...]
# 加载压缩包为镜像
docker load
docker load [OPTIONS]

image

下载Nginx镜像[例]

镜像仓库地址:https://hub.docker.com/

搜索需要的镜像

image

使用推荐命令,或者指定版本

image

拉取镜像
docker pull nginx
查看镜像
docker images
导出镜像
docker save -o nginx.tar nginx:latest
删除镜像
docker rmi nginx:latest
加载打包好的镜像
docker load -i nginx.tar

镜像结构

镜像是将应用程序及其需要的系统函数库、环境、配置、依赖打包而成。

image

简单来说,镜像就是在系统函数库、运行环境基础上,添加应用程序文件、配置文件、依赖文件等组合,然后编写好启动脚本打包在一起形成的文件。

构建镜像,其实就是实现上述打包的过程。

Dockerfile语法

构建自定义的镜像时,并不需要一个个文件去拷贝,打包。

只需要告诉Docker镜像的组成,需要哪些BaseImage、需要拷贝什么文件、需要安装什么依赖、启动脚本是什么,Docker就会构建镜像。

而描述上述信息的文件就是Dockerfile文件。

  • Dockerfile的本质是一个文件,通过指令描述镜像的构建过程
  • Dockerfile的第一行必须是FROM,从一个基础镜像来构建
  • 基础镜像可以是基本操作系统,如Ubuntu。也可以是其他人制作好的镜像,例如:java:8-alpine

Dockerfile就是一个文本文件,其中包含一个个的指令(Instruction),用指令来说明要执行什么操作来构建镜像。每一个指令都会形成一层Layer。

image

官网文档: https://docs.docker.com/engine/reference/builder

构建Java项目

基于Ubuntu镜像构建[例]

创建一个文件夹,将JDK和jar包文件放入该文件夹下,还有写好的Dockerfile文件

image

Dockerfile文件内容
# 指定基础镜像
FROM ubuntu:16.04
# 配置环境变量,JDK的安装目录
ENV JAVA_DIR=/usr/local# 拷贝jdk和java项目的包
COPY ./jdk8.tar.gz $JAVA_DIR/
COPY ./docker-demo.jar /tmp/app.jar# 安装JDK
RUN cd $JAVA_DIR \&& tar -xf ./jdk8.tar.gz \&& mv ./jdk1.8.0_144 ./java8# 配置环境变量
ENV JAVA_HOME=$JAVA_DIR/java8
ENV PATH=$PATH:$JAVA_HOME/bin# 暴露端口
EXPOSE 8090
# 入口,java项目的启动命令
ENTRYPOINT java -jar /tmp/app.jar
构建镜像
docker build -t javaweb:1.0 .
# -t:镜像的名字和版本号
# .:dockerfile所在的目录,因为这里就在当前目录,所以写个 .
启动容器
docker run --name web -p 8090:8090 -d javaweb:1.0
基于java8构建[例]

虽然可以基于Ubuntu基础镜像,添加任意安装包,构建镜像,但是却比较麻烦。大多数情况下,可以在一些安装了部分软件的基础镜像上做改造。

构建java项目的镜像,可以在已经准备了JDK的基础镜像基础上构建。基于java:8-alpine镜像。

Dockerfile文件内容
FROM java:8-alpine
COPY ./app.jar /tmp/app.jar
EXPOSE 8090
ENTRYPOINT java -jar /tmp/app.jar

其他的操作和上面的一样。

搭建镜像仓库

简化版仓库

Docker官方的Docker Registry是一个基础版本的Docker镜像仓库,具备仓库管理的完整功能,但是没有图形化界面。

命令如下:

docker run -d \--restart=always \--name registry	\-p 5000:5000 \-v registry-data:/var/lib/registry \registry

命令中挂载了一个数据卷registry-data到容器内的/var/lib/registry目录,这是私有镜像库存放数据的目录。

访问http://YourIp:5000/v2/_catalog可以查看当前私有镜像服务中包含的镜像。

图形化界面仓库

使用DockerCompose部署带有图象界面的DockerRegistry,命令如下:

version: '3.0'
services:registry:image: registryvolumes:- ./registry-data:/var/lib/registryui:image: joxit/docker-registry-ui:staticports:- 5000:80environment:- REGISTRY_TITLE=乔木先生私有仓库- REGISTRY_URL=http://registry:5000depends_on:- registry
配置信任地址

私服采用的是http协议,默认不被Docker信任,所以需要做一个配置:

# 打开要修改的文件
vi /etc/docker/daemon.json
# 添加内容:
"insecure-registries":["http://192.168.120.100:5000"]
# 重加载
systemctl daemon-reload
# 重启docker
systemctl restart docker

如果这里还报错:

image

Get "https://192.168.120.100:5000/v2/": http: server gave HTTP response to HTTPS client

在下面的文件中,第13行左右增加--insecure-registry ip地址:端口号

vim /usr/lib/systemd/system/docker.service

image

然后重启docker即可

# 重新加载
systemctl daemon-reload
# 重启docker
systemctl restart docker

最后进入放置docker-compose.yml的文件夹中执行命令:

docker-compose up -d

推送、拉取镜像

推送镜像到私有镜像服务必须先tag,步骤如下:

① 重新tag本地镜像,名称前缀为私有仓库的地址:192.168.120.100:5000/

docker tag nginx:latest 192.168.150.101:8080/nginx:1.0 

② 推送镜像

docker push 192.168.150.101:8080/nginx:1.0 

③ 拉取镜像

docker pull 192.168.150.101:8080/nginx:1.0 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/423400.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数字频率合成器dds的量化性能分析matlab仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 DDS的基本原理 4.2 DDS的量化性能分析 5.完整工程文件 1.课题概述 数字频率合成器dds的量化性能分析matlab仿真,分别定义累加器位宽,截位位宽,模拟DAC位宽等&…

【数据结构与算法】3.顺序表

📚博客主页:爱敲代码的小杨. ✨专栏:《Java SE语法》 ❤️感谢大家点赞👍🏻收藏⭐评论✍🏻,您的三连就是我持续更新的动力❤️ 🙏小杨水平有限,欢迎各位大佬指点&…

软件设计师——软件工程(五)

📑前言 本文主要是【软件工程】——软件设计师——软件工程的文章,如果有什么需要改进的地方还请大佬指出⛺️ 🎬作者简介:大家好,我是听风与他🥇 ☁️博客首页:CSDN主页听风与他 &#x1f304…

解读 EventBridge Transform:数据转换和处理的灵活能力

作者:木则 阿里云 EventBridge 提供了强大而灵活的事件总线服务,它可以连接应用程序、阿里云云服务和阿里云 Serverless 服务来快速构建 EDA(Event-driven Architectures)事件驱动架构,驱动应用与应用,应用…

Prometheus插件安装kafka_exporter

下载地址 https://github.com/danielqsj/kafka_exporter/releases 解压 tar -zxvf kafka_exporter-1.7.0.linux-amd64.tar.gzmv kafka_exporter-1.7.0.linux-amd64 kafka_exporter服务配置 cd /usr/lib/systemd/systemvi kafka_exporter.service内容如下 [Unit] Descript…

Go语言学习笔记:基础语法和类型

Go语言学习笔记:基础语法和类型 目录 Go语言学习笔记:基础语法和类型学习路线前言变量声明常量数据类型布尔型(Boolean)整型(Integer)浮点型(Floating point)复数型(Comp…

42 漏洞发现-操作系统之漏洞探针类型利用修复

目录 系统漏洞发现意义?漏洞类型危害情况?如何做好未卜先知?相关名词解释:漏洞扫描工具演示-Goby,Nmap,Nessus(操作)漏洞类型区分讲解-权限提升,远程执行等(思路)漏洞利用框架演示-Metasploit,Searchsploit等(操作)漏洞修复方案讲解说明-补丁,防护软件…

Android.mk和Android.bp的区别和转换详解

Android.mk和Android.bp的区别和转换详解 文章目录 Android.mk和Android.bp的区别和转换详解一、前言二、Android.mk和Android.bp的联系三、Android.mk和Android.bp的区别1、语法:2、灵活性:3、版本兼容性:4、向后兼容性:5、编译区…

深度学习(5)---自注意力机制

文章目录 1. 输入与输出2. Self-attention2.1 介绍2.2 运作过程2.3 矩阵相乘理解运作过程 3. 位置编码4. Truncated Self-attention4.1 概述4.2 和CNN对比4.3 和RNN对比 1. 输入与输出 1. 一般情况下在简单模型中我们输入一个向量,输出结果可能是一个数值或者一个类…

基于springboot+vue新能源汽车充电管理系统

摘要 新能源汽车充电管理系统是基于Spring Boot和Vue.js技术栈构建的一款先进而高效的系统,旨在满足不断增长的新能源汽车市场对充电服务的需求。该系统通过整合前后端技术,实现了用户注册、充电桩管理、充电订单管理等核心功能,为用户提供便…

【linux基础】linux root用户密码忘记解决方式

方式一:进入单用户模式 1.开启虚拟机的时候,按下“e”健进入用户引导界面 2.再按下“e”,进入内核的编辑 3.找到kernel开头的选项,再次按下“e” 4. 输入 5. 按下“b”,启动 6. 启动后,输入passwd&#xf…

ubuntu使用docker compose一键部署项目

1、将前面手动部署的容器和镜像全部删除 docker rmi hmall (hmall镜像名) docker rmi image_id rmi 是删除多个 rm是删除一个 2、执行命令 docker compose up -d http://192.168.79.129:18080/search.html 访问安装成功! 该ip是虚拟机ubuntu的ip 3、docker-compos…