十四、Docker的基本操作

目录

(一)镜像命令

一、拉取Nginx

二、查看镜像

三、导出文件

四、删除镜像

五、加载镜像

(二)容器命令

一、例子:运行一个nginx容器

1、输入运行命令

2、使用命令查看宿主机ip

3、在外部浏览器访问

4、查看日志

二、例子:修改nginx的index.html文件

1、进入容器

2、进入HTML所在目录

3、修改内容

4、在网页查看

5、停止容器

6、重启容器

7、删除容器

8、展示容器

三、例子:创建并运行一个redis容器,并实现数据持久化

1、使用命令运行redis容器

2、进入容器,并执行redis-cli客户端命令,存入num=666

3、查看是否成功

注:也可以直接进入redis

四、数据卷

1、传统数据和容器耦合

2、使用数据卷解决问题

3、基本操作

4、数据卷的作用

五、例子:创建一个数据卷,并查看数据卷在宿主机的目录位置

1、使用命令创建数据卷

2、查看是否创建成功

3、查看详细信息

4、删除未使用的卷

六、例子:挂载数据卷

1、创建nginx容器并挂载

2、查看数据卷详细信息

3、复制文件位置,在Moba中找到文件

4、右键选择使用VSCode打开,并修改

5、在网页中查看

七、例子:创建并运行一个MySQL容器,将宿主机目录直接挂载到容器

1、下载或导入mysql镜像

2、创建目录

3、在conf中创建配置文件并编写

4、创建容器并挂载

5、在navicat创建连接

6、总结

八、自定义镜像

九、例子:基于Ubuntu镜像构建一个新的镜像,运行一个java项目

1、创建docker-demo目录和Dockerfile文件,并在其中编写如下

2、向docker-demo中导入文件

3、输入命令,创建镜像

4、创建容器

5、在页面访问

十、例子:使用alpine创建镜像

1、修改dockerfile

2、构建镜像

十一、DockerCompose

1、作用:

十二、部署微服务集群

1、编写docker-compose.yml文件

2、将java代码中的数据库和nacos地址都改为yml文件中的服务地址

3、在每个微服务的pom文件中都加上打包依赖

4、清理缓存

5、打包

6、在target目录中找到jar包,并拷贝到对应目录

7、进入虚拟机,将cloud-demo文件夹导入tmp

8、进入cloud-demo文件并运行


(一)镜像命令

一、拉取Nginx

docker pull nginx

二、查看镜像

docker images

三、导出文件

docker save -o nginx.tar nginx:latest

四、删除镜像

docker rmi 名字:版本 或 ID

五、加载镜像

docker load -i nginx.tar

(二)容器命令

注:

暂停时,操作系统会将容器挂起;(可以恢复)

停止时,操作系统会将容器删除;(无法恢复)

所以不使用unstop;

一、例子:运行一个nginx容器

1、输入运行命令

docker run --name containerName -p 80:80 -d nginx
  • docker run :创建并运行一个容器
  • --name:给容器起一个名字,比如叫做mn
  • -p︰将宿主机端口与容器端口映射,冒号左侧是宿主机端口,右侧是容器端口
  • -d:后台运行容器
  • nginx:镜像名称,例如nginx

注意:

此命令会创建一个宿主机80端口和容器80端口的映射,当访问宿主机80端口时,请求会映射到容器的80端口,从而实现容器的访问。

2、使用命令查看宿主机ip

ifconfig

3、在外部浏览器访问

4、查看日志

docker logs -f 容器名  //跟踪日志输出docker logs 容器名     //日志

二、例子:修改nginx的index.html文件

1、进入容器

docker exec -it mn bash 
  • docker exec :进入容器内部,执行一个命令
  • -it:给当前进入的容器创建一个标准输入、输出终端,允许我们与容器交互
  • mn :要进入的容器的名称
  • bash:进入容器后执行的命令,bash是一个linux终端交互命令

2、进入HTML所在目录

cd /usr/share/nginx/html

3、修改内容

sed -i 's#Welcome to nginx#修改了这里#g' index.html
sed -i 's#<head>#<head><meta charset="utf-8">#g' index.html

4、在网页查看

5、停止容器

docker stop mynginx

6、重启容器

docker restart mynginxdocker start mynginx

7、删除容器

docker rm mynginx    //删除docker rm -f mynginx //强制删除

8、展示容器

docker ps       //展示运行中容器docker ps -a    //展示所有容器

三、例子:创建并运行一个redis容器,并实现数据持久化

1、使用命令运行redis容器

docker run --name redis -p 6379:6379 -d redis redis-server --appendonly yes

2、进入容器,并执行redis-cli客户端命令,存入num=666

docker exec -it redis bash
redis-cli
set num 666

3、查看是否成功

get num

注:也可以直接进入redis

docker exec -it redis redis-cli

四、数据卷

1、传统数据和容器耦合

2、使用数据卷解决问题

  1. 在上图中,数据存储在宿主机的文件系统中,不会因为容器的删除而删除;
  2. 而且同一份数据可以被多个容器所使用,实现数据共享;
  3. 在宿主机中更容易修改配置,且容易升级和维护;

3、基本操作

4、数据卷的作用

将容器与数据分离,解耦合,方便操作容器内数据,保证数据安全

五、例子:创建一个数据卷,并查看数据卷在宿主机的目录位置

1、使用命令创建数据卷

docker volume create html

2、查看是否创建成功

docker volume ls

3、查看详细信息

docker inspect html

4、删除未使用的卷

docker volume prune

六、例子:挂载数据卷

1、创建nginx容器并挂载

docker run --name mynginx -p 80:80 -v html:/usr/share/nginx/html -d nginx

2、查看数据卷详细信息

docker inspect html

3、复制文件位置,在Moba中找到文件

4、右键选择使用VSCode打开,并修改

5、在网页中查看

注意:

若挂载时,数据卷不存在,docker会自动帮你生成;

七、例子:创建并运行一个MySQL容器,将宿主机目录直接挂载到容器

1、下载或导入mysql镜像

docker pull mysql //下载docker load -i mysql.tar //导入

2、创建目录

mkdir -p mysql/datamkdir -p mysql/conf

3、在conf中创建配置文件并编写

vi ms.cnf
[mysqld]
skip-name-resolve
character_set_server=utf8
datadir=/var/lib/mysql
server-id=1000

4、创建容器并挂载

docker run \--name mysql \-e MYSQL_ROOT_PASSWORD=123 \-p 3306:3306 \-v /tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf \-v /tmp/mysql/data:/var/lib/mysql \-d \mysql:5.7.25

第一个-v,前面是宿主机配置文件位置,后面是容器配置文件位置;

第二个-v,前面是宿主机数据文件位置,后面是容器数据文件位置;

5、在navicat创建连接

6、总结

八、自定义镜像

镜像是分层结构,每一层称为一个Layer:

  1. Baselmage层:包含基本的系统函数库、环境变量、文件系统
  2. Entrypoint: 入口,是镜像中应用启动的命令
  3. 其它:在Baselmage基础上添加依赖、安装程序、完成整个应用的安装和配置
     

详情查看官网

九、例子:基于Ubuntu镜像构建一个新的镜像,运行一个java项目

1、创建docker-demo目录和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

2、向docker-demo中导入文件

3、输入命令,创建镜像

docker build -t javaweb:1.0 .
//              镜像名  版本 所在目录

4、创建容器

docker run --name web -p 8090:8090 -d javaweb:1.0

5、在页面访问

十、例子:使用alpine创建镜像

1、修改dockerfile

# 指定基础镜像
FROM openjdk:8-alpine# 配置环境变量,JDK的安装目录
COPY ./docker-demo.jar /tmp/app.jar# 暴露端口
EXPOSE 8090# 入口,java项目的启动命令
ENTRYPOINT java -jar /tmp/app.jar

2、构建镜像

docker build -t javaweb:2.0 .

这个可以少几个步骤

十一、DockerCompose

1、作用:

  1. Docker Compose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器!
  2. Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。
     

十二、部署微服务集群

1、编写docker-compose.yml文件

version: "3.2"services:nacos:image: nacos/nacos-serverenvironment:MODE: standaloneports:- "8848:8848"mysql:image: mysql:5.7.25environment:MYSQL_ROOT_PASSWORD: 123volumes:- "$PWD/mysql/data:/var/lib/mysql"- "$PWD/mysql/conf:/etc/mysql/conf.d/"userservice:build: ./user-serviceorderservice:build: ./order-servicegateway:build: ./gatewayports:- "10010:10010"

2、将java代码中的数据库和nacos地址都改为yml文件中的服务地址

3、在每个微服务的pom文件中都加上打包依赖

    <build><finalName>app</finalName><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>

4、清理缓存

5、打包

6、在target目录中找到jar包,并拷贝到对应目录

7、进入虚拟机,将cloud-demo文件夹导入tmp

8、进入cloud-demo文件并运行

docker-compose up -d

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

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

相关文章

【机器学习】037_暂退法

一、实现原理 具有输入噪音的训练&#xff0c;等价于Tikhonov正则化 核心方法&#xff1a;在前向传播的过程中&#xff0c;计算每一内部层的同时注入噪声 从作用上来看&#xff0c;表面上来说是在训练过程中丢弃一些神经元 假设x是某一层神经网络层的输出&#xff0c;是下一…

【机器学习】036_权重衰退

一、范数 定义&#xff1a;向量的范数表示一个向量有多大&#xff08;分量的大小&#xff09; L1范数&#xff1a; 即向量元素绝对值之和&#xff0c;用符号 ‖ v ‖ 1 表示。 公式&#xff1a; L2范数&#xff1a; 即向量的模&#xff0c;向量各元素绝对值的平方之和再…

适合您的智能手机的 7 款优秀手机数据恢复软件分享

如今&#xff0c;我们做什么都用手机&#xff1b;从拍照到录音&#xff0c;甚至作为 MP3 播放器&#xff0c;我们已经对手机变得非常依恋。这导致我们在手机上留下了很多珍贵的回忆。 不幸的是&#xff0c;我们有可能会丢失手机上的部分甚至全部数据。幸运的是&#xff0c;这不…

1. hadoop环境准备

环境准备 准备三台虚拟机&#xff0c;配置最好是 2C 4G 以上 本文准备三台机器的内网ip分别为 172.17.0.10 172.17.0.11 172.17.0.12本机配置/etc/hosts cat >> /etc/hosts<<EOF 172.17.0.10 hadoop01 172.17.0.11 hadoop02 172.17.0.12 hadoop03 EOF本机设置与…

队列的实现和OJ练习

目录 概念 队列的实现 利用结构体存放队列结构 为什么单链表不使用这种方法&#xff1f; 初始化队列 小提示&#xff1a; 队尾入队列 队头出队列 获取队头元素 获取队尾元素 获取队列中有效元素个数 检测队列是否为空 销毁队列 最终代码 循环队列 队列的OJ题 …

MobaXterm如何连接CentOS7的Linux虚拟机?Redis可视化客户端工具如何连接Linux版Redis?

一、打开Lunix虚拟机,进入虚拟机中,在终端中输入ifconfig,得到以下信息&#xff0c;红框中为ip地址 二、打开MobaXterm&#xff0c;点击session 选择SSH&#xff0c;在Remote host中输入linux得到的IP地址&#xff0c;Specify username中可起一个任意的连接名称。 输入密码 四、…

【洛谷 P3743】kotori的设备 题解(二分答案+递归)

kotori的设备 题目背景 kotori 有 n n n 个可同时使用的设备。 题目描述 第 i i i 个设备每秒消耗 a i a_i ai​ 个单位能量。能量的使用是连续的&#xff0c;也就是说能量不是某时刻突然消耗的&#xff0c;而是匀速消耗。也就是说&#xff0c;对于任意实数&#xff0c;…

60 权限提升-MYMSORA等SQL数据库提权

目录 数据库应用提权在权限提升中的意义WEB或本地环境如何探针数据库应用数据库提权权限用户密码收集等方法目前数据库提权对应的技术及方法等 演示案例Mysql数据库提权演示-脚本&MSF1.UDF提权知识点: (基于MYSQL调用命令执行函数&#xff09;读取数据库存储或备份文件 (了…

GaussDB新特性Ustore存储引擎介绍

1、 Ustore和Astore存储引擎介绍 Ustore存储引擎&#xff0c;又名In-place Update存储引擎&#xff08;原地更新&#xff09;&#xff0c;是openGauss 内核新增的一种存储模式。此前的版本使用的行存储引擎是Append Update&#xff08;追加更新&#xff09;模式。相比于Append…

在网络攻击之前、期间和之后应采取的步骤

在当今复杂的威胁形势下&#xff0c;网络攻击是不可避免的。 恶意行为者变得越来越复杂&#xff0c;出于经济动机的攻击变得越来越普遍&#xff0c;并且每天都会发现新的恶意软件系列。 这使得对于各种规模和跨行业的组织来说&#xff0c;制定适当的攻击计划变得更加重要。 …

【Linux】进程间通信 -- 管道

对于进程间通信的理解 首先&#xff0c;进程间通信的本质是&#xff0c;让不同的进程看到同一份资源&#xff08;这份资源不能隶属于任何一个进程&#xff0c;即应该是共享的&#xff09;。而进程间通信的目的是为了实现多进程之间的协同。 但由于进程运行具有独立性&#xff…

密码加密解密之路

1.背景 做数据采集&#xff0c;客户需要把他们那边的数据库连接信息存到我们系统里&#xff0c;那我们系统就要尽可能的保证这部分数据安全&#xff0c;不被盗。 2.我的思路 1.需要加密的地方有两处&#xff0c;一个是新增的时候前端传给后端的时候&#xff0c;一个是存到数…

异步爬取+多线程+redis构建一个运转丝滑且免费http-ip代理池 (三)

内容提要: 如果说,爬取网页数据的时候,我们使用了异步,那么将数据放入redis里面,其实也需要进行异步;当然,如果使用多线程或者redis线程池技术也是可以的,但那会造成冗余; 因此,在测试完多线程redis搭配异步爬虫的时候,我发现效率直接在redis这里被无限拉低下来! 因此: 最终的r…

从0开始学习JavaScript--JavaScript中的集合类

JavaScript中的集合类是处理数据的关键&#xff0c;涵盖了数组、Set、Map等多种数据结构。本文将深入研究这些集合类的创建、操作&#xff0c;以及实际应用场景&#xff0c;并通过丰富的示例代码&#xff0c;帮助大家更全面地了解和应用这些概念。 数组&#xff08;Array&…

SystemVerilog学习 (11)——覆盖率

目录 一、概述 二、覆盖率的种类 1、概述 2、分类 三、代码覆盖率 四、功能覆盖率 五、从功能描述到覆盖率 一、概述 “验证如果没有量化&#xff0c;那么就意味着没有尽头。” 伴随着复杂SoC系统的验证难度系数成倍增加&#xff0c;无论是定向测试还是随机测试&#xff…

安全框架springSecurity+Jwt+Vue-1(vue环境搭建、动态路由、动态标签页)

一、安装vue环境&#xff0c;并新建Vue项目 ①&#xff1a;安装node.js 官网(https://nodejs.org/zh-cn/) 2.安装完成之后检查下版本信息&#xff1a; ②&#xff1a;创建vue项目 1.接下来&#xff0c;我们安装vue的环境 # 安装淘宝npm npm install -g cnpm --registryhttps:/…

软件测试/测试开发/人工智能丨基于Spark的分布式造数工具:加速大规模测试数据构建

随着软件开发规模的扩大&#xff0c;测试数据的构建变得越来越复杂&#xff0c;传统的造数方法难以应对大规模数据需求。本文将介绍如何使用Apache Spark构建分布式造数工具&#xff0c;以提升测试数据构建的效率和规模。 为什么选择Spark&#xff1f; 分布式计算&#xff1a;…

easyExcel注解详情

前言11个注解字段注解 类注解基础综合示例补充颜色总结 11个注解 ExcelProperty ColumnWith 列宽 ContentFontStyle 文本字体样式 ContentLoopMerge 文本合并 ContentRowHeight 文本行高度 ContentStyle 文本样式 HeadFontStyle 标题字体样式 HeadRowHeight 标题高度 HeadStyle…

Python将原始数据集和标注文件进行数据增强(随机仿射变换),并生成随机仿射变换的数据集和标注文件

Python将原始数据集和标注文件进行数据增强&#xff08;随机仿射变换&#xff09;&#xff0c;并生成随机仿射变换的数据集和标注文件 前言前提条件相关介绍实验环境生成随机仿射变换的数据集和标注文件代码实现输出结果 前言 由于本人水平有限&#xff0c;难免出现错漏&#x…

OpenCV快速入门:图像滤波与边缘检测

文章目录 前言一、噪声种类与生成1.1 椒盐噪声1.2 高斯噪声1.3 彩色噪声 二、卷积操作2.1 卷积基本原理2.2 卷积操作代码实现 三、线性滤波3.1 均值滤波均值滤波原理均值滤波公式均值滤波代码实现 3.2 方框滤波方框滤波原理方框滤波公式方框滤波代码实现 3.3 高斯滤波高斯滤波原…