Docker功能简单学习及使用

Docker是什么

Docker是一个快速构建,运行,管理应用的工具

传统基于linux安装程序较为复杂繁琐,使用docker可以快速的进行项目部署和管理

镜像与容器

Docker进行安装应用时,会自动搜索并下载应用镜像(image)。镜像不仅包含应用本身,还包括应用所运行的环境,配置,系统函数库,Docker在运行景象时会创建一个隔离环境,称为容器(container)

只要安装好了docker,docker的镜像能够忽略操作系统的差异直接进行部署运行,因为所有跟系统,环境相关的部分,docker镜像中都是包含的

不同的容器之间是相互隔离的,不会相互产生影响,也不会因为需求不同的环境出现问题

Docker的基本使用

docker run命令

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

通过这样一个命令就能实现mysql的下载直接到运行

命令解读

docker run -d \ #
    --name mysql \
    -p 3306:3306 \
    -e TZ=Asia/Shanghai \
    -e MYSQL_ROOT_PASSWORD=ctrl \
    mysql
  • docker run:创建并运行一个容器,-d让容器在后台运行
  • --name : 为容器起名,必须唯一
  • -p 3306:3306:设置端口映射 前者为宿主机端口,后者为容器内端口
  • -e KEY=Value : 设置环境变量,具体参数可以查看镜像官方文档
  • mysql : 指定运行的镜像名
    • 镜像名一般由两部分组成:[repository]:[tag]
    • repository为镜像名
    • tag为镜像版本
    • 如果不写名称,默认为最新版本

关于镜像和容器常用指令

docker save -o nginx.tar nginx

将镜像保存为其他文件

-o 想要得到的文件名 镜像名

docker load -i nginx.tar

将其他类型文件加载为镜像

-i 想要加载的文件名

docker rmi 镜像名

移除镜像

docker rm 容器名

移除容器

docker exec 容器名

进入容器

docker ps --format 格式参数

可以进行简化

查看容器

给常用Docker命令起别名,方便我们访问:

# 修改/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

然后,执行命令使别名生效

source /root/.bashrc

数据卷

数据卷(volume)是一个虚拟目录,是容器内目录宿主机目录之间映射的桥梁

因为容器是对外隔离的,想要修改容器内文件需要进入到容器内部,但容器内的环境和函数库是精简到极致的,所以操作不方便。

使用数据卷与主机文件系统的目录进行映射,然后再使数据卷与容器内部的文件目录进行挂载

docker就实现了宿主机目录和容器内目录的双向绑定,在其中一侧所进行的操作都会在另一侧映射出来

通过数据卷作为媒介完成挂载

数据卷挂载,在执行docker run命令时,使用-v 数据卷:容器内目录 可以完成数据卷挂载

当创建容器时,如果挂载了数据卷且数据卷不存在,会自动创建数据卷

如果创建容器时没有完成数据卷挂载,就无法再进行挂载了

基于本地目录直接挂载

容器的挂载还有第二种方式,即基于本地目录直接挂载

语法与数据卷挂载类似,区别在于-v参数之后不写数据卷,直接写本地目录即可

自定义镜像

日常开发中,不仅仅需要使用Docker官方提供的镜像,还有可能会用到docker官方没有提供的镜像,这个时候就需要我们自己自定义镜像了

重新介绍一遍,镜像就是包含了应用程序,程序运行的系统函数库,运行配置等文件的文件包。

构建镜像的过程其实就是把上述文件打包的过程。

镜像是分为很多层的,比如最底层的基础镜像,就是应用依赖的系统函数库,环境,配置,文件;最顶层的入口层,镜像运行入口,一般是程序启动的脚本和参数;中间添加安装包,依赖,配置等每次操作也会形成新的一层。

制作镜像就是将这些层分别压缩打包

你可以观察到,在从docker官方拉取镜像的时候,如果本地已经有了另一个镜像需要的基础镜像,会直接跳过这一层

DockerFile

DockerFile就是一个文本文件,其中包含指令,用于说明在构建镜像的过程中需要进行什么样的操作

以下为常见指令

FROM openjdk:11.0-jre-buster
COPY docker-demo.jar /app.jar
ENTRPOINT ["java","-jar","/app.jar"]

当编写好了DockerFile,可以用以下命令来构建镜像

docker build -t myImage:1.0 .
  • -t: 是给镜像起名,格式依然是respository:tag的格式,不指定tag时,默认为latest
  • . : 是指定Dockerfile所在目录,如果就在当前目录,则指定为“.”

网络

默认情况下,所有容器都是以bridge方式连接到docker的一个虚拟网桥上的

但是,这种情况下,随着容器的开启和关闭,容器被分配到的ip也是变化的,如果想让不同容器通过ip进行通信不太可行,需要用到自定义网络

docker compose

在日常开发中,我们在进行项目部署的时候,基本上都会同时用多个docker容器,比如比较经典的数据库+nginx+项目本体,而一个一个手动部署,启动过于繁琐,所以我们需要用到docker compose

使用docker 查看镜像无权限问题

报错:

[yichen@bogon ~]$ docker images

permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/images/json": dial unix /var/run/docker.sock: connect: permission denied

解决命令:

sudo chown root:docker /var/run/docker.sock # 修改docker.sock权限为root:docker

sudo groupadd docker # 添加docker用户组

sudo gpasswd -a $USER docker # 将当前用户添加至docker用户组

newgrp docker

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

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

相关文章

GitLab教程(一):安装Git、配置SSH公钥

文章目录 序一、Git安装与基本配置(Windows)下载卸载安装基本配置 二、SSH密钥配置 序 为什么要使用代码版本管理工具: 最近笔者确实因为未使用代码版本管理工具遇到了一些愚蠢的问题,笔者因此认为代码版本管理工具对于提高团队…

魔法阵-蓝桥每日真题

0魔法阵 - 蓝桥云课 (lanqiao.cn) #include <iostream> #include <queue> #include <vector> #include <cstring> #include <algorithm>using namespace std;#define x first #define y second const int N 1010; const int inf 1e4; vector&…

【汇编语言实战】求两组给定数组最大值

C语言描述该程序流程&#xff1a; #include <stdio.h> int main() {int arr1[]{11,33,23,542,12233,5443,267,456,234,453};int arr2[]{21,123,432,45,234,534,6517,678,879,1};int maxarr1[0];for(int i1;i<10;i){if(arr1[i]>max){maxarr1[i];}}printf("%d\…

蓝桥杯练习系统(算法训练)ALGO-956 P0702 strcmp 函数

资源限制 内存限制&#xff1a;256.0MB C/C时间限制&#xff1a;1.0s Java时间限制&#xff1a;3.0s Python时间限制&#xff1a;5.0s 在C语言中&#xff0c;有一个strcmp函数&#xff0c;其功能是比较两个字符串s1和s2。请编写一个你自己的字符串比较函数my_strcmp&…

设计模式——装饰器模式09

装饰器模式&#xff1a;是在原有基础上进行装饰&#xff08;无修改原来代码&#xff09;&#xff0c;来添加新的功能。 例如下面对普通耳机进行装饰。 设计模式&#xff0c;一定要敲代码理解 修饰对象&#xff08;抽象&#xff09; /*** author ggbond* date 2024年04月07日…

ShardingSphere-ShardingSphere读写分离和数据脱敏

文章目录 一、读写分离1.1 读写分离1.2 读写分离应用方案1.3 分表+读写分离1.4 分库分表+读写分离二、ShardingSphere-JDBC读写分离2.1 创建SpringBoot并添加依赖2.2 创建实体类2.3 创建mapper2.4 配置读写分离2.5 测试测试插入数据测试读测试事务一致性测试负载均衡一、读写分…

appium图像识别之images-plugin插件

在进行App自动化测试的过程中&#xff0c;由于页面的复杂性&#xff0c;需要根据页面的技术实现&#xff0c;通过上下文来切换不同的定位类型&#xff0c;给定位元素的稳定性带来了不小的挑战&#xff1b;图像识别技术则不依赖于页面本身是用什么技术实现的&#xff0c;只要能识…

打卡--MySQL8.0 四 (索引及执行计划)

一、索引的创建与使用 1、索引的分类 MySQL的索引包括普通索引、唯一性索引、全文索引、单列索引、多列索引和空间索引等。 &#xff08;1&#xff09;从 功能逻辑 上说&#xff0c;索引主要有 4 种&#xff0c;分别是普通索引、唯一索引、主键索引、全文索引。 &#xff08;…

【微服务】------服务注册

在 微服务的基建工作 中提到过&#xff0c;在云原生、微服务时代&#xff0c;如果还是手动修改服务地址&#xff0c;是几乎不可完成的工作&#xff0c;需要一种机制完成自动上报和获取服务地址的支撑组件&#xff0c;可以保障服务的快速上线和下线&#xff0c;这就是服务注册/发…

Netty学习——高级篇2 Netty解码技术 备份

接上篇&#xff1a;Netty学习——高级篇1 拆包 、粘包与编解码技术&#xff0c;本章继续介绍Netty的其他解码器 1 DelimiterBasedFrameDecoder分隔符解码器 DelimiterBasedFrameDecoder 分隔符解码器是按照指定分隔符进行解码的解码器&#xff0c;通过分隔符可以将二进制流拆分…

蓝桥2021A组B题

直线 问题描述格式输入格式输出评测用例规模与约定解析参考程序难度等级 问题描述 格式输入 无 格式输出 填空题提交答案即可 评测用例规模与约定 无 解析 题目要求点和点确定一条直线&#xff0c;如果没有多个点在同一条直线只能算一条直线这个条件就很简单。一共21*20个…

【PDF-XSS攻击】Java项目-上传文件-解决PDF文件XSS攻击

文章目录 背景解决pdfbox依赖控制器代码PdfUtils工具类 验证最后源码参考 背景 上传xss-pdf造成存储型xss因为在浏览器直接预览的PDF&#xff0c;而不是预览&#xff0c;所以安全部门认为会有XSS漏洞 解决 安全部门修复建议 1、根据白名单的标签和属性对数据进行过滤&#…

Day1 省选衔接题 思路总结

Day1 省选题 思路 取数 可反悔的贪心。我们开一个双向链表记录此时每个数的前/后一个数是什么。一个简单但不一定正确的贪心策略即为&#xff1a;每次都取走当前值最大的且可取的数&#xff0c;并更新列表。考虑如何使这个贪心思路正确。 设 p r e x pre_x prex​ 表示 x x …

OpenHarmony应用开发引入开源C/C++库---之Har包里的NDK

Har 包 HAR&#xff08;Harmony Archive&#xff09;是静态共享包&#xff0c;可以包含代码、C 库、资源和配置文件。通过 HAR 可以实现多个模块或多个工程共享 ArkUI 组件、资源等相关代码。HAR 不同于 HAP&#xff0c;不能独立安装运行在设备上&#xff0c;只能作为应用模块…

HTML基础(3)

1、内联框架 iframe用于在网页内显示网页&#xff0c;语法如下&#xff1a; <iframe src"URL"></iframe> URL指向隔离页面 hight&#xff0c;weight设置高宽&#xff0c;删除边框将frameborder设置为0 <td> <iframe frameborder"0&qu…

用C代码实现环形缓冲区(ring buf)

用C代码实现环形缓冲区&#xff08;ring buf&#xff09; 概述环境介绍launch.json(没改&#xff09;tasks.json注意 代码ringbuf.cringbuf.hmain.c 测试说明工程代码下载 概述 因嵌入式项目需要&#xff0c;串口接收的数据有很高的周期性发送频率&#xff0c;原方式通过查询接…

VideoGPT:Video Generation using VQ-VAE and Transformers

1.introduction 对于视频展示&#xff0c;选择哪种模型比较好&#xff1f;基于似然->transformers自回归。在没有空间和时间溶于的降维潜在空间中进行自回归建模是否优于在所有空间和时间像素级别上的建模&#xff1f;选择前者&#xff1a;自然图像和视频包括了大量的空间和…

java程序生成exe文件启动时,在没有java环境计算机运行

1.idea项目配置工件 2. 开始构建java程序成jar包 3. 生成exe启动程序 注&#xff1a;下面的输入框中写错了&#xff0c;应该是.\jre才对 4. 在已经选择的生成exe存放文件夹找到已经生成exe启动程序

一文详解静态图和动态图中的自动求导机制

01 静态图与动态图的区别 之前在[1]中提到过&#xff0c;自动求导&#xff08;AutoDiff&#xff09;机制是当前深度学习模型训练采用的主要方法&#xff0c;而在静态图和动态图中对于自动求导的处理是不一样的。作为前置知识&#xff0c;这里简单进行介绍。 我们都知道静态图…

Vue.js------vue基础

1. 能够了解更新监测, key作用, 虚拟DOM, diff算法2. 能够掌握设置动态样式3. 能够掌握过滤器, 计算属性, 侦听器4. 能够完成品牌管理案例 一.Vue基础_更新监测和key 1.v-for更新监测 目标&#xff1a;目标结构变化, 触发v-for的更新 情况1: 数组翻转情况2: 数组截取情况3…