【Docker】快速入门手册

news2025/1/19 23:02:02

目录

1.概述

1.1.安装

1.2.阿里云镜像加速

1.3.运行原理

2.常用操作

2.1.帮助命令

2.2.镜像操作

2.3.容器操作

2.3.1创建、启动

2.3.2.退出、停止

2.3.3.进入交互式界面

2.3.4.守护式容器交互

2.3.5.查看

2.3.6.删除

2.3.7.拷贝

3.容器数据卷

3.1.概述

3.2.使用

4.数据卷容器

4.1.概述

4.2.使用

5.安装Mysql示例

6.处理命令找不到

7.DockerFile

7.1.示例解析

7.2.构建过程

7.3.指令

7.4.案例分析

案例一

案例二

8.推送镜像


1.概述

Docker是一个开源的应用容器引擎。

Docker的理念类似于Windows的镜像系统:

原生的Windows系统拿到手以后要安装一系列的东西,如果每个人拿到手都要重新安装会很麻烦,可以一个人安好一份完整的以后做出镜像系统,其他人直接拿来就用。

Docker支持将安装好的软件编译打包成镜像,其他服务器直接拿镜像来运行就可以。

运行的一个镜像就是一个容器。

Docker主机(host):安装了docker程序的机器。(docker是直接安装在系统之上的)

Docker客户端(client):就是一个客户端程序,连接docker主机,通过命令行或者其他工具来进行操作。

Docker仓库(registry):用来保存各种打包好的docker镜像。

Docker镜像(image):打包好的软件。

Docker容器(container):镜像启动后的实例称为一个容器。每一个镜像运行一次就会产生一个容器。容器是独立运行的一个或者一组应用。

仓库镜像容器是docker的三大要素

1.1.安装

Docker要求Linux的内核版本必须3.10

查看内核版本:uname –r

升级内核版本:yum update

安装docker依赖:yum install  -y epel-release

安装docker:yum install docker

启动docker:systemctl start docker

停止docker: systemctl stop docker

查看docker版本号:docker –v

开机自启docker:systemctl enable docker

配置文件: etc/sysconfig/  路径下名为docker的文件

1.2.阿里云镜像加速

1.3.运行原理

所有操作进程与守护进程打交道,守护进程负责创建一个个的docker容器来跑镜像。

2.常用操作

2.1.帮助命令

查看docker版本信息  docker version

查看docker详细信息  docker info

查看全部命令  docker  --help

2.2.镜像操作

docker的镜像都存在  docker hub上面

查找全部镜像:

docker search 镜像名

查找超过某star数的镜像:

docker search  镜像名  -f  stars=数量值

拉取镜像:

docker pull 镜像名  或者  docker pull 镜像名:tag(tag版本号,在hub上可以查找到)

不跟tag号,默认拉取latest版本。

查看当前操作系统中所有镜像:docker images

查看当前操作系统中的所有当前镜像的ID:image  -q

显示当前操作系统中的所有镜像的ID:image  -qa

删除镜像: docker rmi IMAGE ID(可以通过docker images看到)

删除镜像前要删除该镜像的所有容器才能删除镜像成功

2.3.容器操作

运行镜像就会产生一个容器

2.3.1创建、启动

1.创建容器

run命令会创建一个新的容器。

docker run [options] 镜像名 [command] arg

创建交互式容器:

交互式容器允许docker外的进程直接与docker内的容器进行交互

一般会it命令连用,给予交互式容器一个伪输入终端,以便进行交互。

创建后,会自动进入容器中的一个伪终端界面。

创建守护式容器:

守护式容器,即启动一根守护进程,docker外的进程不能直接与docker内的容器进行交互,而是通过守护进程交互,守护进程再与docker中的容器交互。

创建后,会打印容器ID,然后立即自杀!

原因是创建交互式进程的时候有个伪终端挂着,等待输入,使得容器一直处于一种被使用的状态,而守护式进程启动后,docker发现这个容器什么事儿都没做,因此直接kill掉。

2.启动容器

start命令会启动一个已有的容器。

docker start CONTAINER ID(可以通过docker ps-a命令查看)

2.3.2.退出、停止

退出容器

容器停止并退出:(在交互界面)exit

容器退出但不停止:ctrl+P+Q

停止容器

温柔停止(点关机键关机):

docker stop CONTAINER ID(可以通过docker ps-a命令查看)

强制停止(拔电源):

docker kill CONTAINER ID

2.3.3.进入交互式界面

docker attach 容器ID

2.3.4.守护式容器交互

在宿主机上使用:

docker exec -it 容器ID

-it会给出一个虚拟终端,但是此时不再是直接与容器交互。

而是通过exec指令与守护线程进行交互,守护进程再与容器进行交互。

2.3.5.查看

查看运行中的容器详细信息:docker ps

查看运行中的容器ID:docker ps -q

查看所有容器详细信息:docker ps  -a

查看所有容器ID:docker ps -qa

2.3.6.删除

一般删除:

要求容器处于停止状态。

docker rm CONTAINER ID

强制删除:

可以强制删除运行状态中的容器

docker rm -f CONTAINER ID

删除多个容器:

2.3.7.拷贝

将容器内的文件拷贝到容器外的宿主机上:

3.容器数据卷

3.1.概述

类似于redis的RDB和AOF

数据卷,即将容器内部的数据持久化到宿主机上,也可以将宿主机上的数据同步进容器中来。两边同时维护数据卷,数据卷的改动,对两边都生效。

3.2.使用

docker  run  –it  -v /宿主机绝对路径目录:/容器内目录  镜像名

文件夹不需要新建,执行该条指令后会自动在宿主机容器的对应路径下生成该文件夹

4.数据卷容器

4.1.概述

类似于redis的主从复制。某个容器挂载数据卷,其他容器通过挂载这个卷容器实现数据共享,直接挂载数据卷的这个容器称为数据卷容器。

4.2.使用

挂载数据卷容器要配合dockerfile来实现,主要是要使用dockerfile在数据卷容器中编写脚本,在脚本中声明挂载的数据卷有哪些。然后将数据卷容器打包成镜像,要使用数据卷容器的其他容器创建容器的时候直接就使用数据卷容器的镜像,这样创建出来的子容器才会挂载数据卷容器成功。

主要是因为要声明,挂载的数据卷关系,否则,即使挂载了节点,也不会挂载到父容器的数据卷。

构建数据卷容器镜像:

dockerfile的内容为:

数据卷容器挂载数据卷:

其他容器挂载数据卷容器:

5.安装Mysql示例

docker run

-p 3306:3306

--name mysql01

-v /mysql/conf:/etc/mysql/config.d

-v /mysql/logs:/logs

-v /mysql/data:/var/lib/mysql

-e MYSQL_ROOT_PASSWORD=admin

-d mysql:5.6

如果因为权限问题run失败,则加上--privileged=true来强制获得权限

docker run -p 3306:3306  --name mysql01 --privileged=true  -v /mysql/conf:/etc/mysql/config.d -v /mysql/logs:/logs  -v /mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=admin  -d mysql:5.6

处理navcat连接失败:

Docker MySql报2059错误: Authentication plugin 'caching_sha2_password' cannot be loaded_docker authentication plugin'caching-CSDN博客

navcat连接的时候注意先关闭Linux的防火墙!!!

<1> docker  start  mysql        进入MySql

<2> docker  ps  -a       查出自己创建的container(容器)的ID

<3> docker  exec  -it  63c9e29aelef  bash   (每个人创建的container ID都不一样)

<4> mysql  --user=root  --password

<5>  ALTER  USER  'root'  IDENTIFIED  WITH  mysql_native_password  BY  '1234567';  

6.处理命令找不到

处理vi或者vim命令找不到:

apt-get update

apt-get install vim

7.DockerFile

dockerFile,用来构建Docker镜像的构建文件,是一个由一系列命令和参数构成的脚本。

构建一个Docker镜像分为三步:

  1. dockerFile

编写一个dockerFile

  1. docker build

执行docker build指令

  1. run

运行镜像

7.1.示例解析

dockerFile是以键值对的方式指定的一组命令参数,格式为:

命令  参数

命令后必须带单数,空命令不合法。

from scratch:

继承scratch镜像,scratch是基础镜像,所有镜像只有继承了scratch才会成为一个镜像,类似于JAVA中的Object类。

maintainer:

作者信息,大家约定的格式是作者+邮箱

ADD:

LABEL:

标签,关于镜像的一些详细信息。

CMD:

设置镜像进来后的路径在哪儿。

即docker run -it XXX后进来的路径

7.2.构建过程

docker镜像的构建过程,即dockerFile的从上到下执行。dockerFile从上到下执行,每一条指令都会创建一个新的镜像层,并对镜像进行提交,执行的效果就会是从一个基础镜像开始对镜像进行层层封装,最后包装出一个大的镜像来。

7.3.指令

FROM:

FROM,指定父镜像,可以是基础镜像,也可以是其他镜像,反正本质上一定会是继承自基础镜像。

MAINTAINER:

镜像维护者的姓名和邮箱。

RUN:

RUN,构建时候额外需要运行的命令,这条指令是当前平台的指令,遇到RUN指令就会运行RUN后面该条指令。入一条Linux指令或者Windows指令,一般是用来在当前平台做一些资源或者权限的操作,比如创建文件夹,给文件夹进行权限限定等操作。

EXPOSE:

该镜像对外暴露的端口号。

WORKDIR:

指定在创建容器后,终端登录进来的默认路径,

如指定 /data 终端登录进来就会是在/data路径下。

ENV:

用来设置环境变量。

ADD、COPY:

将一些资源加入镜像中,

ADD会加载后并解压,COPY只会加载。

VOLUME:

用来建里容器数据卷。

CMD、ENTRYPOINT:

用来指定容器启动时需要运行的命令,这条命令是指当前平台的命令,如Linux的指令或者Windows的指令。

CMD可以允许存在多个,但是后面的会覆盖前面的,也就是说只有最后一个才有效。

ENTRUPOINT可以运行存在多个,后面的会追加到前面的去,也就是说会叠加生效。

ONBUILD:

指定当前镜像被继承时所触发的动作。

7.4.案例分析

案例一

docker hub上存在一个精简版的centos镜像,该镜像中的centos只有内核,没有其余任何功能,可以通过编写dockerFile对其进行二次打包,为其增加vim功能和net-tools中的功能。

编写完dockerFile后,使用docker的build指令来构建镜像:

-f 指定dockerFile的位置,-t指定构建后的镜像的名称和路径 . 表示当前路径。

案例二

该案例使用centOS为父镜像,为其加入tomcat、JDK,构成一个tomcat镜像。

该案例主要是为了展示ADD、COPY的作用。

8.推送镜像

推送镜像的前提是镜像要运行起来,因为推送的时候要使用到镜像的容器来向远端仓库上进行推送。

docker的推送和git的推送很像,都是commit然后push

commit:

push:

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

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

相关文章

阅读记录:RNNLOGIC: LEARNING LOGIC RULES FOR REASON-ING ON KNOWLEDGE GRAPHS

一、介绍 本文研究知识图谱推理的学习逻辑规则。 逻辑规则在用于预测时提供可解释的解释&#xff0c;并且能够推广到其他任务。现有方法要么面临在大搜索空间中搜索的问题&#xff08;例如神经逻辑编程&#xff09;&#xff0c;要么由于奖励稀疏而导致优化无效&#xff08;例…

Vue-Cli3 - 从安装 nodejs 配置环境 ~ 搭建 cli 脚手架项目全过程

目录 前言提示 一、安装 & 配置 nodejs 1.1、安装 nodejs 1.2、配置必要目录 1.3、配置环境变量 1.4、测试 安装&配置 是否成功 1.5、安装淘宝镜像 1.5、cnpm 安装&#xff08;推荐安装&#xff09; 二、vue-cli3 创建项目 2.1、vue-cli2 和 vue-cli3 主要区…

玩转WEB接口之三 【HTTPS证书申请】

文章目录 一、概述主要流程二、域名注册1. 购买域名2. 购买服务器3. 域名备案4. 域名解析 三、证书申请1. 申请途径2. 阿里云3个月免费SSL申请3. freessl 1年免费SSL申请 四、证书验证1. springboot 代码验证1.) 证书转换2.) 验证结果3.) 源码传送 2. nginx验证 一、概述 HTTP…

行测-资料:2. 一般增长率、增长量

1、一般增长率 1.1 百分数和百分点 50%&#xff0c;20% 1.2 增长率和倍数 1.5&#xff1b;50 1.3 成数和翻番 1.4 增幅&#xff0c;降幅&#xff0c;变化幅度 A&#xff0c;A&#xff0c;D B&#xff0c;高于全国增速 2.3 个百分点&#xff0c;21.8 - 2.3 19.5。 5%&#xff0…

数字图像处理(实践篇)三十四 OpenCV-Python绘制椭圆

目录 一 涉及的函数 二 实践 一 涉及的函数 cv2.ellipse(img,center,axes,angle,start_angle,end_angle,color,thickness) 参数: ①<

精品基于Uniapp+ssm宠物时光管理系统App

《[含文档PPT源码等]精品基于Uniappssm宠物时光管理系统App》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功&#xff01; 软件开发环境及开发工具&#xff1a; 开发语言&#xff1a;Java 后台框架&#xff1a;ssm 安卓框架&#xff1a…

【目标跟踪】多相机环视跟踪

文章目录 一、前言二、流程图三、实现原理3.1、初始化3.2、输入3.3、初始航迹3.4、航迹预测3.5、航迹匹配3.6、输出结果 四、c 代码五、总结 一、前言 多相机目标跟踪主要是为了实现 360 度跟踪。单相机检测存在左右后的盲区视野。在智能驾驶领域&#xff0c;要想靠相机实现无…

工厂生产管理MES系统,开源代码+维护

商业开源的一套超有价值的JAVA制造执行MES系统源码 亲测 带本地部署搭建教程 教你如何在本地运行运行起来。 开发环境&#xff1a;jdk11tomcatmysql8springbootmaven 需要源码&#xff0c;私信我获取&#xff0c;可以项目合作维护一、系统概述&#xff1a; MES制造执行系统&…

2024年最新 MySQL的下载、安装、启动与停止

一、MySQL的下载 MySQL最常用的2个版本&#xff1a; 社区版&#xff1a;免费开源&#xff0c;自由下载&#xff0c;不提供官方技术支持&#xff0c;大多数普通用户选择这个即可。企业版&#xff1a;需要付费&#xff0c;不能在线下载&#xff0c;可以使用30天&#xff0c;提供…

SpringBoot深入解析:掌握自动装配机制及其定制化原理

推荐一款我一直在用的ChatGPT4.0国内站点&#xff0c;每日有免费使用额度&#xff0c;支持PC、APP、VScode插件同步使用 SpringBoot篇&#xff1a;SpringBoot的自动装配原理 SpringBoot是一个旨在简化Spring应用初始搭建以及开发过程的框架。它利用了Spring框架的依赖注入特性…

nodejs学习计划--(七)express框架

express框架 1. express介绍 express 是一个基于 Node.js 平台的极简、灵活的 WEB 应用开发框架&#xff0c;官方网址&#xff1a;https://www.expressjs.com.cn/ 简单来说&#xff0c;express 是一个封装好的工具包&#xff0c;封装了很多功能&#xff0c;便于我们开发 WEB …

【GitHub项目推荐--不错的 React 开源项目】【转载】

用 React Flow 连接你的想法 用 React Flow 连接你的想法&#xff0c;这是一个高度可定制的库&#xff0c;基于 React 用于构建基于节点的 交互式 UI、编辑器、流程图和图表。 开源地址&#xff1a;https://github.com/wbkd/react-flow Bulletproof React 一个简单、可扩展且…

Vue3+Vite使用Puppeteer进行SEO优化(SSR+Meta)

1. 背景 【笑小枫】https://www.xiaoxiaofeng.com上线啦 资源持续整合中&#xff0c;程序员必备网站&#xff0c;快点前往围观吧~ 我的个人博客【笑小枫】又一次版本大升级&#xff0c;虽然知道没有多少访问量&#xff0c;但我还是整天没事瞎折腾。因为一些功能在Halo上不太好实…

C++ 右值引用 std::move和std::forward的使用

前言 右值引用&#xff0c;std::move(移动语义)和std::forward(完美转发)都是C11里面的特性。 使用右值引用和移动语义&#xff0c;可以避免无谓的复制&#xff0c;提供了程序性能。 右值引用 在说明右值引用之前&#xff0c;先说下什么是左值&#xff0c;什么是右值。 左值…

Stable Diffusion与Midjourney:如何做出明智之选?

Stable Diffusion与Midjourney&#xff1a;如何做出明智之选&#xff1f; 在人工智能领域中&#xff0c;Stable Diffusion和Midjourney是两个备受瞩目的技术。它们各自具有独特的特点和优势&#xff0c;但选择哪一个更适合您的需求呢&#xff1f;本文将为您详细分析两者的差异…

Unity中创建Ultraleap 3Di交互项目

首先&#xff0c;创建新的场景 1、创建一个空物体&#xff0c;重命名为【XP Leap Provider Manager】&#xff0c;并在这个空物体上添加【XR Leap Provider Manager】 在物体XP Leap Provider Manager下&#xff0c;创建两个子物体Service Provider(XR)和Service Provider(…

蓝桥杯省赛无忧 课件46 第5次学长带练配套课件

01 聪明的小羊肖恩 02 阿坤老师的独特瓷器 03 妮妮的月饼工厂 04 可凑成的最大花束数 05 四个瓶子的问题 06 如今扔是遥远的理想之城

12.5内存操作流(血干JAVA系列)

12.5内存操作流 12.5内存操作流ByteArraylnputStream类的主要方法ByteArrayOutputStream 类的主要方法【例12.33】使用内存操作流完成一个大写字母转换为小写字母的程序 12.5内存操作流 在 流 的 操 作 中 除 了 进 行 文 件 的 输 入 与 输 出 操 作 之 外 &#xff0c; 也 可…

Modern C++ std::unique_ptr的实现原理

​ unique_ptr是一个非常简单的类,没有计数没有原子操作,非常类似纯指针。 它的类定义也非常简单: 它针对数组做了模板偏特化,因为它得支持数组操作比如Arr[i]。 unique_ptr的本质就是std::tuple, 里面第一项为指针指向管理对象,第二项为deleter:是一个函数指针或仿函数…

什么是网络?

你是一台电脑&#xff0c;你的名字叫 A 很久很久之前&#xff0c;你不与任何其他电脑相连接&#xff0c;孤苦伶仃。 直到有一天&#xff0c;你希望与另一台电脑 B 建立通信&#xff0c;于是你们各开了一个网口&#xff0c;用一根网线连接了起来。 用一根网线连接起来怎么就能&…