linux下的docker使用

docker是什么,docker翻译过来的意思就是码头工人,顾名思义,docker本质上就是一个搬运工,只不过从搬运货物改成了搬运程序,使搬运的不同的程序能够独立的运行在码头上的不同容器内,互不干扰,而他强大的不仅仅是搬运,而是对程序的统一管理,配置。

部署myqsl

正常我们再linux上部署mysql ,我们需要找到包,对应版本等一系列的复杂的操作,而安装了docker以后,我们只需要几个简单的命令 就可以 部署mysql ,先把镜像拉取到docker上,然后在创建容器,这样mysql就部署好了

docker run -d \ --name mysql \ -p 3306:3306 \ -e TZ=Asia/Shanghai \ -e MYSQL_ROOT_PASSWORD=123 \ mysql

以上就是mysql的命令 

基础命令

 

用图像来表示 docker上的部署流程

以mysql为例,我们部署mysql ,先从镜像仓库pull下来mysql的镜像,然后docker run ,添加容器,而每个容器都是独立的,也就意味着 我们可以用docker 直接部署一个mysql集群  ,也就是多个容器 ,但是目前来说并没有这个必要  

我们也可以 手动拉取 镜像 ,比如把一个nginx的tar包传入到虚拟机中 ,我们用docker load 命令 可以下载到 我们的镜像仓库中,也可以用save命令 把一个tar包 导出来  

# Docker开机自启 systemctl enable docker 
# Docker容器开机自启 docker update --restart=always [容器名/容器id]

假如 我们现在需要 从镜像仓库拉取一个nginx 镜像  

我们需要怎么做

nginx镜像拉取使用

# 第2步,拉取Nginx镜像
docker pull nginx# 第3步,查看镜像
docker images
# 结果如下:
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
nginx        latest    605c77e624dd   16 months ago   141MB
mysql        latest    3218b38490ce   17 months ago   516MB# 第4步,创建并允许Nginx容器
docker run -d --name nginx -p 80:80 nginx# 第5步,查看运行中容器
docker ps
# 也可以加格式化方式访问,格式会更加清爽
docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"# 第6步,访问网页,地址:http://虚拟机地址# 第7步,停止容器
docker stop nginx# 第8步,查看所有容器
docker ps -a --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"# 第9步,再次启动nginx容器
docker start nginx# 第10步,再次查看容器
docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"# 第11步,查看容器详细信息
docker inspect nginx# 第12步,进入容器,查看容器内目录
docker exec -it nginx bash
# 或者,可以进入MySQL
docker exec -it mysql mysql -uroot -p# 第13步,删除容器
docker rm nginx
# 发现无法删除,因为容器运行中,强制删除容器
docker rm -f nginx

命令别名

正常我们查看 docker 的镜像 我们使用的命令为  

docker images   这样我们每次输入重复的单词 就显得太麻烦了  我们就可以简化这种方法

# 修改/root/.bashrc文件
vi /root/.bashrc
内容如下:
# .bashrc# User specific aliases and functionsalias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias dps='docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"'
alias dis='docker images'# Source global definitions
if [ -f /etc/bashrc ]; then. /etc/bashrc
fi

我们  的 dis 是不是等于  docker images  所以以后 我们就可以 直接输入  dis  就相当与 docker images 命令  ,相应的  其他命令别名 也可以照葫芦画瓢自己来进行设置

数据卷

容器是一个隔离的环境,我们程序内的所有文件 配置运行 时候都在容器内部,所以以后我们想要对容器中配置进行修改 之类的操作会十分的不方便

所以我们怎么办呢 ?我们可以采用数据卷的形式,就是在我们的虚拟机上创建一个文件夹,与容器内部的一些文件 进行相互映射,也就是一个沟通桥梁,后期我们直接修改文件夹中的内容,直接映射到容器中去,是不是就方便许多,沟通桥梁的建立也称作挂载

而在 我们的虚拟机上 也有一个相应的目录来专门存放我们数据卷的目录

 /var/lib/docker/volumes这个目录就是默认的存放所有容器数据卷的目录,其下再根据数据卷名称创建新目录

容器与数据卷的挂载要在创建容器时配置,对于创建好的容器,是不能设置数据卷的。而且创建容器的过程中,数据卷会自动创建

下面演示 nginx下的html目录挂载

​
# 1.首先创建容器并指定数据卷,注意通过 -v 参数来指定数据卷
docker run -d --name nginx -p 80:80 -v html:/usr/share/nginx/html nginx# 2.然后查看数据卷
docker volume ls
# 结果
DRIVER    VOLUME NAME
local     29524ff09715d3688eae3f99803a2796558dbd00ca584a25a4bbc193ca82459f
local     html# 3.查看数据卷详情
docker volume inspect html
# 结果
[{"CreatedAt": "2024-05-17T19:57:08+08:00","Driver": "local","Labels": null,"Mountpoint": "/var/lib/docker/volumes/html/_data","Name": "html","Options": null,"Scope": "local"}
]# 4.查看/var/lib/docker/volumes/html/_data目录
ll /var/lib/docker/volumes/html/_data
# 可以看到与nginx的html目录内容一样,结果如下:
总用量 8
-rw-r--r--. 1 root root 497 12月 28 2021 50x.html
-rw-r--r--. 1 root root 615 12月 28 2021 index.html# 5.进入该目录,并随意修改index.html内容
cd /var/lib/docker/volumes/html/_data
vi index.html# 6.打开页面,查看效果# 7.进入容器内部,查看/usr/share/nginx/html目录内的文件是否变化
docker exec -it nginx bash​

 我们着重看这一条命令

html  代表的是虚拟机的一个文件名字叫html   后面冒号代表着挂载的容器内的目录

当然我们也可以在冒号左边直接指定一个目录 来进行挂载  

这时候 我们docker inspect  mysql 命令 查看一下mysql挂载的数据卷

我们发现  source 代表的是 宿主机也就是我们虚拟机的目录  ,destination 代表着挂载的容器的目录

镜像

我们除了 在镜像仓库拉取镜像以外,我们也可以自己创建一个镜像,而创建一个镜像 需要多条命令,而有些命令又是重复的

,而镜像 就是一堆文件的集合  

但是   我们运行一堆一堆的文件 然后 搞成一个镜像又太麻烦了 ,所以我们以 用dockerfile 把一些固定的命令统一处理,把需要自己处理的jar包之类的打包自己处理成镜像

比如说 我们现在 有一个docker file文件  里面写好了如下命令

# 基础镜像
FROM openjdk:11.0-jre-buster
# 设定时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 拷贝jar包
COPY docker-demo.jar /app.jar
# 入口
ENTRYPOINT ["java", "-jar", "/app.jar"]

然后 我们有一个打包好的docker-demo.jar包  , 我们只需要  拷贝  这个docekrfile文件 和jar包到虚拟机本地目录下

然后构建命令

# 进入镜像目录 cd /root/demo # 开始构建 docker build -t docker-demo:1.0 .

 

  • docker build : 就是构建一个docker镜像

  • -t docker-demo:1.0-t参数是指定镜像的名称(repositorytag

  • . : 最后的点是指构建时Dockerfile所在路径,由于我们进入了demo目录,所以指定的是.代表当前目录,也可以直接指定Dockerfile目录

 我们也可以把最后的  .  替换成 dockerfile的目录  这样一个镜像就创建好了

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

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

相关文章

“腾讯云 AI 代码助手”体验

一、“腾讯云 AI 代码助手”体验 1、注册账号并进行实名认证 2、进入开发环境 3、体验javascript简单函数 代码如下: //请写一个两个日期计算的函数 function dateDiff(date1, date2) {return date2.getTime() - date1.getTime(); } var date1 new Date("2…

智享无人直播系统(三代)融合AI智能互动,成就无人直播行业的新巨星!

随着直播行业的不断发展,智享直播(三代)作为首家自主研发的智能AI直播软件引领了行业的新潮流。相比市场上的其他同类软件,我们的软件通过创新的功能实现了直播间的AI智能互动,提供了丰富而个性化的直播体验。最重要的…

fmql入门之对标zynq差异(2)

还是有很多地方需要注意的,细节又繁琐。 AXI 接上一篇,Program bit后,IAR debug无现象: prinft没有打印出字符串;GPIO初始化失败。 不知道是不是vivado补丁失败的原因: 但是重新分析综合后还是这样。 …

Lc43---- 1221. 分割平衡字符串(java版)---(贪心)(字符串)

1.题目描述 2.知识点和思路 (1)贪心算法的基本思想 选择性质:在每一步中,选择当前最优的选项,不考虑未来的后果。 局部最优解:通过一系列局部最优选择,构建全局最优解。 不可回溯:一…

2024电工杯A题详细思路代码分析数学建模:园区微电网风光储协调优化配置

题目分析:园区微电网风光储协调优化配置 我们会先给出三个问题总体的分析,最后会详细分析问题一的建模和详细内容。 背景: 园区微电网由风光发电和主电网联合为负荷供电,为了尽量提高风光电量的负荷占比,需配置较高比…

SpringBoot 实现图片防盗链功能

前言 出于安全考虑,我们需要后端返回的图片只允许在某个网站内展示,不想被爬虫拿到图片地址后被下载。或者,不想浏览器直接访问图片链接。 出于性能考虑,不想要别人的网站,拿着我们的图片链接去展示,白白…

【Spring】Spring事务管理——声明式事务管理代码示例

1、声明式事务管理 步骤一&#xff1a;添加Spring和JDBC的依赖 <dependencies> <!-- Spring Core --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>你的S…

python+opencv提取.mp4 视频的每一帧并将其保存为图片

提取 .mp4 视频的每一帧并将其保存为图片&#xff0c;可以使用 cv2 库&#xff08;OpenCV&#xff09;。下面是一个完整的示例代码&#xff0c;演示如何使用 OpenCV 提取视频的每一帧并将其保存为图片&#xff0c;使用时需要将mp4文件及路径放至video_path &#xff0c;提取的图…

02--大数据Hadoop集群实战

前言&#xff1a; 前面整理了hadoop概念内容&#xff0c;写了一些概念和本地部署和伪分布式两种&#xff0c;比较偏向概念或实验&#xff0c;今天来整理一下在项目中实际使用的一些知识点。 1、基础概念 1.1、完全分布式 Hadoop是一个开源的分布式存储和计算框架&#xff0…

C++对C的扩充

C既可用于面向过程的程序设计&#xff0c;也可用于面向对象的程序设计。在面向过程程序设计的领域&#xff0c;C继承了C语言提供的绝大部分功能和语法规定&#xff0c;并在此基础上做了不少扩充&#xff0c;主要有一下几个方面&#xff1a; 1.C的输入输出 C为了方便用户&…

Spring 事务源码分析

前言&#xff1a; 我们知道 Spring 声明式事务是通过 AOP 来实现的&#xff0c;日常项目开发中我们只需要使用 Transactional 注解就可以实现声明式事务&#xff0c;那你知道通过 Transactional 注解怎样实现事务的吗&#xff1f;本篇我们将从源码来分析 Spring 声明式事务的执…

STM32定时器四大功能之定时器编码接口

1什么是编码器接口&#xff1f; 编码器接口接受编码器的正交信号&#xff0c;根据编码器产生的正交信号脉冲控制CNT的自增和自减&#xff0c;从而指示编码器的旋转方向和旋转速度。 每个高级定时器和通用定时器都有一个编码器接口&#xff0c;同时正交编码器产生的正交信号分…

Redis 的持久化(真的好细)

前言 Redis 是一个内存数据库&#xff0c;把数据存储在内存中&#xff0c;而内存中的数据是不持久的&#xff0c;要想数据持久就得将数据存储到硬盘中&#xff0c;而 Redis 相比于 Mysql 这样的关系型数据库最大的优势就在于将数据存储在内存中从而效率更高&#xff0c;速度更快…

docker 安装RabbitMQ-web版本

直接拉去web版本 docker pull rabbitmq:management启动命令 设置用户名 admin 密码123456 docker run -dit --name rabbitmq -p 5672:5672 -p 15672:15672 -e RABBITMQ_DEFAULT_USERadmin -e RABBITMQ_DEFAULT_PASS123456 rabbitmq:management访问地址 http://127.0.0.1:…

配置证书443访问 -- 集成框架

配置证书443访问 前言正文步骤1: 准备证书基于Nginx镜像 前言 由于业务要求需要对当前网络请求服务器不走80端口&#xff0c;进行443 https证书访问。 文档有点丑见谅&#xff0c;我还没加样式 正文 要让运行在Docker容器中的前端应用在443端口上使用SSL/TLS证书&#xff0…

【x264】编码核心函数(x264_encoder_encode)的简单分析

【x264】编码模块&#xff08;x264_encoder_encode&#xff09;简单分析 1.编码帧函数&#xff08;x264_encoder_encode&#xff09;1.1 拷贝一帧并移动到buffer中&#xff08;x264_frame_pop_unused&#xff09;1.2 拷贝一帧送入队列用于确定帧类型&#xff08;x264_lookahead…

EC2 Linux 开机自启脚本:必要性和实现

在 Amazon EC2 Linux 实例上配置开机自启脚本是一个常见的需求。这种自启动脚本具有重要的实践意义,主要体现在以下几个方面: 必要性 服务自动启动 当 EC2 实例启动时,可以自动启动一些关键服务,如 Web 服务、数据库服务等,而不需要手动去启动。这有助于提高服务的可用性和可靠…

GeoScene产品学习视频收集

1、易智瑞运营的极思课堂https://www.geosceneonline.cn/learn/library 2、历年易智瑞技术公开课视频资料 链接&#xff1a;技术公开课-易智瑞信息技术有限公司&#xff0c;GIS/地理信息系统&#xff0c;空间分析-制图-位置智能-地图 3、一些关于GeoScene系列产品和技术操作的视…

Unity2024面试总结(适用3-5年经验以上)

文章目录 前言一、基础芝士1、说下你对面向对象的理解2、说下协程和线程的区别3、说下内存优化这块内容4、说下GPU优化这块内容5、说下对DrawCall的理解6、向量的点乘、叉乘7、数据结构、算法 二、进阶芝士1、框架与核心模块2、说下你在项目中使用过的设计模式3、架构思想4、如…

二进制部署k8s集群 部署高可用master节点

目录 本次部署的环境 一、master02 节点部署 二、负载均衡部署 安装nginx服务 部署keepalive服务 修改node节点上的配置文件 在master节点上创建pod 三、部署 Dashboard 二进制部署k8s集群部署的步骤总结 &#xff08;1&#xff09;k8s的数据存储中中心的搭建 etcd &…