【Docker】1、Docker 基础知识随意介绍

2023/6/5 21:17:53

文章目录

  • 一、什么是 Docker
  • 二、为什么要用 Docker 部署
  • 三、Ubuntu Docker 安装
  • 四、Dockerfile
  • 五、镜像
    • 5.1 镜像拉取
    • 5.2 镜像删除
    • 5.3 使用 docker save 将镜像保存成 tar 归档文件
    • 5.4 导入使用 docker save 导出的镜像
    • 5.5 使用 docker import 从归档文件中创建镜像
    • 5.6 将本地镜像上传到镜像仓库
  • 六、容器的一般操作
    • 6.1 查看容器
    • 6.1 启动容器
    • 6.2 进入容器
    • 6.3 停止容器
    • 6.3 重启容器
    • 6.4 删除容器
    • 6.5 杀死容器中正在运行的程序
    • 6.6 在 docker 中杀死正在运行的进程
    • 6.7 容器的连接
    • 6.8 查看 docker 的创建历史

在这里插入图片描述

一、什么是 Docker

Docker 是开源的应用容器引擎,基于 go 语言,并遵从 Apache2.0 协议开源。

Docker 允许开发人员将相关应用和依赖库打包到一个轻量级的容器中

Docker 有三个基本概念:

  • 镜像(Image):镜像就相当于一个文件系统,比如官方镜像 ubuntu:16.04 就包含了一整套的 Ubuntu16.04 最小系统的 root 文件系统
  • 容器(Container):镜像是静态的定义,容器是镜像运行起来的实体
  • 仓库(Reposityor):仓库可以用于保存镜像

二、为什么要用 Docker 部署

互联网企业生产环境的部署经理了三个阶段:

  • 物理机部署:

    直接在机器上进行环境部署和应用,但多个进程都部署在同一个机器上就会导致资源抢占,导致某些异常。

  • 虚拟机部署:

    从物理机上分配好 cpu 核数、内存、磁盘等,一个虚拟机一般都只部署一个应用,实现了进程间的资源隔离,可以解决直接在物理机上部署导致的资源抢占问题,一个物理机上可以部署多个虚拟机。

    虚拟机虽然可以隔离资源,但随着时间的推移和一些软件的升级,难免有没有升级或管理到的版本,容易导致软件版本和配置逐渐碎片化,当线上出现问题时,排查问题会很棘手。

  • 容器部署:

    容器不局限于 docker,但 docker 是目前最流行的,docker 的核心在于镜像文件

    镜像文件就是一个进程运行时需要依赖的库的集装箱

    部署时,首先拉取指定版本的镜像文件,运行镜像文件即可启动容器,由于镜像文件是一样的,所以容器中的软件和库的版本也是一样的,不会出现配置碎片化的问题。如果要升级软件版本,则修改镜像文件即可。

三、Ubuntu Docker 安装

安装命令:

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

国内 daocloud 安装:

curl -sSL https://get.daocloud.io/docker | sh

验证 Docker 是否被正确安装:

sudo docker run hello-world

四、Dockerfile

Dockerfile 是用了构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明

Dockerfile 一般包含四部分:

  • 基础镜像信息
  • 维护者信息
  • 镜像操作指令
  • 容器启动时的执行指令

例如:

# This dockerfile uses the ubuntu image
# VERSION 2 - EDITION 1
# Author: docker_user
# Command format: Instruction [arguments / command] ..

# Base image to use, this must be set as the first line
FROM ubuntu  # 基础镜像

# Maintainer: docker_user <docker_user at email.com> (@docker_user)
MAINTAINER docker_user docker_user@email.com # 镜像维护者的信息

# Commands to update the image
# RUN 指令会对镜像执行命令,每运行一条 RUN 指令,镜像添加一层
RUN echo "deb http://archive.ubuntu.com/ubuntu/ raring main universe" >> /etc/apt/sources.list
RUN apt-get update && apt-get install -y nginx
RUN echo "\ndaemon off;" >> /etc/nginx/nginx.conf

# Commands when creating a new container
# CMD 来指定运行容器时的操作命令
CMD /usr/sbin/nginx
指令作用
FROM第一条指令必须为 FROM,表示从哪个基础镜像的基础上来新建镜像
MAINTAINER指定维护者信息
RUN在 docker build 的时候执行,会在 shell 终端运行命令
RUN [“executable”, “param1”, “param2”]使用 exec 执行,可以指定使用其他终端,如 RUN [“/bin/bash”, “-c”, “echo hello”]
CMD指定启动容器时的执行命令,在 docker run 的时候执行,每个 Dockerfile 只能有一条 CMD 命令,如果指定了多条,只有最后一条会被执行,且如果用户启动容器的时候指定了运行的命令,则会覆盖掉 CMD 指定的命令
EXPOSE告诉 Docker 服务端容器暴露的端口号,供互联系统使用,在启动容器时使用 -p ,Docker 主机会自动分配一个端口到指定的端口
ENV指定一个环境变量,会被后续的 RUN 指令使用,并在容器运行时保持
COPY复制指令,从上下文目录中复制文件或者目录到容器里指定路径
ADD类似 COPY

使用 Dockerfile 创建一个镜像:

sudo docker build -t ImageName:TagName dir
  • -t:给镜像加一个 tag
  • ImageName:镜像的名字
  • TagName:镜像的 Tag 名
  • Dir:Dockerfile 所在目录

实例:

docker build -t redis:v1.1 .
  • redis :镜像名
  • v1.1:tag 标签
  • . :当前目录,即 Dockerfile 所在目录

如何查看镜像:

docker image 

查看 docker 系统信息:

docker info [options]

查看 docker 版本信息:

docker version [options]

五、镜像

  • 一般都可以从 Docker hub 来拉取常用的镜像

  • 也可以使用 docker search 的方式来搜索镜像:docker search yolov5

查看 images 占用磁盘空间:

docker system df

5.1 镜像拉取

镜像拉取:

sudo docker pull NAME[:TAG]
  • NAME:镜像的名称
  • TAG:镜像的 tag

拉取所有版本的镜像:

sudo docker pull -a NAME
  • -a:表示拉取名字为 NAME 的镜像的所有版本

dockerhub 页面如下:

在这里插入图片描述
假设要拉取 yolov5 的镜像,可以直接搜索 yolov5 :

在这里插入图片描述

然后执行下面的命令来拉取对应的镜像即可:

docker pull ultralytics/yolov5

5.2 镜像删除

删除镜像:

docker rmi hello-world

5.3 使用 docker save 将镜像保存成 tar 归档文件

docker save [options] IMAGE [IMAGE...]
  • -o:输出到的文件
docker save -o test.tar runoob/ubuntu:v3

5.4 导入使用 docker save 导出的镜像

docker load [options]
  • –input, -i:指定导入的文件
  • –quiet,-q:精简输出信息
docker load < busybox.tar.gz

5.5 使用 docker import 从归档文件中创建镜像

docker import [options] file IMAGE[:TAG]
  • -c:使用 docker 指令创建镜像
  • -m:提交时的文字说明

示例:从 my_ubuntu_v3.tar 来创建镜像,命名为 runoob/ubuntu:v4

docker import my_ubuntu_v3.tar runoob/ubuntu:v4
docker images runoob/ubuntu:v4
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
runoob/ubuntu       v4                  63ce4a6d6bc3        20 seconds ago      142.1 MB

5.6 将本地镜像上传到镜像仓库

要上传的话要有镜像仓库的登录权限

可以将本地镜像推送到 docker 公共仓库——Dockerhub,也可以推送到私有的 docker 仓库中

这里演示如何推送到 dockerhub,要先注册并登录 dockerhub

docker push [options] NAME[:TAG]

示例:将本地镜像上传到仓库:

# 使用 docker login 登录
docker login
# 退出
docker logout
# 上传
docker push myapache:v1

六、容器的一般操作

6.1 查看容器

查看所有的容器:

sudo docker ps -a

查看所有运行的容器:

sudo docker ps

进入已经启动的容器,使用 exec 进入容器会不受原终端运行的影响, 如果在进入容器后执行 exit 命令,容器也不会停止,只会退出该容器。

sudo docker exec -it 'test' bash

6.1 启动容器

拉取到镜像之后,要使用该镜像创建一个容器,才可以使用相关的内容

语法:

docker run [options] Image [command] [arg...]

例如:

docker run -it --name 'test' IMAGE:TAG

如果要在容器中使用英伟达显卡有两种方法:

# 方法一
sudo nvidia-docker run ...
# 方法二
sudo docker run --runtime-nvidia ...

nvidia-docker 是对 docker 的包装,使得容器能够看到并使用主机的 nvidia 显卡,也就是避免需要在容器中安装 cuda 或 gpu 驱动。

参数作用
-a stdin指定标准输入输出内容类型,可以选择 STDIN/STDOUT/STDERR
-d启动容器后后台运行,不会直接进入容器,界面上会返回容器的 ID,使用后台运行方式启动的容器,想要进入容器的话可以使用 docker exec,使用 exit 退出后容器依然会运行
-i以交互模式运行容器,通常和 -t 同时使用(-it)
-P随机端口映射,容器内部端口随机映射到主机的端口
-p指定端口映射,格式为 主机端口:容器端口
-t为容器重新分配一个伪输入终端
–name为启动的容器设置一个名字,方便查看
-m设定容器使用内存的最大值
-w指定工作目录
-v将主机的目录挂载到 docker 的相同目录下,docker 目录下的内容会随着主机相同目录下的内容变化而变化
-e设置容器的环境变量,-e NVIDIA_VISIBLE_DEVICES=all,表示可使用主机的所有卡,-e NVIDIA_VISIBLE_DEVICES=1,2,表示可以使用 1 和 2 卡。
–shm-size共享内存大小,docker run 运行容器的时候,最好指定一下–shm-size,单位是字节,因为默认是docker容器中默认是64M,很多软件无法正常工作,可以设置为–shm-size=59g
–net指定容器的网络模式:–net=host,容器和主机共享网络,主机的所有端口都可以用于容器,可能会出现端口冲突的情况。–net=bride,是默认的模式,-p 用于指定端口映射。–net=container 当前容器和 container 容器共享 network namespace,–net=none,容器有独立的 network namespace
–ipc–ipc=host,容器和主机共享内存
–privileged–privleged=true,使容器拥有 root 权限
–gpus–gpus all,使用主机的所有 gpu,–gpus 2,使用 2 个 gpu,–gpus ‘device=1,2’,使用 1 卡和 2 卡

6.2 进入容器

在使用 -d 的方式进入后台运行时,如果想要进入容器,可以使用下面两种方式:

  • docker attach 'test':使用 exit 退出容器会导致容器终止
  • docker exec -it 'test' bash :使用 exit 退出容器不会导致容器终止

6.3 停止容器

docker stop 'test'

6.3 重启容器

docker restart 'test'

6.4 删除容器

docker stop 'test'
docker rm 'test'

6.5 杀死容器中正在运行的程序

docker kill 'test'

6.6 在 docker 中杀死正在运行的进程

kill -9 pid

6.7 容器的连接

容器中可以运行一些网络应用,要让外部也可以访问这些应用,可以通过 -P 或 -p 参数来指定端口映射。

  • -P :是容器内部端口随机映射到主机的高端口。
  • -p : 是容器内部端口绑定到指定的主机端口,-p 主机端口:容器端口

6.8 查看 docker 的创建历史

docker history [options] IMAGE
  • -H:以可读格式打印镜像大小和日期
  • –no-trunc:显示完整的提交记录
  • -q:仅列出提交记录 id

http://www.jnnr.cn/a/369204.html

相关文章

CNStack 网络插件:hybridnet 的设计与实现

作者&#xff1a; 若禾 CNStack 是阿里云推出的一款开放的一站式企业级云原生技术中台。在异构的混合云基础设施上&#xff0c;对资源进行统一纳管和优化调度&#xff0c;以开放的、云原生的方式为平台及业务系统提供生产可用的产品及组件&#xff0c;帮助用户打造满足大规模、…

【Python小技巧】Anaconda环境下使用Notepad++运行python程序

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录前言一、Anaconda、notepad是什么&#xff1f;二、配置过程1. 找到Python.exe2. 编辑运行命令3. 试运行一段代码4. 保存快捷方式总结前言 最近升级了电脑系统&#…

Qt音视频开发27-ffmpeg视频旋转显示

一、前言 用手机或者平板拍摄的视频文件,很可能是旋转的,比如分辨率是1280x720,确是垂直的,相当于分辨率变成了720x1280,如果不做旋转处理的话,那脑袋必须歪着看才行,这样看起来太难受,所以一定要想办法解析到视频的旋转角度,然后根据这个角度重新绘制。在窗体那边也…

《花雕学AI》05:令人惊奇的ChatGPT,一个能够与人类对话的人工智能

今天是周末&#xff0c;4月2日&#xff0c;早上五点就起床了&#xff0c;没有去打羽毛球。 我平时在手机上喜欢看今日头条&#xff0c;了解各种时事新闻&#xff0c;发现今年来频繁出现的单词就是&#xff1a;ChatGPT&#xff0c;通过简单搜索&#xff0c;我逐步接受了这个概念…

从零开始学OpenCV——图像灰度变换详解(线性与非线性变换)

文章目录图像灰度变化灰度变换介绍灰度线性变换灰度分段线性变换图像点运算灰度非线性变换线性点运算灰度的非线性变换&#xff1a;对数变换灰度的非线性变换&#xff1a;伽马变换灰度的非线性变换&#xff1a;对比拉伸灰度的非线性变换&#xff1a; S形灰度变换灰度的非线性变…

Spring Cloud Alibaba Sentinel

一、简介 官网&#xff1a; https://github.com/alibaba/Sentinel/wiki/%E4%BB%8B%E7%BB%8D Sentinel: 分布式系统的流量防卫兵 随着微服务的流行&#xff0c;服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点&#xff0c;从流量控制、流量路由、熔断降级、系统…

HDFS Balancer负载均衡器

文章目录1、背景2、什么是平衡2.1 每个DataNode的利用率计算2.2 集群的利用率2.3 平衡3、hdfs balancer语法4、运行一个简单的balance案例4.1 设置平衡数据传输带宽4.2 执行banalce5、参考文档1、背景 当我们的hadoop集群运行了一段时间之后&#xff0c;各个DataNode上的数据分…

[LeetCode刷题] - LC006 ZigZag Conversion

题目描述 给定一个字符串&#xff0c;想让你用纵向zig-zag形式展开&#xff0c;然后在横向进行拼接输出最后的新字符串 LeetCode 006Can you solve this real interview question? - Level up your coding skills and quickly land a job. This is the best place to expand…

基于Java(SSM)的学生考勤管理系统

前端&#xff1a;jsp 框架&#xff1a;SSM 数据库&#xff1a;MySQL 有数据库文件&#xff0c;导入即可用 可作为毕设参考 资源路径&#xff1a; https://download.csdn.net/download/yw1990128/87630215 1.1功能需求 信息技术的广泛使用&#xff0c;传统的考勤管理已经不…

多传感器融合定位GNSS、IMU、Lidar、Camera

概述 1.纯激光雷达点云定位 2.融合GNSS的点云定位 3.融合IMU的点云定位 4.融合GNSS、IMU的点云定位 5.融合Camera的点云定位 参考AutoWare 或者 Apollo AutoWare&#xff1a; https://github.com/autowarefoundation/autoware_ai_perception Apollo&#xff1a; https://git…

关于uview2.0计步器最大值赋值问题

需求&#xff1a;当有设置最大值时&#xff0c;计步器则设置max为此数值&#xff0c;最小值1&#xff0c;加大最大值时即不能在往上增加&#xff0c;最大值设置为0则为不限&#xff1b;那么u-number-box的max就要根据设置的数值去判断 uview的u-number-box文档&#xff1a;htt…

oracle 低版本 11.2.0.1.0 创建DBlink访问 oracle 19c提示用户密码错误ORA-010107

由于导数据需要&#xff0c;在oracle 11.2.0.1创建dblink访问oracle19c数据库&#xff0c;提示用户密码错误。 当然不会存在创建是 用户密码错误的情况。 报错页面如下 后面猜想是由数据库版本太低问题导致&#xff0c; 11g版本信息如下&#xff1a; SELECT t.* FROM v$vers…

小白学Pytorch系列--Torch.nn API Quantized Functions(19)

小白学Pytorch系列–Torch.nn API Quantized Functions(19) 方法注释parametrizations.orthogonalparametrizations.spectral_normparametrize.register_parametrizationparametrize.remove_parametrizationsparametrize.cachedparametrize.is_parametrizedparametrize.Paramet…

MySQL主从复制的原理与实操+mycat2读写分离

文章目录MySQL主从复制的原理与实操主从复制原理MySQL主从复制的高级应用MySQL主从复制实操&#xff08;一主两从&#xff09;**环境准备****master配置**slave设置MySQL读写分离配置&#xff08;一主两从&#xff09;创建数据源查询集群创建逻辑库修改逻辑库的数据源测试读写分…

spark sql(七)源码解析 - sparksql什么时候将时间类型转换成整型或者长整型,又是什么时候将整型或长整型转为时间类型?

1、背景 在做sql下推逻辑时&#xff0c;因为时间类型的自动转换导致自定义的下推逻辑失效 &#xff0c;为了深入了解问题的原因和更好的解决问题&#xff0c;所以准备源码追踪下sparksql转换类型的具体时间点。另外因为只需要验证sql 字段转换的逻辑&#xff0c;所以只需要有一…

大语言模型带来的一些启发

仅代表个人看法&#xff0c;不喜勿喷。 The limits of my language means the limits of my world. (Ludwig Wittgenstein) 我的语言的极限意味着我的世界的极限。——维特根斯坦 大语言模型解决的不仅是处理文本相关问题&#xff0c;它带来的是人对世界的理解&#xff0c;或者…

安装Ubuntu双系统

本文为自己安装记录回顾用 1、下载想要安装的 Ubuntu 系统 https://ubuntu.com/download/desktop 2、制作U盘启动盘&#xff0c;并在win10的 磁盘管理 中为Ubuntu腾出磁盘空间 插上U盘&#xff0c;打开制U盘启动盘的软件 &#xff0c;选择要烧录的U盘以及系统镜像文件&#xff…

正则表达式-运算符优先级和匹配规则

文章目录一、正则表达式-运算符优先级二、正则表达式-匹配规则总结一、正则表达式-运算符优先级 正则表达式 - 运算符优先级 正则表达式从左到右进行计算&#xff0c;并遵循优先级顺序&#xff0c;这与算术表达式非常类似。 相同优先级的从左到右进行运算&#xff0c;不同优先…

【CE】Mac下的CE教程Tutorial:基础篇(第5关:代码查找器)

▒ 目录 ▒&#x1f6eb; 导读开发环境1️⃣ 第五关&#xff1a;代码查找器翻译操作步骤&#x1f6ec; 文章小结&#x1f4d6; 参考资料&#x1f6eb; 导读 开发环境 版本号描述文章日期2023-03-操作系统MacOS Big Sur 11.5Cheat Engine7.4.3 1️⃣ 第五关&#xff1a;代码查…

mysql主从复制原理及一主一从搭建过程—2023.04

文章目录一、MySQL主从复制介绍1、主从复制概念2、为什么要做主从复制3、主从复制原理4、主从复制形式5、主从复制主要用途二、MySQL一主一从搭建1、准备工作2、MySQL主从复制部署流程1. 关闭防火墙&#xff0c;两台主机都操作2. 修改配置文件&#xff0c;两台主机都操作3. 修改…