Docker入门到精通教程
Docker是什么
Docker是一个开源的应用容器引擎,它基于Go语言并遵从Apache2.0协议开源。容器技术是和我们的宿主机共享硬件资源及操作系统,实现资源的动态分配,在资源受到隔离的进程中运行应用程序及其依赖关系。
Docker可帮助更快地打包、测试以及部署应用程序,并可以缩短从编写到部署运行代码的周期。它的优点包括简化流程、避免选择恐惧症、节省开支等。
使用Docker可以将应用程序和基础设施层隔离,并且能将基础设施当作程序一样进行管理。Docker目前是最流行的Linux容器解决方案。它的基本概念包括镜像(Image)、容器(Container)和仓库(Repository)。镜像是Docker运行容器的前提,仓库是存放镜像的场所。
Docker架构使用C/S结构,即客户端/服务器体系结构。其中,Docker daemon是一个运行在宿主机(DOCKER-HOST)的后台进程。
Docker的应用场景
-
Web 应用的自动化打包和发布。
-
自动化测试和持续集成、发布。
-
在服务型环境中部署和调整数据库或其他的后台应用。
Docker仓库
Docker仓库是用于存储Docker镜像并可以通过Docker pull命令下载的云环境。Docker仓库分为公有仓库和私有仓库,公有仓库包括Docker Hub等开放给用户使用并允许用户管理镜像的仓库,私有仓库则是由用户自行搭建的存放镜像的云环境。在Docker中使用仓库之前需要登录Docker Hub或其他仓库,登录后可以通过Docker search命令查找需要下载的镜像。
Docker镜像
Docker使用
1、查找镜像
Usage: docker search [OPTIONS] TERM
Search the Docker Hub for images
Options:
-f, --filter filter 按照给定条件进行筛选
--format string Pretty-print search using a Go template
--limit int 限制查找个数,默认是25 (default 25)
--no-trunc Don't truncate output
如 docker search jenkins
2、列出本地镜像
docker images
Usage: docker images [OPTIONS] [REPOSITORY[:TAG]]
List images
Options:
-a, --all Show all images (default hides intermediate images)
--digests Show digests
-f, --filter filter Filter output based on conditions provided
--format string Pretty-print images using a Go template
--no-trunc Don't truncate output
-q, --quiet Only show image IDs
3、启动容器
docker run [OPTIONS] IMAGE [COMMAND]
[OPTIONS]常用参数有:
-i:启动一个可交互的容器,并持续打开标准输入。
-t:使用终端关联到容器的标准输入输出上。
-d:将容器放置后台运行
docker run有非常多参数,可以使用--help查看
如docker run hello-world,如果本地没有该镜像,会从仓库查找并拉取
运行交互式的容器
我们通过 docker 的两个参数 -i -t,让 docker 运行的容器实现"对话"的能力:
runoob@runoob:~$ docker run -i -t ubuntu:15.10 /bin/bash
如图,run容器后,命令行显示了root@0123ce188bd8:/#,这个是容器内的命令行。
按Ctrl+D,可以退出容器。
启动容器(后台模式)
使用以下命令创建一个以进程方式运行的容器
runoob@runoob:~$ docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"
2b1b7a428627c51ab8810d541d759f072b4fc75487eed05812646b8534a2fe63
参数-d,指定该容器运行方式为后台模式,返回的一串数字为容器ID,每个容器都有唯一的ID。
4、查看容器
docker ps
Usage: docker ps [OPTIONS]
List containers
Options:
-a, --all 显示所有容器包含已停止容器
-f, --filter filter 根据给定条件过滤
--format string 使用go模板打印容器
-n, --last int
-l, --latest 显示最新创建的容器
--no-trunc 不截断输出
-q, --quiet 只显示容器ID
-s, --size 展示所有文件大小
5、查看容器日志
使用 docker logs 命令,查看容器内的标准输出,常用来排查程序运行出错原因。
runoob@runoob:~$ docker logs 2b1b7a428627
6、停止容器
使用 docker stop 容器id 命令来停止容器:
会输出容器ID
7、重启容器
使用 docker start +容器ID 启动一个已停止的容器:
$ docker start b750bbbcfd88
8、进入容器
进入Docker容器的命令为:
docker exec -it <容器ID或名称> /bin/bash
或者使用简写形式:
docker exec -it <容器ID或名称> sh
如
docker exec -it 7752222e1e1 /bin/bash
该命令会在指定的容器中启动一个交互式终端,允许您在容器内执行命令。容器的ID或名称可以是任何正在运行的容器的标识符。进入容器后,您可以在容器内执行任意命令。
输入exit或者按ctrl+D退出容器
9、删除容器
删除容器使用 docker rm 命令
容器必须先停止再删除。
高阶使用方法
构建镜像
如果已有镜像不满足使用,我们可以创建自己的镜像,需要写Dockerfile文件。
Dockerfile是用来构建Docker镜像的构建文件,它是由一系列命令和参数构成的脚本。
创建一个文件命名为Dockerfile
# 指定基础镜像
FROM ubuntu:latest # 设置工作目录
WORKDIR /app # 将当前目录下的文件复制到容器的工作目录中
COPY . /app # 安装Redis
RUN apt-get update && \ apt-get install -y redis-server && \ apt-get clean # 设置容器启动命令
CMD ["redis-server", "/etc/redis/redis.conf"]
Dockerfile中,我们首先指定了基于Ubuntu的最新版本的基础镜像。
WORKDIR 设置了容器的工作目录为/app,这里目录是指容器内的目录。并将当前目录(宿主机当前目录)的所有文件复制到该目录下。
通过apt-get命令安装Redis
设置容器的启动命令为redis-server /etc/redis/redis.conf,即启动Redis服务器并加载配置文件。
有了这个Dockerfile后,我们可以使用docker build命令来构建镜像:
docker build -t my-redis .
该命令将会在当前目录下构建一个名为my-redis的Redis镜像,其中“.`”表示当前目录。在构建过程中,Docker将会执行Dockerfile中的每一条指令,并输出相应的信息。最终将会生成一个名为my-redis的镜像,可以使用docker images命令来查看所有已安装的镜像。
更新镜像
更新镜像之前,我们需要使用镜像来创建一个容器。
edualiyun@edualiyun:~$ docker run -t -i ubuntu:15.10 /bin/bash
在运行的容器内使用 apt-get update 命令进行更新。
在完成操作之后,输入 exit命令来退出这个容器。
此时ID为e218edb10161的容器,是按我们的需求更改的容器。我们可以通过命令 docker commit来提交容器镜像。
edualiyun@edualiyun:~$ docker commit -m="has update" -a="edualiyun" e218edb10161 edualiyun/ubuntu:v2 sha256:70bf1840fd7c0d2d8ef0a42a817eb29f854c1af8f7c59fc03ac7bdee9545aff8
各个参数说明:
-m:提交的描述信息
-a:指定镜像作者
e218edb10161:容器
edualiday/ubuntu:v2:指定要创建的目标镜像名
docker使用实例
安装jenkins
docker pull jenkins
docker run --name jenkins -p 8080:8080 -p 50000:50000 -v jenkins_home:/var/jenkins_home --restart always -d jenkins/jenkins
它创建并启动了一个名为'jenkins'的Docker容器。参数的解释:
- 'docker run': Docker的一个命令,用于从Docker镜像创建容器并启动它。
- '--name jenkins': 给创建的容器命名为'jenkins'。
- '-p 8080:8080': 端口映射[宿主机端口:容器端口],将容器内部的8080端口映射到宿主机器的8080端口。
- '-p 50000:50000': 另一组端口映射,将容器内部的50000端口映射到宿主机器的50000端口。
- '-v jenkins_home:/var/jenkins_home': 数据卷映射,将宿主机上的'jenkins_home'目录映射到容器内的'/var/jenkins_home'目录。
- '--restart always': 设置容器的重启策略为'always',即无论容器是启动还是停止,都会在退出后自动重启。
- '-d jenkins/jenkins': -d容器放置后台运行,使用'jenkins/jenkins'这个Docker镜像来创建并启动容器。
安装nginx
Docker 安装 Nginx-CSDN博客
相关文章:

Docker入门到精通教程
Docker是什么 Docker是一个开源的应用容器引擎,它基于Go语言并遵从Apache2.0协议开源。容器技术是和我们的宿主机共享硬件资源及操作系统,实现资源的动态分配,在资源受到隔离的进程中运行应用程序及其依赖关系。 Docker可帮助更快地打包、测…...

Java 对象是什么样子的?
Java 对象是什么样子的? class Student{ int age; String name; }Student s new Student(18, “zhangsan”); 这里的 s 变量,就是我们常说的引用,这里是强引用。指向对象中的 Java对象。 很多人可能认为,堆中存储了 age 18, na…...

自动驾驶的法律和伦理问题
随着自动驾驶技术的不断发展,出现了一系列与法律和伦理有关的问题。这些问题涵盖了自动驾驶的法律框架、道路规则以及伦理挑战。本文将探讨这些问题,并分析自动驾驶所带来的法律和伦理挑战。 自动驾驶的法律框架 自动驾驶的法律框架是制定和管理自动驾…...
Uniapp 增加百度统计代码
参考:https://blog.csdn.net/qq_37860634/article/details/131383304...

pyflink 环境测试以及测试案例
1. py 的 环境以来采用Anaconda环境包 安装版本:https://www.anaconda.com/distribution/#download-section Python3.8.8版本:Anaconda3-2021.05-Linux-x86_64.sh 下载地址 https://repo.anaconda.com/archive/ 2. 安装 bash Anaconda3-2021.05-Linux-x…...

EtherNet/IP转Modbus TCP协议网关的接口
远创智控的YC-EIPM-TCP网关产品,它有什么作用呢?一起来了解一下吧! 远创智控YC-EIPM-TCP网关产品可以通过各种数据接口和工业领域的仪表、PLC、计量设备等产品连接,实时采集这些设备中的运行数据、状态数据等信息,并把…...

视频集中存储/视频监控管理平台EasyCVR如何免密登录系统?详细操作如下
视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同,支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。音视频流媒体视频平台EasyCVR拓展性强,视频能力丰富,具体可实现视频监控直播、视频轮播、视频录像、…...

京东商品详情API接口(标题|主图|SKU|价格|库存..)
京东商品详情接口的应用场景有很多,以下为您推荐几种: 电商平台集成:如果想要实现商品查询、购买、支付等功能,提高自身平台的电商能力,可以将京东API接口集成到自己的电商网站或应用程序中。第三方开发者插件&#x…...
Istio Service Entry介绍
目录 ServiceEntry.Resolution 解析模式 STATC模式 场景一:将http地址:httpbin.org:80 解析到192.168.1.1:8080 场景二:将TCP地址:httpbin.org:8080 解析到192.168.1.1:8080 DNS模式 场景一:服务网格内部访问外部…...

设备巡检管理系统有什么用?企业如何提高生产效率和生产安全?
在当今工业生产领域,设备巡检的重要性不言而喻。然而,传统巡检方式存在的诸多问题,如数据不规范、漏检误检等,严重制约了企业生产效率和产品质量。为解决这一问题,我们推出了一款设备巡检管理系统——“的修”工单管理…...
浅谈单例模式
饿汉式懒汉式/Double check(双重检索)静态内部类枚举单例 饿汉式 private static final DispatchSingleton instence new DispatchSingleton();public static DispatchSingleton getInstence() {return instence;} 饿汉式是在jvm加载这个单例类的时候&…...

【非root用户、CentOS系统】中使用源码安装gcc/g++的教程
1.引言 系统:CentOS-7.9 显卡驱动版本:460 CUDA Version: 11.2 🌼基于本地环境选择安装gcc-10.1.0 👉 gcc下载网址 gcc与cuda版本的对应关系: 2.安装说明 下载好对应的gcc的安装包并解压: 打开gcc-10.1.0/…...

Qemu镜像安全加密测试
文章目录 简介1.已经过时的qemu自带的加密方式介绍1.1.创建secret uuid的xml1.2.产生uuid1.3.给secret赋值1.4.创建一个存储池1.5.在存储池中创建一个镜像1.6.在虚拟机中使用该镜像 2.弃用以上加密方式2.1.原作者Daniel Berrange的观点2.2.Markus Armbruster更深入的操作 3. LU…...

Ubuntu 18.04 LTS中cmake-gui编译opencv-3.4.16并供Qt Creator调用
一、安装opencv 1.下载opencv-3.4.16的源码并解压 2.在解压后的文件夹内新建文件夹build以及opencv_install 3.启动cmake-gui并设置 sudo cmake-gui(1)设置界面中source及build路径 (2)点击configure,选择第一个def…...
SpringBoot (2) yaml,整合项目
目录 1 YAML配置文件 1.1 书写规则 1.2 代码示例 1.3 用yaml进行复杂数据绑定 2 整合日志 2.1 日志配置 3 整合web 3.1 默认配置 3.2 web应用开发方式 3.2.1 全自动 3.2.2 全手动 3.2.3 手自一体(推荐) 4 整合mybatis 4.1 导包 4.2 application.yaml 4.3 dao接…...

django建站过程(2)创建第一个应用程序页面
创建第一个应用程序页面 设置第一个页面【settings.py,urls.py,views.py】settings.pyurls.pyviews.py django是由一系列应用程序组成,协同工作,让项目成为一个整体。前面已创建了一个应用程序baseapp,使用的命令 python manage.py startapp baseapps这…...

竞赛 深度学习人体语义分割在弹幕防遮挡上的实现 - python
文章目录 1 前言1 课题背景2 技术原理和方法2.1基本原理2.2 技术选型和方法 3 实例分割4 实现效果5 最后 1 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 深度学习人体语义分割在弹幕防遮挡上的应用 该项目较为新颖,适合作为竞…...

网络编程开发及实战(下)
一、IO模型 一、基本概念 (一)I/O基本概念 1、基本概念 1)一个完整I/O分为两个阶段: 用户进程空间->内核空间 内核空间->设备空间(磁盘、网卡) 2)内存I/O(无名管道&…...

(H5轮播)vue一个轮播里显示多个内容/一屏展示两个半内容
效果图 : html: <div class"content"><van-swipeclass"my-swipe com-long-swipe-indicator":autoplay"2500"indicator-color"#00C4FF"><van-swipe-itemclass"flex-row-wrap"v-for"(items, index) in M…...

【Proteus仿真】【Arduino单片机】蜂鸣器
文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真Arduino单片机控制器,使用蜂鸣器等。 主要功能: 系统运行后,蜂鸣器播放音乐。 二、软件设计 /* 作者:嗨小易(QQ&#x…...

19c补丁后oracle属主变化,导致不能识别磁盘组
补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...
Java 语言特性(面试系列2)
一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...
渲染学进阶内容——模型
最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...

QT: `long long` 类型转换为 `QString` 2025.6.5
在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...

什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...
Linux离线(zip方式)安装docker
目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1:修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本:CentOS 7 64位 内核版本:3.10.0 相关命令: uname -rcat /etc/os-rele…...

Unity UGUI Button事件流程
场景结构 测试代码 public class TestBtn : MonoBehaviour {void Start(){var btn GetComponent<Button>();btn.onClick.AddListener(OnClick);}private void OnClick(){Debug.Log("666");}}当添加事件时 // 实例化一个ButtonClickedEvent的事件 [Formerl…...