docker从入门到精通

Docker从入门到精通- 容器化技术全解析 本书全面深入地介绍了 Docker 容器化技术的各个方面,从基础概念到高级应用,涵盖了 Docker 的核心功能、镜像管理、容器管理、网络配置、资源限制与优化、扩展工具等内容。通过详细的解释和丰富的示例代码,帮助读者全面掌握 Docker 技术,提升在容器化领域的实践能力。 主要内容: Docker 镜像管理:详细介绍了镜像的分发与管理、分发策略、签名与验证等内容,帮助读者掌握镜像的创建、优化、分发和安全管理。 Docker 容器管理:涵盖了容器的生命周期管理、资源管理等内容,使读者能够熟练地管理和操作 阅读详情

docker入门

一、镜像(images)

镜像是轻量的,独立的,可执行包,并且包含了软件运行需要的所有东西,包括代码、运行环境、库、环境变量,配置文件等

二、容器(container)

容器是镜像的一个运行实例——也就是镜像被加载到内存,并且真的被执行之后。默认情况下,容器和主机是完全隔离的,最多也会在配置了的情况下,使用主机的hosts文件和端口

容器使用的基本步骤

1、使用Dockerfile来定义一个容器

​ 对于一些资源的访问,比如网卡、磁盘,在容器里都是虚拟化的,和主机是隔离的,因此,必须把容器内的资源和主机的资源做一个映射;还需要指定你想要把哪些文件copy到容器中(代码)

创建Dockerfile文件,并输入一下代码
# 使用python官方镜像作为镜像的基础
FROM python:2.7-slim
​
# 设置工作空间为/app
WORKDIR /app
​
# 把当前目录下的文件拷贝到 容器/app里
ADD . /app
​
# 安装requirements.txt中指定的依赖
RUN pip install -r requirements.txt
​
# 开放80端口
EXPOSE 80
​
# 设置NAME环境变量
ENV NAME World
​
# 当容器启动时,运行app.py
CMD ["python","app.py"]
2、创建应用app

​ 在Dockerfile同目录下,创建两个文件。因为ADD命令需要把这些拷贝到容器里。而且app.py中的服务器输入端口也正好时80,这是因为配置了EXPOSE而暴露出来

requirements.txt
Flask
Redis
app.py
from flask import Flask
from redis import Redis,RedisError
import os
import socket
​
redis = Redis(host="redis",db=0,socket_connect_timeout=2,socket_timeout=2)
​
app = Flask(__name__)
​
@app.route("/")
def hello():
    try:
        visits = redis.incr("counter")
    except RedisError:
        visits = "<h1>can not connect to Redis</h1>"
​
    html = "<h3>hello {name}</h3>" \
            "<b>hostname:</b>{hostname}<br/>" \
            "<b>visits:</b>{visits}"
​
    return html.format(name=os.getenv("NAME","world"),hostname=socket.gethostname(),visits=visits)
​
if __name__ == '__main__':
    app.run(host="0.0.0.0",port=80)
3、构建应用

​ 不需要安装python,也不需要安装requirements.txt中的任何依赖包

​ 执行构建命令,创建一个自己的dockerfile镜像

#将当前文件的所有文件构建成friendhello的镜像文件
docker build -t friendhello .
4、运行自定义应用

​ 运行时需要映射端口号

#使用-p参数将容器内80端口映射到主机的5000端口
docker run -p 5000:80 friendhello
​
#后台运行docker应用
docker run -d -p 5000:80 friendhello
5、结束应用进程
#查询容器ID
docker ps
​
#关闭docker
docker stop id
6、登录docker
docker login
​
#根据要求填写用户名和密码
7、给镜像打标签
docker tag friendhello smiletosunshine/test:hello
    
docker images
    
# 打标签语法格式:
    docker tag 镜像image名 用户名/仓库名:标签
注意:

​ 如果给镜像打标签的时候,没有加 :tag,那么默认镜像的标签为 :latest

8、将镜像推送至远程终端
docker push smiletosunshine/test:hello
​
# 语法格式
    docker push 用户吗/仓库名:标签
9、执行远程应用
docker run -d -p 5000:80 smiletosunshine/test:hello
        
# 语法格式
    docker run -d -p 映射端口:应用端口 用户名/仓库名:标签
10、拉取远程镜像
docker pull smiletosunshine/test:hello
注意:

​ 如果run的时候,没有找到image,会自动从官网pull

11、删除镜像
#删除镜像
docker rmi -f 镜像id
​
#强制删除运行中容器
docker rm -f 容器id

三、服务(services)

​ 服务就是一个应用中的容器。“一个服务只运行一个镜像,但是,他会编排镜像的运行方式——使用哪个端口,需要多少个实例才能满足需求”

​ 伸缩一个服务就是改变这个服务的运行容器数量

1、使用docker-compose.yml文件控制docker容器的行为
# 只有version>=3.x才能使用docker stack deploy命令
version: "3"
services:
  web:
    # 拉取镜像
    image: smiletosunshine/test:part1
    deploy:
      # 运行5个实例
      replicas: 5
      resources:
        # 限制CPU使用率
        limits:
          cpus: "0.1"
          memory: 50M
      # 自动重启容器
      restart_policy:
        condition: on-failure
    # 端口映射
    ports:
      - "80:80"
    # 设置负载均衡网络
    networks:
      - webnet
networks:
  webnet:
   
# 注意:缩进不能错
上述的docker-compose.yml定义了docker的行为:

​ 1、从注册中心拉取镜像

​ 2、运行5个实例作为服务web,并且限制每个实例都CPU使用率最多只能到10%,内存最多占用50M

​ 3、容器启动失败则重启

​ 4、把主机的80端口映射到web服务器的8000端口

​ 5、指示web服务器的所有容器通过一个负载均衡的网络webnet来共享80端口

​ 6、把webnet网络作为默认网络设置

2、运行负载均衡
docker swarm init
docker stack deploy -c docker-compose.yml getstartedlab
​
#语法格式
docker stack deploy -c yml文件 自定的应用名
注意:

​ 在运行docker stack deploy之前,需要使用docker swarm init初始化,否则会报“this node is not a swarm manager”

3、伸缩应用

修改docker-compose.yml中的replicas数量,保存后,运行

docker stack deploy -c docker-compose.yml getstartedlab
注意:

​ docker是自动更新的,不需要手动kill

4、移除应用
#移除应用
docker stack rm getstartedlab
​
#关闭swarm
docker swarm leave --force

四、集群(swarm)

​ swarm就是一个运行docker的集群。可以使用docker来对swarm manager下命令,从而控制这个集群,集群中的机器可以是真实的物理机,也可以是虚拟机。

swarm manager策略:

在compose文件中指定swarm manager策略:

​ 最空节点:选择使用率最低的节点来运行容器

​ 全局策略:每个节点至少有一个镜像的容器

1、配置swarm

​ 执行docker swarm init来开启一个swarm节点,并且把当前执行命令的节点作为管理节点,然后在其他机器上执行docker swarm join来加入这个swarm集群

2、使用虚拟机来完成swarm集群的配置
# 创建两个虚拟机,分别为myvm1和myvm2
​
docker-machine create --driver virtualbox myvm1
docker-machine create --driver virtualbox myvm2
3、设置管理节点和工作节点
# 把myvm1设为管理节点
​
docker-machine ssh myvm1 "docker swarm init"
注意:

​ 执行失败,提示要加—advertise-addr

​ 使用docker-machine ls查看虚拟机,然后拷贝myvm1的ip,指定端口2377

​ 例如:

docker-machine ssh myvm1 "docker swarm init --advertise-addr 192.168.99.100:2377"

初始化成功之后会返回一个提示信息,拷贝命令,然后去myvm2中执行

docker-machine ssh myvm2 "docker swarm join \--token <token> \<ip>:<port>"
注意:

​ 配置工作节点时的 \ 不能丢,必须加上,否则报错,且\前加空格,\后不可加空格

4、查看集群中的所有节点
# 登录管理节点之中,只有管理节点才可以执行docker命令
docker-machine ssh myvm1
​
docker node ls
5、退出,回到原机器
exit
6、部署应用
# 使用scp上传yml文件至管理节点
docker-machine scp docker-compose.yml myvm1:~
   
# 部署应用
docker-machine ssh myvm1 "docker stack deploy -c docker-compose.yml getstartedlab"
7、查看部署后的应用容器
docker-machine ssh myvm1 "docker stack ps getstartedlab"
8、访问集群
# 查询ip
docker-machine ls

通过myvm1和myvm2中的任意一个ip均可访问,因为整个集群内的网络是共享的

9、伸缩应用
# 修改docker-compose.yml文件
# 执行docker stack deploy
10、清除应用
# 清除应用
docker-machine ssh myvm1 "docker stack rm getstartedlab"
​
# 让工作节点脱离swarm集群
docker-machine ssh myvm2 "docker swarm leave"
​
# 关闭管理节点
docker-machine ssh myvm1 "docker swarm leave --force"

五、堆栈(stack)

1、在docker-compose.yml中添加可视化服务
version: "3"
services:
  web:
    # replace username/repo:tag with your name and image details
    image: username/repo:tag
    deploy:
      replicas: 5
      restart_policy:
        condition: on-failure
      resources:
        limits:
          cpus: "0.1"
          memory: 50M
    ports:
      - "80:80"
    networks:
      - webnet
  visualizer:
    image: dockersamples/visualizer:stable
    ports:
      - "8080:8080"
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
    deploy:
      placement:
        constraints: [node.role == manager]
    networks:
      - webnet
networks:
  webnet:
说明:

​ 添加一个与web服务平级的服务visualizer。volumes,为可视化服务添加访问主机socket文件的权限;placement,确保服务只运行在swarm的管理节点上。

2、编辑docker-compose.yml,添加数据持久化服务
version: "3"
services:
  web:
    # replace username/repo:tag with your name and image details
    image: username/repo:tag
    deploy:
      replicas: 5
      restart_policy:
        condition: on-failure
      resources:
        limits:
          cpus: "0.1"
          memory: 50M
    ports:
      - "80:80"
    networks:
      - webnet
  visualizer:
    image: dockersamples/visualizer:stable
    ports:
      - "8080:8080"
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
    deploy:
      placement:
        constraints: [node.role == manager]
    networks:
      - webnet
  redis:
    image: redis
    ports:
      - "6379:6379"
    volumes:
      - ./data:/data
    deploy:
      placement:
        constraints: [node.role == manager]
    networks:
      - webnet
networks:
  webnet:
说明:

​ 要保证redis只会运行在管理节点上,这样就可以让redis运行在同一个文件系统上

​ redis访问的文件路径时一样的,这样就可以从这个路径来读取和存储文件

3、在管理节点上创建redis的数据持久化路径
docker-machine ssh myvm1 "mkdir ./data"
3、上传新的docker-compose.yml文件
docker-machine scp docker-compose.yml myvm1:~


4、部署应用
docker-machine ssh myvm1 "docker stack deploy -c docker-compose.yml getstartedlab"


5、查询结果
docker-machine ps


浏览器输入ip

从“烧电路”到“软杀伤”:拆解高功率微波(HPM)让无人机失灵的三种物理效应 本文深度解析高功率微波(HPM)如何通过热效应、电磁效应和非线性效应三种物理机制使无人机失灵。从电子元件的热损伤到系统的电磁干扰,再到电路中的非线性破坏,HPM技术为反无人机系统提供了高效的非动能打击手段。文章还探讨了现代无人机的多层级防护策略与应对方案。 阅读详情

相关推荐

某讯天御滑块验证码逆向实战:从参数解析到环境对抗

本文详细解析了某讯天御滑块验证码的逆向工程实战技巧,从关键参数解析到浏览器环境模拟对抗。重点介绍了collect、eks等参数的逆向思路,以及如何通过puppeteer等工具补全环境检测,帮助开发者有效突破验证码防护。文章还提供了常见错误解决方案和性能优化建议,是验证码逆向领域的实用指南。

weixin_29325007的博客 437

Docker 入门到实战教程(一)介绍Docker

一. Docker简介1.1 什么是虚拟化?在计算机中,虚拟化(英语:Virtualization)是一种资源管理技术,是将计算机的各种实体资源,如服务...

李浩东的博客 90万+

408——计算机组成原理(持续更新)

小数点前的0代表正数,1代表负数。

qq_55202378的博客 1721

docker镜像的使用

docker image -q #列出所有的镜像ID docker rmi <镜像ID> #删除所有的镜像

weixin_41012399的博客 536

实战避坑:泛微E9流程接口与单点登录(SSO)开发全解析(含自定义Action、Restful API与免密登录)

本文深入解析泛微E9流程接口与单点登录(SSO)开发中的关键技术与避坑指南,涵盖自定义Action开发、Restful API鉴权机制及跨系统单点登录实现。通过实战案例与代码示例,帮助开发者高效完成二次开发,解决系统集成中的数据孤岛问题,提升企业信息化建设效率。

weixin_42549451的博客 672

立创开源桌面激光雕刻机DIY全解析:从悬臂结构、Arduino主控到Marlin固件

本文详细解析了基于立创开源平台的桌面激光雕刻机DIY全过程。重点介绍了悬臂式机械结构的设计与优化,阐述了采用Arduino Mega 2560主控与RAMPS 1.4扩展板的经典控制方案,并深入讲解了Marlin固件的关键配置步骤,包括电机步数计算与激光功能启用,为创客和电子爱好者提供了一套完整的从硬件搭建到软件调试的实战指南。

weixin_42510201的博客 382

docker简介、安装、基础知识

Docker的出现使我们开发的软件可以“带环境安装”,即安装的时候,可以把原始环境一模一样的复制过来,在自己的机器上可以运行,在别人的机器上也可以运行。Docker镜像是分层的,而如果每次传输都使用全量文件(所以用ftp的方式并不适合),显然不经济,必须提供识别分层传输的机制,以层的UUID为标识,确定传输的对象。解析:指定镜像作者信息,即镜像的Author属性。4.Docker是一个轻量级的容器,我们可以把环境交给Docker管理,当我们需要移植我们的产品的时候,就可以将环境整个的迁移到另一台主机上。

2301_82330629的博客 5万+

ANSYS Workbench实战:用网格自适应搞定超弹性橡胶大变形仿真(附避坑命令流)

本文深入探讨了ANSYS Workbench中超弹性橡胶大变形仿真的网格自适应技术,重点解析了混合U-P单元的应用、非线性自适应网格的实战技巧及材料模型选择的注意事项。通过具体案例和命令流示例,帮助工程师有效解决橡胶仿真中的收敛问题和网格畸变挑战,提升仿真精度和效率。

weixin_42666036的博客 303

【Docker】初识docker 基本概念及安装使用(巨详细版),网络安全零基础入门到精通实战教程!

是一个开源的应用容器引擎,基于go语言开发并遵循apache2.0协议开源是在Linux容器里运行应用的开源工具是一种轻量级的 “虚拟机”Docker的容器技术,可以在一台主机上轻松为任何应用创建一个轻量级的、可移植的、自给自足的容器市场占有率最高Docker的Logo设计为蓝色鲸鱼,拖着许多集装箱鲸鱼可看作为宿主机,集装箱可理解为相互隔离的容器,每个集装箱中都包含自己的应用程序朋友们如果有需要全套《网络安全入门+进阶学习资源包》,可以扫描下方二维码或链接免费领取~

Cairo_A的博客 5万+

飞牛fnNAS搭建Web网页版OFFICE(WPS)软件

本文介绍了如何在飞牛NAS上通过Docker容器部署WPS Office办公软件。主要内容包括:启用Docker服务、准备项目文件夹结构、使用Compose方式构建容器、解决端口冲突问题、配置中文输入法和字体库,以及通过ZeroTier实现远程访问。文章详细说明了每个步骤的操作方法,包括容器启动、输入法设置、字体添加和文件存储位置配置。最后还介绍了使用ZeroTier内网穿透技术实现远程访问NAS上WPS服务的方法,让用户可以在不同设备上随时编辑NAS中的文件。整个部署过程完整清晰,为NAS用户提供了便捷的

dgnankai的专栏 1699

Open-AutoGLM 实战:手把手教你用 AI 操作手机「喂饭教程」

Open-AutoGLM 是一个由智谱AI开源的手机操作智能体框架,由手机端智能助手框架Phone Agent和9B大小的模型AutoGLM-Phone-9B组成,借助ADB自动执行点击、滑动、输入等操作——用户只需用自然语言描述任务,系统便能自动规划并完成整个操作流程。

blues_C的博客 1267

Docker详解

Docker详解 一、Docker基础 1、Docker简介 Docker 是一个开源的应用容器引擎,基于Go 语言并遵从 Apache2.0 协议开源。 让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互隔离,性能开销极低。 Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版),我们用社区版就可以了。 2、

李宥的博客 9万+

QCC305x-QCC304x系列开发教程之应用程序子系统详解 嵌入式

本文对QCC305x-QCC304x系列芯片的应用程序子系统进行了详细解析,并给出了一个LED闪烁的示例代码。嵌入式系统的开发既需要理论知识的支持,也需要实践经验的积累,希望本文能够为读者在QCC305x-QCC304x系列芯片的开发中提供一些有益的指导。QCC305x-QCC304x系列芯片提供了丰富的外设接口,包括UART、SPI、I2C等,开发者可以根据需求选择适合的接口进行数据传输和控制。QCC305x-QCC304x系列芯片的应用程序子系统是整个嵌入式系统的核心部分,负责管理和执行各种应用程序。

CodeMaven的博客 224

Docker从入门到精通

Docker是一个开源的容器化平台,它使用容器来打包应用及其依赖项,确保应用在任何环境中都能一致地运行。本文档涵盖了Docker的主要概念和实践内容,从基础入门到高级应用,为读者提供了完整的Docker学习路径。建议读者在实践中多加练习,逐步掌握Docker的各项功能,最终能够在生产环境中熟练运用Docker技术。

秦若宸 - 全栈工程师,擅长前端技术与架构设计。 1032

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Docker从入门到精通教程

文章目录介绍Docker 体系介绍学习环境的构建Centos安装Docker系统指令启动指令重启指令状态指令帮助命令镜像镜像介绍镜像帮助指令远程搜索镜像获取镜像查看镜像查看镜像分层查看镜像详情删除镜像标记镜像存储镜像加载镜像创建镜像导出镜像导入镜像推送镜像容器容器帮助指令容器介绍管理容器的常用命令创建容器查看容器列表容器日志容器状态更新容器容器详细信息容器进程容器端口进入容器容器提交复制文件到容器...

粉菜编程学院 435

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Docker入门到精通

Docker入门到精通

一枚很low得程序猿 151

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Docker:从入门到精通

在这个瞬息万变的数字时代,软件的开发与部署正经历着一场深刻的变革。Docker,作为容器技术的杰出代表,以其轻量、高效、可移植的特性,彻底颠覆了传统的工作流,为开发者和运维人员带来了前所未有的便利与力量。它不仅是技术的革新,更是思维模式的跃迁,让应用的生命周期如行云流水般顺畅。本书旨在为您揭示Docker的奥秘,从最基础的概念入手,逐步深入到高级应用与底层原理。

YunWisdom 1078

Docker运维专家必须掌握的核心命令:从入门到精通

dockernetworkdisconnect<网络名><容器ID或容器名>dockerbuild-t<镜像名>:<标签><Dockerfile路径>dockernetworkconnect<网络名><容器ID或容器名>dockercp<本地文件路径><容器ID或容器名>:<容器路径>dockercp<容器ID或容器名>:<容器路径><本地文件路径>dockerexec-it<容器ID或容器名><命令>dockerinspect<容器ID或容器名>

AngelCryToo的专栏 1264

Docker容器技术:从入门到精通

在Docker出现之前,传统的虚拟化技术如VMware、VirtualBox等,虽然能够提供隔离的运行环境,但存在硬件资源占用大、启动速度慢等问题。Docker容器技术的出现,以其轻量级、快速启动的特点,迅速成为云计算和微服务架构的首选技术。Docker容器技术是一种轻量级、可移植的计算环境,它允许开发者打包应用及其依赖,并在任何支持Docker的环境中运行。通过将应用拆分成多个独立的服务,每个服务运行在独立的容器中,可以实现应用的快速部署和扩展。容器镜像是容器的基石,它包含了容器运行所需的所有文件系统。

2501_92488994的博客 442

Docker 从入门到精通教程

Docker 是一个开源的容器化平台,允许开发者将应用程序及其依赖项打包到一个轻量级、可移植的容器中。容器可以在任何支持 Docker 的环境中运行,确保应用程序在不同环境中表现一致。Docker Compose 是一个用于定义和运行多容器 Docker 应用的工具。V1: 使用命令(带连字符)V2: 使用命令(不带连字符,作为 Docker CLI 插件)Docker Desktop 默认包含 V2 版本。如果系统同时安装了 V1 和 V2,V2 优先。理解核心概念。

qq_45647530的博客 1224

Docker入门教程(非常详细)从零基础入门到精通

Docker的出现开发了一个项目可以在本机运行,但如果版本更新,可能就会导致服务不可使用,后期维护起来很繁琐,因为对于每一个机器,都得进行环境的部署和配置。例如,在Windows系统下开发了一个项目(jar+redis+ES+Kafka+……),准备部署到服务器上时,由于不能跨平台,还得重新配置环境。而Docker就可以让开发者直接将项目打包然后部署上线。Docker的历史2010年,dotCloud公司推出了一项基于LXC的容器技术,并将其命名为Docker。

专业深耕,技术前沿 1585
下一篇: linux下安装各种类型的软件
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沉宸尘⁴⁰⁴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值