Docker 学习笔记

Play With Docker一个免费使用的基于web界面的Docker环境

常用docker命令

可使用docker COMMAND --help查看命令的用法

Docker镜像相关

  • 1、docker image pull:用于下载镜像,镜像从远程镜像仓库服务的仓库中下载,默认从Docker Hub的仓库中拉取
# 格式:docker pull [OPTIONS] NAME[:TAG|@DIGEST]
# 说明:如果给出tag,一般拉取latest,name一般为username/repository,digest为镜像摘要可不给出
docker image pull ubuntu:latest
# 这个拉取标签为latest的ubuntu官方镜像,latest: Pulling from library/ubuntu,latest不一定是最新镜像
  • 2、docker image ls:列出本地Docker主机上存储的镜像

  • 3、docker image inspect:查看镜像的细节,包括镜像层数据和元数据

# docker image inspect [OPTIONS] IMAGE [IMAGE...]
# inspect后一般跟repository name或image id
  • 4、docker image rm:用于删除镜像。如果镜像存在关联的容器,并且容器处于运行(Up)或停止(Exit)状态时,不允许删除该镜像。rm后可跟repository或image id

  • 5、dicker image search:从Docker Hub查找镜像

  • 6、docker image build:根据Dockerfile构建镜像

# 例如:使用当前目录的 Dockerfile 创建镜像,标签为 runoob/ubuntu:v1。
docker build -t yeshan333/ubuntu:latest .
  • 7、docker image history:用于查看镜像构建的相关信息

Docker容器相关

  • 1、docker container run:用于启动新容器
# 格式:docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
# 常用options:
# -d: 后台运行容器,并返回容器ID;
# -i: 以交互模式运行容器,通常与 -t 同时使用;
# -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
# -P: 随机端口映射,容器内部端口随机映射到主机的高端口
# -p: 指定端口映射,格式为:主机(宿主)端口:容器端口
# --name="container-name": 为容器指定一个名称;# 示例
docker container run -it ubuntu:latest /bin/bash
# 说明:-it使容器具备交互性并与终端连接,命令最后表明运行容器中的Bash Shell程序
  • 2、docker container ls:列出所有运行状态的容器可用docker ps代替,如果加个*-a附加参数,会列出所有容器(包括处于停止状态的容器)

  • 3、docker container stop:停止运行中的容器,并将其状态设置为Exited(0),stop后跟container name或container id

  • 4、docker container rm:用于删除停止运行的容器,rm后跟container name或container id,使用-f参数可强制删除运行中的容器

  • 5、docker container exec:用于连接一个处于运行状态的容器

# 例如:
docker container exec -t <container-name or container-id> bash
# 该命令会将docker主机中的shell连接到一个运行中的容器,在容器内部启动一个新的bash shell进程
  • 6、docker container start:用于重启处于停止(Exited)状态的容器,start后跟container name或container id

  • 7、docker container inspect:查看容器的配置信息和运行时信息,inspect后跟container name或container id

  • 8、快捷键Ctrl+PQ用于断开docker主机的shell终端与容器终端的连接,并在退出后保证容器在后台运行

应用容器化

(Containerizing|Dockerizing)即将应用整合到容器中并且运行的过程

应用容器化的一般步骤

  • 1、编写应用代码
  • 2、创建Dockerfile,其中包括当前应用的描述、依赖以及如何运行这个应用
  • 3、对Dockerfile执行docker image build命令
  • 4、等待Docker将应用程序构建到Docker镜像中

Once your app is containerized (made into a Docker image), you’re ready to ship it and run it as a container.《Docker Deep Dive》

docker deep dive

使用Dockerfile定制镜像

  • Dockerfile最佳实践
  • 使用Dockerfile定制镜像

Dockerfile中以#开头的都是注释行,除注释之外,每一行都是一条指令 指令的的一般格式:INSTRUCTION argument,INSTRUCTION一般都为大写

示例Dockerfile:https://github.com/yeshan333/psweb

FROM alpineLABEL maintainer="nigelpoulton@hotmail.com"# Install Node and NPM
RUN apk add --update nodejs nodejs-npm# Copy app to /src
COPY . /srcWORKDIR /src# Install dependencies
RUN  npm installEXPOSE 8080ENTRYPOINT ["node", "./app.js"]
  • 说明:
    • 每个Dockerfile文件文件的第一行一般都是FROM指令。FROM指定的镜像会作为当前镜像的一个基础镜像层,当前应用的剩余内容会作为新的镜像层添加到基础镜像层之上。,FROM建议引用官方镜像
    • LABEL指定当前镜像维护者,给镜像使用者一个沟通渠道
    • RUN apk add --update nodejs nodejs-npm将当前应用的依赖安装到镜像中,RUN指令会新建一个镜像层存储这些内容
    • COPY . /src会将应用相关文件从构建上下文复制到当前镜像中,这会新建一个镜像层
    • WORKDIR /src会为Dockerfile中未执行的指令设置工作目录
    • RUN npm install在当前工作目录中为应用安装依赖,这会新建一个镜像层
    • EXPOSE 8080对外提供一个web服务端口
    • ENTRYPOINT ["node", "./app.js"]指定了当前镜像的入口程序,container运行时就会运行

构建镜像

使用docker image build根据Dockerfile制作镜像,示例:

# -t用于指定制作好的镜像的名字及标签,通常 name:tag 或者 name
# 最后的 . 表示使用当前目录作为构建上下文
docker image build -t web:latest .

使用docker image history web:latest可以查看构建镜像过程中执行了哪些指令

推送镜像到Docker Hub

  • 推送镜像前建议使用以下命令给镜像打新标签
    # new-tag建议以自己的 DockerHub ID/new-tag 的格式命名,方便推送到自己的repo
    docker image tag <current-tag> <new-tag>
  • 使用docker image push <tag-name>推送镜像,推送前需要docker login,记得测试打包好的应用再推送!!!

Dockerfile常用指令

指令说明
FROM指定要构建的镜像的基础镜像,一般为Dockerfile文件第一行
RUN用于在镜像中执行命令,会新建一个镜像层
COPY一般用于将应用代码copy到镜像中,这会新建一个镜像层
WORKDIR用于设置Dockerfile中未执行的指令的工作目录
ENTRYPOINT指定镜像以容器方式启动后默认运行的程序, ENTRYPOINT 的命令不会被docker run指定要执行的命令覆盖
CMD指定容器启动时执行的命令,一个 Dockerfile 中只能有一个 CMD 指令,如果写了多个,那么只有最后一个会执行。CMD 和 ENTRYPOINT 同时存在时,CMD 中的内容会变成 ENTRYPOINT 中指令命令的默认参数,该参数可以被 docker run 时设置的命令覆盖
ENV设置镜像中的环境变量
EXPOSE记录应用所使用的网络端口

更多:

  • Dockerfile指令详解
  • Dockerfile reference

> 本文由博客群发一文多发等运营工具平台 [OpenWrite](https://openwrite.cn?from=article_bottom) 发布

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

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

相关文章

ssm基于Vue.js的在线购物系统的设计与实现论文

摘 要 随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&#xff0c;通过科技手段提高自身的优势&#xff1b;对于在线购物系统当然也不能排除在外&#xff0c;随着网络技术的不断成熟&#xff0c;带动了在线购物系统&#xff0c;它彻底改变了过去传统的…

OKR与敏捷开发、精益创业等方法如何协同工作?

在快速变化的市场环境中&#xff0c;企业需要更加灵活和高效地应对各种挑战。目标与关键成果法&#xff08;OKR&#xff09;、敏捷开发以及精益创业等方法&#xff0c;作为现代企业管理的重要工具&#xff0c;各自在推动企业发展、提高团队效率、优化产品迭代等方面发挥着不可或…

社科赛斯考研:二十二载岁月铸辉煌,穿越周期的生命力之源

在考研培训行业的浩瀚海洋中&#xff0c;社科赛斯考研犹如一艘稳健的巨轮&#xff0c;历经二十二载风礼&#xff0c;依然破浪前行。在考研市场竞争白热化与学生对于考研机构要求越来越高的双重影响下&#xff0c;社科赛斯考研却以一种分蘖成长的姿态&#xff0c;扎根、壮大&…

基于springboot的mysql实现读写分离

前言: 首先思考一个问题:在高并发的场景中,关于数据库都有哪些优化的手段&#xff1f;常用的有以下的实现方法:读写分离、加缓存、主从架构集群、分库分表等&#xff0c;在互联网应用中,大部分都是读多写少的场景,设置两个库,主库和读库,主库的职能是负责写,从库主要是负责读…

2核4G服务器优惠价格和性能测试,2024年

阿里云2核4G服务器租用优惠价格&#xff0c;轻量2核4G服务器165元一年、u1服务器2核4G5M带宽199元一年、云服务器e实例30元3个月&#xff0c;活动链接 aliyunfuwuqi.com/go/aliyun 活动链接如下图&#xff1a; 阿里云2核4G服务器优惠价格 轻量应用服务器2核2G4M带宽、60GB高效…

【原创】基于分位数回归的卷积长短期神经网络(CNN-QRLSTM)回归预测的MATLAB实现

基于分位数回归的卷积长短期神经网络&#xff08;CNN-QRLSTM&#xff09;是一种用于时间序列预测的深度学习模型&#xff0c;结合了卷积神经网络&#xff08;CNN&#xff09;和长短期记忆网络&#xff08;LSTM&#xff09;&#xff0c;并采用分位数回归技术进行预测。 这个模型…

YOLOV9训练自己的数据集

1.代码下载地址GitHub - WongKinYiu/yolov9: Implementation of paper - YOLOv9: Learning What You Want to Learn Using Programmable Gradient Information 2.准备自己的数据集 这里数据集我以SAR数据集为例 具体的下载链接如下所示&#xff1a; 链接&#xff1a;https:/…

面试题小结

一、什么是虚拟dom 描述真实dom的js对象。 二、DOM操作——怎样添加、移除、移动、复制、创建和查找节点 &#xff08;1&#xff09;创建新节点 createDocumentFragment() //创建一个DOM片段 createElement() //创建一个具体的元素 createTextNode() //创建一个文本节…

全栈的自我修养 ———— uniapp中加密方法

直接按部就班一步一步来 一、首先创建一个js文件填入AES二、创建加密解密方法三、测试 一、首先创建一个js文件填入AES 直接复制以下内容 /* CryptoJS v3.1.2 code.google.com/p/crypto-js (c) 2009-2013 by Jeff Mott. All rights reserved. code.google.com/p/crypto-js/wi…

SpringCloud入门(1) Eureka Ribbon Nacos

这里写目录标题 认识微服务SpringCloud 服务拆分和远程调用服务拆分案例实现远程调用 RestTemplate Eureka注册中心Eureka的结构和作用搭建eureka-server服务注册服务发现 Ribbon负载均衡 LoadBalancedLoadBalancerIntercepor源码解析负载均衡策略饥饿加载 Nacos注册中心安装与…

【NLP】从变形金刚到Transfomer 01

Transformer是一种非常强大的模型&#xff0c;在自然语言处理&#xff08;NLP&#xff09;领域里引起了一场革命。 "从变形金刚到技术革命家&#xff0c;Transformer不再仅是儿时屏幕上的英雄。&#x1f916;✨ 在今天的AI领域&#xff0c;它变身成为自然语言处理的超级英…

通过Anaconda安装Python会得到的重要文件夹

E:\Anaconda\路径下 Scripts 文件夹&#xff1a;该文件夹包含了可执行的Python脚本文件&#xff0c;例如pip和conda等命令行工具。【pip3.exe和django-admin.exe等】Lib 文件夹&#xff1a;该文件夹包含了Python的标准库和其他第三方库的源代码文件。【Lib下面的site-packages…

PID算法原理分析及优化

今天为大家介绍一下经典控制算法之一的PID控制方法。PID控制方法从提出至今已有百余年历史&#xff0c;其由于结构简单、易于实现、鲁棒性好、可靠性高等特点&#xff0c;在机电、冶金、机械、化工等行业中应用广泛。 在大学期间&#xff0c;参加的智能汽车竞赛中就使用到了PI…

Word文档密码设置:Python设置、更改及移除Word文档密码

给Word文档设置打开密码是常见的Word文档加密方式。为Word文档设置打开密码后&#xff0c;在打开该文档时&#xff0c;需要输入密码才能预览及编辑&#xff0c;为Word文档中的信息提供了有力的安全保障。如果我们需要对大量的Word文档进行加密、解密处理&#xff0c;Python是一…

Python对象类型判断与函数重载

1. 判断对象类型 通过type函数可以知道对象的类型&#xff0c;示例代码如下&#xff1a; x Hello s type(x) print s x Hello s type(x) print s 2. 函数重载 在写函数时&#xff0c;时常遇到需要应付不同的参数类型以及不同的参数数量的情况。 在C中&#xff0c;通常定义多…

安达发|化工涂料利用APS生产计划排程系统能改善什么问题

化工涂料企业利用APS生产计划排程系统可以改善多个方面的问题&#xff1a; 1. 提高生产效率&#xff1a;APS系统能够根据订单需求和产能状况进行中长期排程&#xff0c;统一协调各分厂或车间的生产活动&#xff0c;从而实现均衡生产&#xff0c;减少因生产计划不合理导致的资源…

Ubuntu 安装 KVM 虚拟化

1. Ubuntu 安装 KVM 虚拟化 KVM 是 Linux 内核中一个基于 hypervisor 的虚拟化模块&#xff0c;它允许用户在 Linux 操作系统上创建和管理虚拟机。 如果机器的CPU不支持硬件虚拟化扩展&#xff0c;是无法使用KVM(基于内核的虚拟机)直接创建和运行虚拟机的。此时最多只能使用…

前端面试拼图-实践经验

摘要&#xff1a;最近&#xff0c;看了下慕课2周刷完n道面试题&#xff0c;记录并添加部分可参考的文档&#xff0c;如下... 1. H5页面如何进行首屏优化&#xff1f; 路由懒加载 适用于SPA&#xff08;不适用MPA&#xff09; 本质就是路由拆分&#xff0c;有限保证首页加载 服…

命令提示符——CMD基础操作介绍

&#x1f49e;&#x1f49e; 前言 hello hello~ &#xff0c;这里是大耳朵土土垚~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#x…

LIN通信开发流程,GENy导入LDF文件、使用GENy生成代码

一、使用GENy导入LDF文件&#xff0c;生成LIN代码 Micro是微控器Cpu&#xff0c;Mcs的12代 Derivativ是此微控器的衍生版&#xff0c;选择适合自己的选项。没有的话&#xff0c;我就是默认第一个MCS12X。 Compile没得选&#xff0c;默认。 填写Channel名&#xff0c;选择LDF文…