linux下的docker使用

news2024/10/7 14:30:18

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 functions

alias 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.coloradmin.cn/o/1686785.html

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

相关文章

不使用ScrollRect 和 HorizontalLayoutGroup做的横向循环列表

一、 版本一 1.前情提要 因为需要展示300多个相同的物体,但是如果全部放在场景内,运行起来会很卡,所以想到了用无限循环,然后动态填充不同的数据。 做的这个没有用HorizontalLayoutGroup 和 ScrollRect 。 1.没有使用Horizontal…

Git原理及常用命令小结——实用版(ing......)、Git设置用户名邮箱

Git基本认识 Git把数据看作是对小型文件系统的一组快照,每次提交更新,或在Git中保存项目状态时,Git主要对当时的全部文件制作一个快照并保存这个快照的索引。同时,为了提高效率,如果文件没有被修改,Git不再…

JSON的序列化与反序列化以及VSCode执行Run Code 报错

JSON JSON: JavaScript Object Notation JS对象简谱 , 是一种轻量级的数据交换格式。 JSON格式 { "name":"金苹果", "info":"种苹果" } 一个对象:由一个大括号表示.括号中通过键值对来描述对象的属性 (可以理解为, 大…

操作系统总结(2)

目录 2.1 进程的概念、组成、特征 (1)知识总览 (2)进程的概念 (3)进程的组成—PCB (4)进程的组成---程序段和数据段 (5)程序是如何运行的呢&#xff1f…

Android和flutter交互,maven库的形式导入aar包

记录遇到的问题,在网上找了很多资料,都是太泛泛了,使用后,还不能生效,缺少详细的说明,或者关键代码缺失,我遇到的问题用红色的标注了 导入aar包有两种模式 1.比较繁琐的,手动将aar…

Java8-HashMap实现原理

目录 HashMap原理 hashmap的put流程: HashMap扩容机制: HashMap的寻址算法: HashMap原理 HashMap的底层数据结构是由,数组,链表和红黑树组成的。 当我们往HashMap中put元素的时候,利用key的hashCode重…

HC32F103BCB使用SPI获取AS5040编码器数据

1.AS5040介绍 2.硬件电路 硬件上使用SSI通信方式连接。 3.配置硬件SPI 查看手册,AS5040时序 可以看到在空闲阶段不发生数据传输的时候时钟(CLK)和数据(DO)都保持高电位(tCLKFE阶段),在第一个脉冲的下降沿触发编码器载入发送数据,然后每一个…

【Unity Shader入门精要 第9章】更复杂的光照(四)

1. 透明度测试物体的阴影 对于物体有片元丢弃的情况,比如透明度测试或者后边会讲到的消融效果,使用默认的 ShadowCaster Pass 会产生问题,这是因为该Pass在生成阴影映射纹理时,没有考虑被丢弃的片元,而是使用完整的模…

FTP文件传输议

FTP是一种文件传输协议:用来上传和下载,实现远程共享文件,和统一管理文件 工作原理:用于互联网上的控制文件的双向传输是一个应用程序。工作在TCP/IP协议簇的,其传输协议是TCP协议提高文件传输的共享性和可靠性&#…

阅读笔记——《AFLNeTrans:状态间关系感知的网络协议模糊测试》

【参考文献】洪玄泉,贾鹏,刘嘉勇.AFLNeTrans:状态间关系感知的网络协议模糊测试[J].信息网络安全,2024,24(01):121-132.【注】本文仅为作者个人学习笔记,如有冒犯,请联系作者删除。 目录 摘要 1、引言 2、背景及动机 2.1、网络协议实现程…

正点原子LWIP学习笔记(二)MAC简介

MAC简介 一、MAC简介(了解)二级目录三级目录 二、ST的ETH框架(了解)三、SMI站管理接口(熟悉)四、介质接口MII、RMII(熟悉) 一、MAC简介(了解) STM32 的 MAC …

Ubuntu24.04设置静态IP地址

Ubuntu24.04设置静态IP地址 前言:vm17.5的动态IP问题 第一个是设置的静态IP我们可以看到是forever,第二个则是动态IP则是一天的时间。 如果我们不设置静态IP的话,那么可能在本地测试项目的时候,第二天发现一些服务不能用了&#…

13.js对象

定义 一种复杂数据类型,是无序的(不保留键的插入顺序),以键值对({key:value})形式存放的数据集合 对象的创建 (1)字面量创建 var 对象名{ } (2)内部构造函数创建 v…

VirtualBox安装ubuntu22.04记录

一,VirtualBox 软件安装 虚拟机(Virtual Machine)指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。在实体计算机中能够完成的工作在虚拟机中都能够实现。 常见的虚拟机软件主要有两款 VMware 和 VirtualBox 。VMwar…

争议湖北消费金融2023年业绩,营收下滑or财务内控重大缺陷?

近日,湖北消费金融股份有限公司(下称“湖北消费金融”)披露了2023年度相关信息,包括股权结构、关联方、董事会、分支机构、资产负债情况等信息。 据介绍,湖北消费金融的注册资本为10.058亿元,法定代表人为…

linux---线程控制

线程和进程 以前我们要同时跑多个程序,可以通过fork()多个子进程,然后通过系统函数进行程序的替换,但是创建进程代价大,不仅要拷贝一份父进程的地址空间,页表,文件表述符表等。但是线程不需要因为是进程的…

使用JavaScript日历小部件和DHTMLX Gantt的应用场景(三)

DHTMLX Suite UI 组件库允许您更快地构建跨平台、跨浏览器 Web 和移动应用程序。它包括一组丰富的即用式 HTML5 组件,这些组件可以轻松组合到单个应用程序界面中。 DHTMLX Gantt是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表,可满足项目管理应用…

【调试笔记-20240520-Linux-在 WSL2 / Ubuntu 20.04 中编译 QEMU 可运行的 OVMF 固件】

调试笔记-系列文章目录 调试笔记-20240520-Linux-在 WSL2 / Ubuntu 20.04 中编译 QEMU 可运行的 OVMF 固件 文章目录 调试笔记-系列文章目录调试笔记-20240520-Linux-在 WSL2 / Ubuntu 20.04 中编译 QEMU 可运行的 OVMF 固件 前言一、调试环境操作系统:Windows 10 …

作业-day-240523

思维导图 知识点问答 1、IO多路复用的原理 1、创建一个检测文件描述符的容器 fd_set fds; 2、将需要检测的文件描述符放入容器中 FD_SET(文件描述符,&fds); 3、通过一个阻塞函数阻塞等待容器中是否有事件产生,如果有一个或多个事件产生&#xff0c…

C++设计模式|结构型 适配器模式

1.什么是适配器模式? 可以将⼀个类的接⼝转换成客户希望的另⼀个接⼝,主要⽬的是 充当两个不同接⼝之间的桥梁,使得原本接⼝不兼容的类能够⼀起⼯作。 2. 适配器模式的组成 (1)接口类,给客户端调用&…