docker运维-从零开始学习(代码片段)

serendipity_cat serendipity_cat     2022-12-04     533

关键词:

Docker 运维 - 从零开始学习


一、Docker概述

更新时间:2021年5月19日
Docker是一个在Linux里运行的容器虚拟化软件,提供了轻量级的应用隔离方案,并且为我们提供了应用程序快速扩容、缩容的能力
Github开源项目地址https://github.com/docker
Docker官方网站地址https://www.docker.com/


二、什么是容器?

Package Software into Standardized Units for Development, Shipment and Deployment

将软件打包成标准化单元,以便开发、装运和部署


容器是一个软件的轻量级独立可执行软件包,包含运行它所需的一切:代码、运行时、系统工具、系统库、设置等。不管环境如何,集装箱化软件都可以运行相同的Linux和Windows应用程序。容器将软件与其周围环境隔离开来,例如开发环境和登台环境之间的差异,并有助于减少在同一基础架构上运行不同软件的团队之间的冲突

三、Docker的特点

轻便小巧,效率至上

① 轻量级

在一台机器上运行的Docker容器共享该机器的操作系统内核; 他们立即开始并使用更少的计算和内存。图像由文件系统层构建并共享公用文件。这最大限度地减少了磁盘使用量,图像下载速度更快

② 标准

Docker容器基于开放标准,可在所有主要Linux发行版,Microsoft Windows以及任何基础架构(包括虚拟机,裸机和云中)上运行

③ 安全

Docker容器将应用程序彼此隔离并从底层基础架构中分离出来。Docker提供了最强大的默认隔离功能,可以将应用程序问题限制在一个容器中,而不是整个机器上

四、Docker与传统虚拟机的区别

特性Docker 容器虚拟机
启动速度秒级分钟级
计算能力损耗几乎无损耗50%作用
性能接近原生弱于
系统支持量(单机)上千个 几十个
隔离性资源限制完全隔离

五、Docker 核心概念

① 镜像(Image)

Docker镜像是创建容器的基础,类似于快照

② 容器(Container)

容器即服务,每个服务相互隔离

③ 仓库(Repository)

可供随时调用的镜像仓库,分公共仓库和私有仓库

六、Docker 安装部署

#!/bin/bash

#设置Docker存储库
yum install -y yum-utils

#安装国内软件包
yum-config-manager \\
--add-repo \\
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

#安装Docker Engine和容器
yum install -y docker-ce docker-ce-cli containerd.io

systemctl start docker && systemctl enable docker

查看版本

docker version

七、容器镜像加速器

类似与YUM源,使用国内源可加快镜像拉取的速度

① 打开阿里云控制台

搜索 容器镜像服务

② 选择镜像加速器

③ 更换容器镜像源

八、Docker 镜像操作

① 镜像搜索 | search

命令格式

docker search 镜像名:[标签] | 镜像ID

举例:docker search nginx

搜索内容默认会按照星级进行排序

举例:只搜索100星以上的目标

docker search -f stars=100 nginx

② 拉取(下载)镜像 | pull

命令格式

docker pull 镜像名:[标签] | 镜像ID

举例:docker pull nginx

如果不加标识则默认会选择官方最新的Nginx镜像进行获取


举例:下载指定版本的MySQL

docker pull mysql:5.7

③ 查看镜像 | images/inspect

命令格式

docker images


查看镜像详细的信息

docker inspect 镜像名:[标签] | 镜像ID

举例:docker inspect nginx

④ 删除镜像 | rmi

命令格式

docker rmi 镜像名:[标签] | 镜像ID

举例:通过镜像名删除镜像

docker rmi nginx:laster

举例:通过镜像ID删除镜像

docker rmi f0b8a9a54136


⑤ 修改镜像名及标签 | tag

命令格式

docker tag 镜像名:[标签] 新镜像名:[新标签]

举例:docker tag nginx:latest new_nginx:1.12.0

⑥ 存储/载入镜像 | save/load

命令格式

docker save -o 存储文件名 存储镜像

常用参数
-o 写入数据

举例:docker save -o nginx nginx

命令格式

docker load <载入文件

举例:docker load <nginx

九、Docker 容器操作

① 创建容器 | create

命令格式

docker create [参数] 镜像名:[标签] | 镜像ID 运行程序

常用参数

  • -d 开启守护进程,可在后台运行
  • -i 交互式操作,保持连接状态
  • -t 分配伪终端,一般与“i”一起使用
  • -p 映射端口[目标端口:源端口]

举例:docker create -itd -p 80:80 nginx /bin/bash

② 启动容器 | run

命令格式

docker run [参数] 镜像名:[标签] | 镜像ID

常用参数

  • -d 开启守护进程,可在后台运行
  • -i 交互式操作,保持连接状态
  • -t 分配伪终端,一般与“i”一起使用
  • -p 映射端口[目标端口:源端口]

举例:docker run -it -d -p 80:80 nginx

③ 进程管理

►查看进程 | ps

命令格式

docker ps [参数]

常用参数
-a 显示所有容器,默认显示刚刚运行的

举例:docker ps -a

►运行状态 | start/stop/restart

命令格式

docker start/stop/restart 镜像名:[标签] | 镜像ID

举例:docker stop 6127d8cc1f3c

►删除进程 | rm -f

命令格式

docker rm -f 镜像名:[标签] | 镜像ID

举例:docker rm -f 6127d8cc1f3c

④ 进入容器 | exec

命令格式

docker [参数] exec 镜像名:[标签] | 镜像ID 运行程序

举例:docker exec -it 87d2da7b401b /bin/bash

⑤ 容器导入导出 | import/export

常用于将Docker容器迁移到另一个服务器中
命令格式

docker export 进程ID > 文件名

举例:docker export f0b8a9a54136 > nginx

命令格式

docker import 文件名 > 镜像名:[标签]

举例:cat Web | docker import - web:nginx

十、DockerFile

Dockerfile是一个包含用于组合映像的命令的文本文档。可以使用在命令行中调用任何命令。 Docker通过读取Dockerfile中的指令自动生成映像
docker build命令用于从Dockerfile构建映像。可以在docker build命令中使用-f标志指向文件系统中任何位置的Dockerfile

① Dockerfile的基本结构

Dockerfile 一般分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令,’#’ 为 Dockerfile 中的注释

② Dockerfile文件说明

Docker以从上到下的顺序运行Dockerfile的指令。为了指定基本映像,第一条指令必须是FROM。一个声明以#字符开头则被视为注释。可以在Docker文件中使用RUN,CMD,FROM,EXPOSE,ENV等指令

►FROM:指定基础镜像,必须为第一个命令

格式:
  FROM <image>
  FROM <image>:<tag>
  FROM <image>@<digest>
示例:
  FROM mysql:5.6

►MAINTAINER: 维护者信息

格式:
    MAINTAINER <name>
示例:
    MAINTAINER Ca

►RUN:用于在镜像容器中执行命令

格式:
    RUN <command>
exec执行
格式:
    RUN ["executable", "param1", "param2"]
示例:
    RUN ["executable", "param1", "param2"]
    RUN apk update
    RUN ["/etc/execfile", "arg1", "arg1"]

►ADD:将本地文件添加到容器中

tar类型文件会自动解压(网络压缩资源不会被解压),可以访问网络资源,类似wget

格式:
    ADD <src>... <dest>
    ADD ["<src>",... "<dest>"] 用于支持包含空格的路径
示例:
    ADD hom* /mydir/          # 添加所有以"hom"开头的文件
    ADD hom?.txt /mydir/      # ? 替代一个单字符,例如:"home.txt"
    ADD test relativeDir/     # 添加 "test" 到 `WORKDIR`/relativeDir/
    ADD test /absoluteDir/    # 添加 "test" 到 /absoluteDir/

►COPY:功能类似ADD

不会自动解压文件,也不能访问网络资源

►CMD:构建容器后调用

在容器启动时才进行调用

格式:
    CMD ["executable","param1","param2"] (执行可执行文件,优先)
    CMD ["param1","param2"] (设置了ENTRYPOINT,则直接调用ENTRYPOINT添加参数)
    CMD command param1 param2 (执行shell内部命令)
示例:
    CMD echo "This is a test." | wc -
    CMD ["/usr/bin/wc","--help"]

►ENTRYPOINT:配置容器

使其可执行化,配合CMD可省去"application",只使用参数

格式:
    ENTRYPOINT ["executable", "param1", "param2"] (可执行文件, 优先)
    ENTRYPOINT command param1 param2 (shell内部命令)
示例:
    FROM ubuntu
    ENTRYPOINT ["top", "-b"]
    CMD ["-c"]

►LABEL:用于为镜像添加元数据

格式:
    LABEL <key>=<value> <key>=<value> <key>=<value> ...
示例:
  LABEL version="1.0" description="owo" by="qwq"

►ENV:设置环境变量

格式:
    ENV <key> <value>  #<key>之后的所有内容均会被视为其<value>的组成部分,因此,一次只能设置一个变量
    ENV <key>=<value> ...  #可以设置多个变量,每个变量为一个"<key>=<value>"的键值对,如果<key>中包含空格,可以使用\\来进行转义,也可以通过""来进行标示;另外,反斜线也可以用于续行
示例:
    ENV ID 007

►EXPOSE:指定于外界交互的端口

格式:
    EXPOSE <port> [<port>...]
示例:
    EXPOSE 80 443
    EXPOSE 8080
    EXPOSE 11211/tcp 11211/udp

►VOLUME:用于指定持久化目录

格式:
    VOLUME ["/path/to/dir"]
示例:
    VOLUME ["/data"]
    VOLUME ["/var/www", "/var/log/apache", "/etc/apache"
  1. 卷可以容器间共享和重用
  2. 容器并不一定要和其它容器共享卷
  3. 修改卷后会立即生效
  4. 对卷的修改不会对镜像产生影响
  5. 卷会一直存在,直到没有任何容器在使用它

►WORKDIR:工作目录,类似于cd命令

格式:
    WORKDIR /path/to/workdir
示例:
    WORKDIR /a  (这时工作目录为/a)
    WORKDIR b  (这时工作目录为/a/b)
    WORKDIR c  (这时工作目录为/a/b/c)

►USER:指定运行容器时的用户名或 UID,后续的 RUN 也会使用指定用户

使用USER指定用户时,可以使用用户名、UID或GID,或是两者的组合。当服务不需要管理员权限时,可以通过该命令指定运行用户。并且可以在之前创建所需要的用户

 格式:
  USER user
  USER user:group
  USER uid
  USER uid:gid
  USER user:gid
  USER uid:group

 示例:
  USER www

►ARG:用于指定传递给构建运行时的变量

格式:
    ARG <name>[=<default value>]
示例:
    ARG site
    ARG build_user=www

►ONBUILD:用于设置镜像触发器

格式:
  ONBUILD [INSTRUCTION]
示例:
  ONBUILD ADD . /app/src
  ONBUILD RUN /usr/local/bin/python-build --dir /app/src

rancher运维-从零开始学习|rke部署k8s|容器管理(代码片段)

...别三、RKE1部署K8S1.1基础环境部署①SSH用户必须是节点上docker用户组的成员②禁用交换功能(Swap)③修改主机名[可选]④配置互相⑤启用IPVS模块⑥安装DockerCE[node节点]⑦关闭防火墙⑧配置时间同步1.2部署K8S[rancher节点]①生成配置文件... 查看详情

rancher运维-从零开始学习|rke部署k8s|容器管理(代码片段)

...别三、RKE1部署K8S1.1基础环境部署①SSH用户必须是节点上docker用户组的成员②禁用交换功能(Swap)③修改主机名[可选]④配置互相⑤启用IPVS模块⑥安装DockerCE[node节点]⑦关闭防火墙⑧配置时间同步1.2部署K8S[rancher节点]①生成配置文件... 查看详情

openstack运维-从零开始学习

OpenStack运维-从零开始学习一、OpenStack简介二、OpenStack服务三、OpenStack优势①控制性②兼容性③可扩展性④灵活性⑤行业标准⑥实践检验四、OpenStack架构解析①四大节点控制节点基础管理服务计算节点②OpenStack组件通信关系一、Op... 查看详情

docker从零开始存储bindmounts(代码片段)

使用bindmounts自Docker早期以来bindmounts一直存在。与volumes相比,绑定挂载具有有限的功能。使用bindmounts时,主机上的文件或目录将装入容器中。文件或目录由其在主机上的完整路径或相对路径引用。相反,当您使用卷时,会在主... 查看详情

docker从零开始网络macvlan(代码片段)

...接到物理网络的物理网络接口。在这种情况下,您需要在Docker主机上指定一个物理接口,用于Macvlan,以及Macvlan的子网和网关。您甚至可以使用不 查看详情

docker从零开始网络null网络(代码片段)

...下示例说明了这一点。1.创建容器。[[email protected]~]#dockerrun--rm-dit>--networknone>--nameno-net-alpine>alpine:latest& 查看详情

docker从零开始堆栈初体验,stacks(代码片段)

先决条件安装Docker1.13或更高版本。获取DockerCompose,请参考第三节按照第四节中的描述获取DockerMachine。在第二节中了解如何创建容器。确保您的图像作为已部署的容器运行。运行此命令,在您的信息槽中  username,repo和tag... 查看详情

docker从零开始容器初体验(代码片段)

使用定义容器 DockerfileDockerfile定义容器内所需要的环境。对网络接口和磁盘驱动器等资源的访问在此环境中进行虚拟化,该环境与系统的其他部分隔离,因此您需要将端口映射到外部世界,并具体说明要“复制”到哪... 查看详情

从零开始搭建深度学习验证码识别模型(代码片段)

文章目录从零开始搭建深度学习验证码识别模型CNN模型与图像识别验证码数据集介绍生成数据集生成EasyCaptcha生成Kcaptcha搭建模型EasyNet模型KCapNet模型模型训练与参数选择优化方法与超参数数据集划分模型分析EasyNet算力计算KCap算... 查看详情

从零开始学习docker(初识docker)

从零开始学习Docker第一篇初识Docker提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加第一篇初识Dockerhttps://editor.csdn.net/md/?articleId=121790797文章目录从零开始学习Docker前言一、Docker是什么?二、... 查看详情

云原生|从零开始学docker一docker的安装,启动以及工作原理(代码片段)

【从零开始学Docker】安装篇一丶Docker浅谈1.1Docker为什么出现1.2Docker能干吗二、Docker的安装2.1Docker的组成2.2安装前提2.3安装步骤第一步第二步第三步第四步第五步三、镜像加速四、run的工作原理五、Dokcer怎么工作的六、Docker为什么... 查看详情

社区分享|从零开始学习tinyml(代码片段)

我们在上周的社区分享栏目中介绍了 社区分享|从零开始学习TinyML(一),本周我们将继续学习。 HelloWorld—梦开始的地方(中)在前面的准备工作中,我们完成了模型训练,并且将模型的二进制格式转化成为C&#... 查看详情

社区分享|从零开始学习tinyml(代码片段)

我们在上周的社区分享栏目中介绍了 社区分享|从零开始学习TinyML(一),本周我们将继续学习。 HelloWorld—梦开始的地方(中)在前面的准备工作中,我们完成了模型训练,并且将模型的二进制格式转化成为C&#... 查看详情

从零开始搭建深度学习环境(代码片段)

开始深度学习调参之路不能没有一个趁手的环境安装基础环境我使用的机器环境是:Ubuntu18.04安装显卡驱动1.2.按照cuda所需的版本安装3.sudoubuntu-driversautoinstall安装pipsudoapt-getinstallpython-pip下载anaconda3地址:https://www.anaconda.co... 查看详情

如何从零开始学习openstack

...术A先安装OpenStack的环境,几种方法第一种方法:先安装docker,下载openstack的镜像,关于docker的使用资料Docker资料网上搜索一下,很多,比较容易学习和使用 参考技术B基础 参考技术COpenStack入门到实战视频教程全集下载OpenStack入... 查看详情

keras深度学习实战(15)——从零开始实现yolo目标检测(代码片段)

Keras深度学习实战(15)——从零开始实现YOLO目标检测0.前言1.YOLO目标检测模型1.1锚框(anchorboxes)1.2YOLO目标检测模型原理2.从零开始实现YOLO目标检测2.1加载数据集2.2计算锚框尺寸2.3创建训练数据集2.4实现YOLO目标检测模型2.5... 查看详情

社区分享|从零开始学习tinyml(代码片段)

TinyML简介1.概要PeteWarden与 DanielSitunayake合著了一本介绍在Arduino和超低功耗微控制器上如何运行ML的书, TinyML:MachineLearningwithTensorFlowLiteonArduinoandUltra-Low-PowerMicrocontrollers,这本书由O’Reilly于2019年12 查看详情

社区分享|从零开始学习tinyml(代码片段)

TinyML简介1.概要PeteWarden与 DanielSitunayake合著了一本介绍在Arduino和超低功耗微控制器上如何运行ML的书, TinyML:MachineLearningwithTensorFlowLiteonArduinoandUltra-Low-PowerMicrocontrollers,这本书由O’Reilly于2019年12 查看详情