十四、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 mynginx

docker 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/data

mkdir -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-server
    environment:
      MODE: standalone
    ports:
      - "8848:8848"
  mysql:
    image: mysql:5.7.25
    environment:
      MYSQL_ROOT_PASSWORD: 123
    volumes:
      - "$PWD/mysql/data:/var/lib/mysql"
      - "$PWD/mysql/conf:/etc/mysql/conf.d/"
  userservice:
    build: ./user-service
  orderservice:
    build: ./order-service
  gateway:
    build: ./gateway
    ports:
      - "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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

crmchat安装搭建教程文档 bug问题调试

一、安装PHP插件&#xff1a;fileinfo、redis、swoole4。 二、删除PHP对应版本中的 proc_open禁用函数。 一、设置网站运行目录public&#xff0c; 二、设置PHP版本选择纯静态。 三、可选项如有需求则开启SSL,配置SSL证书&#xff0c;开启强制https域名。 四、添加反向代理。 …

苹果CMS首涂第30套可装修DIY主题模板免授权版

这是一款可以装修的主题&#xff0c;类似淘宝店装修一样&#xff0c;可以针对首页、栏目页、详情页、播放页进行自定义装修&#xff0c;内置10个模块自由选择、添加、修改、删除、排序操作&#xff0c;后续升级还会增加更多实用和个性模块供选择&#xff0c;主题内包含的导航、…

类与对象(上篇)

前言 在之前我们学的C入门主要是为现在学习类与对象打基础&#xff0c;今天我们才算真正开始学习C了。因为类与对象的知识点比较多&#xff0c;所以我们将它分为三部分讲解&#xff0c;今天我们学习类与对象的上篇。 一、面向过程和面向对象的初步认识 1、面向过程 面向过程顾…

基于安卓android微信小程序的个人管理小程序

运行环境 开发语言&#xff1a;Java 框架&#xff1a;ssm JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&a…

Java架构师软件架构设计导论

目录 1 软件架构设计导论2 HR角度看架构师3 软件架构设计概述4 顶级大师眼中的架构5 建筑中的架构师6 软件架构的发展阶段7 软件架构的意义8 架构是项目干系人进行交流的手段9 架构有助于循序渐进的原型设计10 架构是设计决策的体现11 架构明确系统设计约束条件12 架构与组织结…

【python】直方图正则化详解和示例

直方图正则化&#xff08;Histogram Normalization&#xff09;是一种图像增强技术&#xff0c;目的是改变图像的直方图以改善图像的质量。具体来说&#xff0c;它通过将图像的直方图调整为指定的形状&#xff0c;以增强图像的对比度和亮度。 直方图正则化的基本步骤如下&…

[计算机网络]网络层概述

呼,写了这么久终于重新开始啦! 自己落下了太多东西了.....是时候应该重新拾掇起来了. 关于后面的代码项目,我的想法是vilas.js仍然使用js来进行编写,但是后续其他的项目会开始尝试使用ts来进行书写了. 就算是前端也需要点规范吧..... 0.写在前面 这篇文章要和大家道个歉,首…

“非旺玖原装的PL2303,.........“解决办法

"非旺玖原装的PL2303&#xff0c;…"解决办法 windows安装PL2303串口驱动提示“非旺玖原装的PL2303&#xff0c;请联系您的供货商”的解决办法&#xff1a; 主要原因&#xff1a;驱动版本无法兼容&#xff0c;需要降低使用版本 解决办法&#xff1a; 1.插好串口线&…

万字长文 - Python 日志记录器logging 百科全书 - 高级配置之 日志分层

万字长文 - Python 日志记录器logging 百科全书 - 高级配置之 日志分层 前言 在 Python 的logging模块中&#xff0c;它不仅提供了基础的日志功能&#xff0c;还拥有一系列高级配置选项来满足复杂应用的日志管理需求。 说到logging 模块的高级配置&#xff0c;必须提及日志分…

HDCTF2023 - Reverse方向全WP

文章目录 [HDCTF 2023]easy_re[HDCTF 2023]easy_asm[HDCTF 2023]fake_game[HDCTF 2023]enc[HDCTF 2023]double_code[HDCTF 2023]买了些什么呢[HDCTF2023]basketball [HDCTF 2023]easy_re UPX壳&#xff0c;脱壳 一个base64编码。 [HDCTF 2023]easy_asm ida打开后可以看到xor 10…

Ubuntu18.04运行gazebo的launch文件[model-4] process has died报错

启动gazebo仿真环境报错[model-4] process has died [model-4] process has died [pid 2059, exit code 1, cmd /opt/ros/melodic/lib/gazebo_ros/spawn_model -urdf -model mycar -param robot_description __name:model __log:/root/.ros/log/8842dc14-877c-11ee-a9d9-0242a…

opencv将32位深图片合成视频跳帧解决办法

在合成视频时候&#xff0c;大多数的图片都是24位深度的&#xff08;即RGB三通道&#xff0c;一个通道8位&#xff09;&#xff0c;但是也存在少量的32位深的图片&#xff08;RGBA&#xff0c;三个颜色通道加上A这个透明度通道&#xff09;&#xff0c;32位和24位的格式是不一样…

SSM2

DataSource mybatis与Spring整合 事务加载业务层上面 开启事务驱动 上面都是声明式开启事务 图书管理系统 命名规范: java命名规范:驼峰命名法类:大驼峰变量,属性名.方法名:小驼峰 常量使用下划线分割:全大写,单词与单词之间下划线分割数据库命名规范:常用命名规范:下划线…

【Windows 常用工具系列 11 -- 福昕PDF搜索高亮过的文本】

文章目录 福昕 PDF 搜索高亮过的文本 福昕 PDF 搜索高亮过的文本 在 pdf 文档阅读过程中&#xff0c;我们需要经常高亮一些文本&#xff0c;以方便下次阅读时找到重点。我这边使用的是 福昕PDF 阅读器&#xff0c;下面就介绍下如何在福昕阅读器中搜索已经高亮过的文本。

基于单片机PM2.5监测系统仿真设计

**单片机设计介绍&#xff0c; 基于单片机PM2.5监测系统仿真设计 文章目录 一 概要简介设计目标系统组成工作流程仿真设计结论 二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 # 基于单片机PM2.5监测系统仿真设计介绍 简介 PM2.5&#xff08;可吸…

Django实战:从零到一构建安全高效的Web应用

目录 一、概述 二、版本控制和部署 1、Git版本控制 2、Docker部署 三、数据库配置 1、配置数据库设置 2、创建数据库模型 四、URL路由和视图 1、定义URL路由 2、创建视图 五、模板渲染 1、创建模板 2、在视图中使用模板 总结 一、概述 Django是一个高级Python W…

【机器学习】038_梯度消失、梯度爆炸

一、原因 神经网络梯度 假设现在有一个 层的神经网络&#xff0c;每层的输出为一个对输入作 变换的函数结果 用 来表示第 层的输出&#xff0c;那么有下列公式&#xff1a; 链式法则计算损失 关于某一层某个参数 的梯度&#xff1a; 注意到&#xff0c; 为向量&am…

【NI-RIO入门】CompactRIO介绍及环境安装

CompactRIO是什么&#xff1f; CompactRIO系统提供了高处理性能、传感器专用I/O和紧密集成的软件工具&#xff0c;使其成为工业物联网、监测和控制应用的理想之选。实时处理器提供可靠&#xff0c;可预测的行为&#xff0c;而FPGA在需要高速逻辑和精确定时的较小任务上表现出色…

11.20 知识总结(choices参数、MVC和MTV的模式、Django与Ajax技术)

一、 choices参数的使用 1.1 作用 针对某个可以列举完全的可能性字段&#xff0c;我们应该如何存储 .只要某个字段的可能性是可以列举完全的&#xff0c;那么一般情况下都会采用choices参数 1.2 应用场景 应用场景&#xff1a; 学历&#xff1a; 小学 初中 高中 本科 硕士…

MATLAB | 官方举办的动图绘制大赛 | 第二周赛情回顾

今天带来一下MATHWORKS官方举办的迷你黑客大赛第三期(MATLAB Flipbook Mini Hack)的最新进展&#xff01;&#xff01;目前比赛已经进行了两周非常荣幸能够成为第一周的阶段性获奖者&#xff1a; 本来并不打算每周进行一次赛况讲解&#xff0c;但是由于字符限制改成了2000&…