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…...
Flask RESTful 示例
目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题: 下面创建一个简单的Flask RESTful API示例。首先,我们需要创建环境,安装必要的依赖,然后…...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...
Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务
通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...
MySQL 8.0 OCP 英文题库解析(十三)
Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...
【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...
Linux --进程控制
本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...
2023赣州旅游投资集团
单选题 1.“不登高山,不知天之高也;不临深溪,不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...
React---day11
14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store: 我们在使用异步的时候理应是要使用中间件的,但是configureStore 已经自动集成了 redux-thunk,注意action里面要返回函数 import { configureS…...
android13 app的触摸问题定位分析流程
一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...
