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题详细思路代码分析数学建模:园区微电网风光储协调优化配置

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

02--大数据Hadoop集群实战

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

C++对C的扩充

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

Spring 事务源码分析

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

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

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

Redis 的持久化(真的好细)

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

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:…

GeoScene产品学习视频收集

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

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

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

Apache Log4j Server 反序列化命令执行漏洞(CVE-2017-5645)

漏洞复现环境搭建请参考 http://t.csdnimg.cn/MxmId 漏洞版本 Apache Log4j 2.8.2之前的2.x版本 漏洞验证 (1)开放端口4712 漏洞利用 (1)ysoserial工具获取 wget https://github.com/frohoff/ysoserial/releases/download/v0…

Flink DataStream API 基础算子(一)

一、介绍 官网 DataStream API 得名于特殊的 DataStream 类,该类用于表示 Flink 程序中的数据集合。你可以认为 它们是可以包含重复项的不可变数据集合。这些数据可以是有界(有限)的,也可以是无界(无限)的…

spring启动后自动退出了

在项目中启动spring框架的application,但是还未等到接口访问它就自己退出了,运行截图如下所示: 解决办法: 将build.gradle文件里的依赖修改一下。我原先的依赖是: org.springframework:spring-web:5.3.10 现修改为 …

2024 电工杯高校数学建模竞赛(B题)| 平衡膳食食谱 |建模秘籍文章代码思路大全

铛铛!小秘籍来咯! 小秘籍团队独辟蹊径,运用负载均衡,多目标规划等强大工具,构建了这一题的详细解答哦! 为大家量身打造创新解决方案。小秘籍团队,始终引领着建模问题求解的风潮。 抓紧小秘籍&am…

肯尼亚大坝决堤反思:强化大坝安全监测的必要性

一、背景介绍 近日,肯尼亚发生了一起严重的大坝决堤事件。当地时间4月29日,肯尼亚内罗毕以北的一座大坝决堤,冲毁房屋和车辆。当地官员称,事故遇难人数已升至71人。这起事件再次提醒我们,大坝安全无小事,监…

正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-23.1,2 讲 I2C驱动

前言: 本文是根据哔哩哔哩网站上“正点原子[第二期]Linux之ARM(MX6U)裸机篇”视频的学习笔记,在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。…

了解区块链基础设施,共同构建安全且强大的Sui网络

区块链基础设施的范畴很广,但其核心是那些直接与网络互动的计算机。这些实体通常被称为节点,分为不同的类型,例如维护完整区块链副本的全节点,以及作为共识决定者的验证节点。除了这两种类型之外,还有其他类型的节点&a…