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

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

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

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

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

相关文章

每日一题 — 最大连续 1 的个数III

解法一:暴力枚举 先定义left和right双指针,left先固定在起始位置,遍历right当值等于1的时候,直接跳过,等于0的时候,zero计数器加一当zero等于k的时候,就开始记录此时最大长度是多少然后left加一…

Severt基本使用

severt是让我们自己写一些类,然后把这些类给加载Tomcat中,后续Tomcat收到HTTP请求(来自于浏览器),就会执行到咱们上面写的代码.从而通过这些代码,完成一定的业务逻辑. 创建项目 此处创建的是一种新的项目的形式称为Maven项目,Maven是Java 中的一个的构建…

【Leetcode每日一题】模拟 - 数青蛙(难度⭐⭐)(51)

1. 题目解析 题目链接:1419. 数青蛙 这个问题的理解其实相当简单,只需看一下示例,基本就能明白其含义了。 2.算法原理 一、模拟青蛙叫声的基本逻辑 在模拟青蛙叫声的过程中,我们需要遵循一定的规则来判断何时青蛙会发出声音。…

每日一题(leetcode2529):正整数和负整数的最大计数--二分法

因为需要O(logn)的复杂度,所以考虑使用二分法,先找到负数里面的最大下标(初始值定为-1),再找到第一个正数的下标(初始值定为数组长度值)。最后求出个数并进行比较即可。 …

题目:学习使用按位与 。

题目:学习使用按位与 & 。   There is no nutrition in the blog content. After reading it, you will not only suffer from malnutrition, but also impotence. The blog content is all parallel goods. Those who are worried about being cheated shoul…

Netty 入门应用之Http服务WebSocket

Netty实现Http服务 主要的变化是在初始化器中引入了新的编解码器 一些创建的类作用和Netty HelloWorld的小demo一样我这里就不再次重复了 1、Http服务端代码 public class HttpServer {public static void main(String[] args) {// 创建Reactor// 用来管理channel 监听事件 …

Hot100【十一】:最大子数组和

// 定义dp:以i结尾的最大子数组和 dp[i] max(dp[i-1] nums[i],nums[i]) class Solution {public int maxSubArray(int[] nums) {// 1. 不需要特殊处理// 2. 定义dpint[] dp new int[nums.length];dp[0] nums[0];int maxResult nums[0];// 3. dp递推for (int i …

微服务面试题一

1.SOA、分布式、微服务之间有什么关系和区别? 分布式架构是指将单体架构中的各个部分拆分,然后部署不同的机器或进程中去,SOA和微服务基 本上都是分布式架构的SOA是⼀种⾯向服务的架构,系统的所有服务都注册在总线上,…

【leetcode面试经典150题】21. 反转字符串中的单词(C++)

【leetcode面试经典150题】专栏系列将为准备暑期实习生以及秋招的同学们提高在面试时的经典面试算法题的思路和想法。本专栏将以一题多解和精简算法思路为主,题解使用C语言。(若有使用其他语言的同学也可了解题解思路,本质上语法内容一致&…

TLF9471 - High-Speed CAN FD Transceiver

1 框图描述 2 功能描述 CAN收发器被设计用来承受汽车应用的恶劣条件,并支持12V应用。   SBC的控制器区域网络(CAN)收发器部分在汽车和工业应用中提供高速(HS)差分模式数据传输(最高可达2Mbaud&#xff09…

【Java基础】BigDecimal使用避坑规范

BigDecimal使用 解决浮点型运算时,出现结果失真的问题,比如0.10.2 —示例— public class ErrorCase {public static void main(String[] args) {// 0.30000000000000004System.out.println(0.1 0.2);} }构造方法 把string转成BigDecimal把double转B…

备战蓝桥杯Day40 - 第11届python组真题 - C跑步锻炼

一、题目描述 二、思路 1、使用datetime库中的方法可以很好的解决这个问题。 2、定义起始时间和结束时间,判断是否是周一或者是1号,结果res加上相应的里程数。 3、最后输出 res 即为本题答案。 三、代码实现 import datetimestart datetime.date(2…

深度学习图像处理04:图像分类模型训练实战——动物分类

这篇博文不涉及理论知识,主要通过一个完整的深度学习模型训练流程,直观地了解深度学习图像分类任务。有关理论的部分,之前几篇博文已经涉及基础部分,之后也会对一些理论进行补充。 本文将结合代码,主要介绍三部分内容…

OpenHarmony应用编译 - 如何在源码中编译复杂应用(4.0-Release)

文档环境 开发环境:Windows 11 编译环境:Ubuntu 22.04 开发板型号:DAYU 200(RK3568) 系统版本:OpenHarmony-4.0-Release 功能简介 在 OpenHarmony 系统中预安装应用的 hap 包会随系统编译打包到镜像中&a…

SpringBoot常用注解及其使用示例

Spring Boot是一个用于快速构建Java应用程序的框架,它简化了Spring应用程序的创建和部署过程。 Spring Boot提供了很多注解,用于简化开发过程,提高开发效率。本文将介绍几个Spring Boot常用注解的使用案例,包括Controller、Reques…

MXNet安装指南:亲测简单易上手

I. 介绍 MXNet是一种基于神经网络模型的深度学习框架,由亚马逊公司开发。MXNet具有高效、灵活、易用的特点,支持多种编程语言和多种硬件平台,并已得到广泛的应用和认可。 1.1 MXNet的概述、发展历程和优势 MXNet在2015年正式发布&#xff…

单例模式基本介绍及两种实现方式详解

1. 什么是单例模式 1.1 什么是模式 这里所说的模式,指的是代码的设计模式,这属于程序猿的高阶技能.对于普通的程序猿,写出来的代码没有bug,能跑就行,不用过多地在乎,实际上也很难去设计代码的模式. 但是有些大佬对这一方面十分得…

C++23标准库模块

一、C23 标准库引入了两个命名模块&#xff1a;std 和 std.compat&#xff1a; std 导出 C 标准库命名空间 std 中定义的声明和名称&#xff0c;例如 std::vector。 它还会导出 C 包装器标头的内容&#xff0c;例如 <cstdio> 和 <cstdlib>&#xff0c;提供类似 st…

c#获取Web.Config中的值出现的错误及解决办法

c#获取Web.Config中的值出现的错误及解决办法 1.错误提示 2.原因寻找 问题出在Web.Config文件中 <add key"mchid " value"1495103432"/>//mchid 后面不应该有空格图示如下&#xff1a; 3.改正代码如下&#xff1a; <?xml version"1.0…

022——设计通信帧格式

本期没想好怎么排版以流水账形式展示了 int tcp_server(int argc, char *argv[]) {int server_fd, client_fd; struct sockaddr_in server_addr, client_addr; socklen_t client_len sizeof(client_addr); char *ip_address argv[1]; int port atoi(argv[2]); // 创建T…