docker入门手册

news2024/11/23 21:51:53

目录

1. docker基础

1. 1 docker介绍

1.2 docker架构与核心组件

1.3 docker安装和卸载

安装

卸载

docker加速器设置 -> 可选

1.4 权限问题

1.5 docker服务相关操作命令

2. docker镜像管理

2.1 镜像的搜索/获取/查看

镜像搜索

2.2 镜像别名/删除

2.3 镜像的导入导出

2.4 镜像的历史和详细信息

2.6 总结

3. docker容器管理

3.1 容器的查看/创建/启动

3.2 容器的暂停/重启

3.3 容器的关闭/终止/删除

3.4 容器的进入/退出

3.5 容器的日志/信息/端口/重命名

3.6 基于容器的镜像导入导出

3.6 总结


1. docker基础

1. 1 docker介绍

  • docker是什么 ?

    Docker 是一个开源的应用容器引擎,是直接运行在宿主操作系统之上的一个容器,使用沙箱机制完全虚拟出一个完整的操作,容器之间不会有任何接口,从而让容器与宿主机之间、容器与容器之间隔离的更加彻底。每个容器会有自己的权限管理,独立的网络与存储栈,及自己的资源管理能,使同一台宿主机上可以友好的共存多个容器。

  • docker与虚拟机对比

    如果物理机是一幢住宅楼,虚拟机就是大楼中的一个个套间,而容器技术就是套间里的一个个隔断。

    • 虚拟化技术不同

      • VMware Workstation、VirtualBoX

        硬件辅助虚拟化:(Hardware-assisted Virtualization)是指通过硬件辅助支持模拟运行环境,使客户机操作系统可以独立运行,实现完全虚拟化的功能。

      • Docker

        操作系统层虚拟化:(OS-level virtualization)这种技术将操作系统内核虚拟化,可以允许使用者空间软件实例被分割成几个独立的单元,在内核中运行,而不是只有一个单一实例运行。这个软件实例,也被称为是一个容器(containers)、虚拟引擎(Virtualization engine)、虚拟专用服务器(virtual private servers)。每个容器的进程是独立的,对于使用者来说,就像是在使用自己的专用服务器。

      以上两种虚拟化技术都属于软件虚拟化,在现有的物理平台上实现对物理平台访问的截获和模拟。在软件虚拟化技术中,有些技术不需要硬件支持;而有些软件虚拟化技术,则依赖硬件支持。

    • 应用场景不同

      • 虚拟机更擅长于彻底隔离整个运行环境。如: 云服务提供商通常采用虚拟机技术隔离不同的用户。

      • Docker通常用于隔离不同的应用,例如前端,后端以及数据库。

    • 资源的使用率不同

      虚拟机启动需要数分钟,而Docker容器可以在数毫秒内启动。由于没有臃肿的从操作系统,Docker可以节省大量的磁盘空间以及其他系统资源。

  • docker的版本

    • Docker-CE -> 社区版

      • Stable 版

        • 稳定版

        • 一个季度更新一次

      • Edge 版

        • 非稳定版

        • 一个月更新一次

    • Docker-EE

      • 收费的, 企业版

1.2 docker架构与核心组件

  • docker架构

    • 客户端

      • linux终端, 用来操作docker指令

    • docker服务器

      • 守护进程 -> 有一个应用程序, 没有操作终端

        • 不能和用户进行交互

          • 输入

          • 输出

        • 在后台周期性的执行某些操作

      • 管理docker容器和docker镜像

    • docker镜像

      • 一些操作系统磁盘文件

      • nginx镜像

        • 有一个操作系统, 上边安装了nginx

      • ubuntu镜像

      • redis镜像

      • 用户可以自己制作, 也可以从官方下载

    • docker容器

      • 通过docker操作命令可以磁盘上的docker镜像启动, 启动之后就是docker容器

        • 容器中运行的是一个操作系统

    • 镜像仓库

      • docker hub -> 官方提供的镜像仓库

1.3 docker安装和卸载

安装

# 1. 安装基本软件
$ sudo apt-get update
$ sudo apt-get install apt-transport-https ca-certificates curl software-properties-common lrzsz -y
# 2. apt仓库添加并阿里云的docker软件包
# 把下载的key添加到本地trusted数据库中。
$ sudo curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
$ sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
# 3. 升级软件源
$ sudo apt-get update
# 4. 安装docker
$ sudo apt-get install docker-ce -y
# 5. 测试docker
$ docker version

卸载

# 卸载软件
sudo apt-get purge docker-ce 
	- 删除对用的信息文件+应用程序
sudo apt-get remove docker-ce 
	- 只删除应用程序
	
# 删除目录
/etc/docker -> 身份认证目录
/var/lib/docker -> 存储镜像的

$ sudo rm /etc/docker /var/lib/docker -r

docker加速器设置 -> 可选

# docker安装完成之后, 启动docker容器需要镜像, 镜像需要从官方下载, 可以通过配置加速器, 提高下载速度

# 访问 https://dashboard.daocloud.io 网站,登录 daocloud 账户
# 提交下载镜像的速度
# 打开加速页面, 拷贝下边的命令到linux终端, 执行
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io
# 可以去 /etc/docker/daemon.json
这个文件中添加了一句话:
{"registry-mirrors": ["http://f1361db2.m.daocloud.io"]}
# 重启docker服务
sudo systemctl restart docker

1.4 权限问题

$ docker version
Client:
 Version:           18.09.0
 API version:       1.39
 Go version:        go1.10.4
 Git commit:        4d60db4
 Built:             Wed Nov  7 00:49:01 2018
 OS/Arch:           linux/amd64
 Experimental:      false
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.39/version: dial unix /var/run/docker.sock: connect: `permission denied`

# 解决方案1 -> 在指令前添加sudo
sudo docker version

# 解决方案2 -> 只需要设置一次, 以后就都OK了
# 将当前用户, 添加到docker组中
# 检测docker组是否存在
/etc/group, 在这个文件中搜索 docker 关键字
# 将当前用户添加到docker组中
sudo gpasswd -a 当前用户 要添加到的组
sudo gpasswd -a go docker
# 如果不行, 执行下边的命令, 进行组的切换
newgrp - docker
# 重启docker服务器服务
sudo systemctl restart docker

# 解决方案3 -> 电脑重启一次需要设置一次
修改/var/run目录下的docker.sock文件权限
sudo chmod 666 docker.sock 

1.5 docker服务相关操作命令

# 启动
sudo systemctl start docker
# 关闭
sudo systemctl stop docker
# 重启
sudo systemctl restart docker
# 查看状态
sudo systemctl status docker

2. docker镜像管理

2.1 镜像的搜索/获取/查看

  • 镜像搜索

    # 查看docker中的所有指令
    docker --help
    # 命令
    $ docker search 镜像名
    # 字段关键字
    NAME: 镜像的名字
    DESCRIPTION: 镜像的描述                                    
    STARS: 镜像的下载量            
    OFFICIAL: 是不是官方的出品的镜像           
    AUTOMATED: 会不会启动一些脚本之类的程序
  • 获取镜像

    # 下载远程仓库(如Docker Hub)中的镜像
    $ docker pull 镜像名(search时得到的name字段)
    # 下载完成之后, 就存储到了本地的镜像仓库 -> 本地目录
    /var/lib/docker
    
    # 重置root用户密码
    sudo passwd root
  • 查看镜像

    # 命令
    # 查看所有的镜像
    $ docker images
    $ docker image ls
    # 查看某个镜像
    $ docker images 镜像名
    $ docker image ls 镜像名字
    # 字段关键字
    REPOSITORY: 镜像的名字
    TAG: 镜像的版本
    IMAGE ID: 镜像ID(==身份证号, 是唯一的)
    CREATED: 创建时间
    SIZE: 镜像的大小
    # 细节
    通常在描述一个镜像的时候:
    	镜像名:tag -> nginx:latest
    	如果tag的值为latest, 那么latest可以省略不写
    	nginx == nginx:latest

2.2 镜像别名/删除

  • 镜像别名

    $ docker tag 现在的名字:tag 别名:tag
    # 不同的名字对应的镜像ID相同
    # 镜像并没有复制, 只是多了一个名字
  • 删除镜像

    docker rmi [OPTIONS] IMAGE [IMAGE...]
    	- IMAGE: 镜像名/镜像ID
    # 如果镜像有别名, 只能够安照 镜像名:tag 进行删除, 不能根据ID进行删除
    # 如果镜像有多个名字, 删除任意一个名字, 名字会删除, 镜像还在
    # 当镜像只剩下一个名字的时候, 对其进行删除, 镜像就被删除了

2.3 镜像的导入导出

  • 镜像导出 -> 镜像备份和分发

    # 将本地仓库中的镜像导出的磁盘目录
    docker save [OPTIONS] IMAGE [IMAGE...]
    	OPTIONS:
    		-o, --output string   Write to a file, instead of STDOUT
    docker save -o 导出之后镜像名字(自己起名) 镜像名
    	IMAGE: 要导出的镜像
  • 镜像导入

    # 将外部镜像, 导入到本地的镜像仓库中
    docker load [OPTIONS]
    	OPTIONS:
    		-i, --input string 
    docker load -i 镜像文件的名字
    $ docker load < 镜像文件的名字

2.4 镜像的历史和详细信息

  • 查看镜像的历史信息

    # 制作镜像的时候的操作步骤
    docker history
  • 查看镜像的详细信息

    # 镜像的属性信息, 以json格式输出的
    # https://yq.aliyun.com/articles/230067
    docker inspect 镜像名/镜像ID

2.6 总结

3. docker容器管理

docker将镜像文件启动, 得到一个容器, 一个容器可以被看做一个操作系统

3.1 容器的查看/创建/启动

  • 容器查看

    # 命令, 只能看到正在运行的容器的状态
    # 启动的每个容器都是一个进程
    docker ps
    # 相关的头介绍
    CONTAINER ID: 容器启动之后的ID, 是唯一的
    IMAGE: 当前容器是基于那个镜像启动的
    COMMAND: 容器启动之后, 默认执行了什么命令
    CREATED: 容器的创建时间
    STATUS: 容器当前状态, 
    	created: 容器被创建, 但是不能使用
    	runing: 运行状态
    	pause: 暂停状态
    	exited: 容终止运行, 但是容器还在
    PORTS: 映射的端口, 主机和容器直接的端口映射
    NAMES: 容器启动之后的名字, 如果没有指定, 会随机生成一个, 这个名字不能重复
    参数:
      -a, --all: 显示所有容器, 默认只显示running状态的
      -q, --quiet: 只显示容器ID
  • 容器创建

    # 容器被创建, 但是还不能使用, 需要启动
    $ docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
    	OPTIONS:
    		-a, --attach list   给容器关联 STDIN, STDOUT or STDERR
    		-t, --tty: 给容器绑定终端
    		-i, --interactive: 关联标准输入
    		--rm: 容器终止运行的时候, 自动被删除
    		--name string: 手动指定容器的名字
    	IMAGE: 基于哪个镜像启动容器
    	COMMAND: 可以不写, 或许写个bash
    	ARG...: shell命令的参数
  • 容器启动

    • 启动创建的容器

      $ docker start [OPTIONS] CONTAINER [CONTAINER...]
      	OPTIONS:
      		-a, --attach               Attach STDOUT/STDERR and forward signals
        		-i, --interactive          Attach container's STDIN
        	CONTAINER: 容器名或者容器ID
    • 创建新容器并启动

      # 通过一个命令创建容器, 并且启动
      # docker run == docker create + docker start
      docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
      docker run    [OPTIONS] IMAGE [COMMAND] [ARG...]
      	OPTIONS: 
      		-d, --detach: 以守护进程的形式运行
      		-a, --attach list   给容器关联 STDIN, STDOUT or STDERR
      		-t, --tty: 给容器绑定终端
      		-i, --interactive: 关联标准输入
      		--rm: 容器终止运行的时候, 自动被删除
      		--name string: 手动指定容器的名字

3.2 容器的暂停/重启

  • 暂停

    docker pause CONTAINER [CONTAINER...]
  • 取消暂停

    docker unpause CONTAINER [CONTAINER...]
  • 重启

    docker restart [OPTIONS] CONTAINER [CONTAINER...]
        Options:
          -t, --time int: 延时时间, 默认10s

3.3 容器的关闭/终止/删除

  • 关闭

    # 从running -> exited 状态, 容器还在, 有延时
    docker stop [OPTIONS] CONTAINER [CONTAINER...]
        Options:
          -t, --time int: 延时时间, 默认10s
  • 终止

    # 从running -> exited 状态, 容器还在, 直接关闭, 没有延时
    docker kill [OPTIONS] CONTAINER [CONTAINER...]
        Options:
          -s, --signal string: 指定发出的信号, 一般不用
  • 删除

    • 删除未运行的容器 -> 状态 非 running(up)

      docker rm 容器名/容器ID
    • 删除运行的容器

      docker rm 容器名/容器ID -f
      	-f: 强制删除容器

    • 批量删除容器 

      docker rm $(docker ps -aq) -f
      docker rm `docker ps -aq` -f

3.4 容器的进入/退出

  • 进入容器

    • 创建并进入 - 使用频率低

      docker run    [OPTIONS] IMAGE [COMMAND] [ARG...]
      $ docker run -it --rm --name myxx ubuntu bash
    • 手动进入

      # 创建并启动容器
      $ docker run -itd --rm --name myxx ubuntu bash
      # 手动进入容器中
      docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
      	OPTIONS:
      		-i, --interactive          Keep STDIN open even if not attached
        		-t, --tty                  Allocate a pseudo-TTY
        	CONTAINER: 容器名字/容器ID
        	COMMAND: shell指令 -> bash
        	[ARG...]: shell命令的参数

  • 退出容器

    # 第一种方式
    在终端输入: exit
    # 第二种方式: ctrl+D

3.5 容器的日志/信息/端口/重命名

  • 查看容器的日志信息

    # 容器运行一段时间之后, 会生成log日志, 如果没有生成, 是看不到的
    docker logs 容器名/容器ID
  • 查看容器的详细信息

    # https://yq.aliyun.com/articles/230067
    # 查看镜像的详细信息
    docker inspect 容器名/容器ID
  • 查看容器的端口信息

    # 查看本机和容器的端口映射
    docker port 容器名/容器ID
  • 容器重命名

    docker rename CONTAINER NEW_NAME

3.6 基于容器的镜像导入导出

镜像的导出

docker export [OPTIONS] CONTAINER
	Options:
  		-o, --output string: 导出的镜像文件的名字
  		
docker export 容器名/容器ID > 导出的镜像的名字(自己起)

镜像的导入 -> 导入到本地的镜像仓库中

docker import
cat 要导入的镜像文件 | docker import - 新的镜像名:tag

对比

save 和 export
	- 使用save导出镜像, 不能对镜像进行修改
	- export通过容器导出, 原始镜像可以通过启动容器进行修改
	- 通过export导出镜像, 会丢失镜像的历史记录
	   如果没有通过容器对进行做任何修改, export导出的镜像小
load 和 import
	- 都是将导出的镜像导入到本地镜像仓库
	- 如果使用load进行导入: 镜像名无法修改
	- import导入镜像: 镜像名是可以修改的

3.6 总结

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Apache Atlas产品调研

元数据产品调研 &#x1f4a1; 思考可以构成一座桥&#xff0c;让我们通向新知识。—— 普朗克 一、什么是元数据 元数据是关于数据的数据&#xff0c;是为了描述数据的相关信息而存在的数据。 元数据是用数据管理数据&#xff0c;是快速查找数据、精确定位数据、准确理解数据…

CSS3-三大特性-继承性、层叠性、优先级

CSS三大特性 1 继承性 2 层叠性 3 优先级 1 继承性 特性&#xff1a;子元素有默认继承父元素样式的特点&#xff08;子承父业&#xff09; 可以继承的常见属性&#xff1a; 1 color 2 font-style、font-weight、font-size、font-family 3 text-indent、text-align 4 line-heigh…

io.netty学习(七)字节缓冲区 ByteBuf(下)

目录 前言 实现原理 ByteBuf 的使用案例 ByteBuf 的3种使用模式 堆缓冲模式 直接缓冲区模式 复合缓冲区模式 总结 前言 在了解了 ByteBuffer 的原理之后&#xff0c;再来理解Netty 的 ByteBuf 就比较简单了。 ByteBuf 是 Netty 框架封装的数据缓冲区&#xff0c;区别…

第5章 函数式编程

第5章 函数式编程 5.1 函数式编程思想 在之前的学习中&#xff0c;我们一直学习的就是面向对象编程&#xff0c;所以解决问题都是按照面向对象的方式来处理的。比如用户登陆&#xff0c;但是接下来&#xff0c;我们会学习函数式编程&#xff0c;采用函数式编程的思路来解决问…

【Python 随练】阶乘累加计算

题目&#xff1a; 求 12!3!…20!的和。 简介&#xff1a; 在本篇博客中&#xff0c;我们将解决一个数学问题&#xff1a;计算阶乘序列的和。我们将介绍阶乘的概念&#xff0c;并提供一个完整的代码示例来计算给定范围内阶乘数的和。 问题分析&#xff1a; 我们需要计算从1…

基于“遥感+”融合技术在碳储量、碳收支、碳循环等多领域监测与模拟

卫星遥感具有客观、连续、稳定、大范围、重复观测的优点&#xff0c;已成为监测全球碳盘查不可或缺的技术手段&#xff0c;卫星遥感也正在成为新一代 、国际认可的全球碳核查方法。本内容目的就是梳理碳中和与碳达峰对卫星遥感的现实需求&#xff0c;系统总结遥感技术在生态系统…

开源开放 | 开源知识图谱抽取工具发布大模型版DeepKE-LLM

DeepKE-LLM链接&#xff1a; https://github.com/zjunlp/DeepKE/tree/main/example/llm OpenKG地址&#xff1a; http://openkg.cn/tool/deepke Gitee地址&#xff1a; https://gitee.com/openkg/deepke/tree/main/example/llm 开放许可协议&#xff1a;Apache-2.0 license 贡献…

计算机网络核心

1、OSI开放式互联参考模型 1、物理层&#xff1a;机械、电子、定时接口通信信道上的原始比特流传输。2、数据链路层&#xff1a;物理寻址&#xff0c;同时将原始比特流转变为逻辑传输线路。3、网络层&#xff1a;控制子网的运行&#xff0c;如逻辑编址、分组传输、路由选择(IP…

chatgpt赋能python:Python捕获Ctrl+C信号

Python 捕获 CtrlC 信号 在 Python 中&#xff0c;我们通过按下键盘上的 CtrlC 快捷键可以中断程序的运行&#xff0c;但是在某些情况下&#xff0c;我们希望程序在收到 CtrlC 信号后进行一些特殊的处理&#xff0c;而非直接退出或崩溃。这就需要捕获 CtrlC 信号&#xff0c;并…

前端Vue自定义简单实用中国省市区三级联动选择器

前端Vue自定义简单实用中国省市区三级联动选择器&#xff0c; 请访问uni-app插件市场地址&#xff1a;https://ext.dcloud.net.cn/plugin?id13118 效果图如下&#xff1a; #### 使用方法 使用方法 <!-- themeColor:主题颜色 ref:设置唯一ref pickerValueDefault:默认选择…

C++技能系列 ( 6 ) - 可调用对象、std::function与std::bind【详解】

系列文章目录 C技能系列 Linux通信架构系列 C高性能优化编程系列 深入理解软件架构设计系列 高级C并发线程编程 期待你的关注哦&#xff01;&#xff01;&#xff01; 现在的一切都是为将来的梦想编织翅膀&#xff0c;让梦想在现实中展翅高飞。 Now everything is for the…

单片机如何生成周期正弦波

一&#xff0c;简介 在某些场景需要使用单片机的IIS等外设播放正弦波音频数据。本文介绍一种“笨方法”来生成固定频率和固定幅度的正弦波定点型数据&#xff0c;记录总结学习使用。 二&#xff0c;步骤简介 总体步骤概述&#xff1a; 1&#xff0c;使用Audition生成制定波形…

chatgpt赋能python:Python异常捕获存在的问题

Python 异常捕获存在的问题 作为一门广受欢迎、应用广泛的编程语言&#xff0c;Python 在处理异常方面有着比较完善的设计。Python 提供了 try…except…finally 这样的异常处理机制&#xff0c;通过这些机制&#xff0c;开发者可以捕获、处理程序中产生的异常&#xff0c;从而…

【安全】awvs安装(一)

目录 一、简介 二、将安装文件传输到服务器 三、安装 3.1 赋权 3.2 执行安装 四、激活 4.1 复制激活文件到对应安装目录 4.2 赋权 4.3 运行激活文件 五、访问 六、设置不自动更新 七、设置开启 八、忘记密码 前言&#xff1a;安全漏洞扫描工具awvs的安装使用 一、简介…

Android DiskLruCache完全解析,硬盘缓存的最佳方案

概述 LruCache只是管理了内存中图片的存储与释放&#xff0c;如果图片从内存中被移除的话&#xff0c;那么又需要从网络上重新加载一次图片&#xff0c;这显然非常耗时。对此&#xff0c;Google又提供了一套硬盘缓存的解决方案&#xff1a;DiskLruCache(非Google官方编写&…

Nginx基础配置

Nginx的基础配置&#xff1a; Nginx的基础配置 一、实战案例&#xff1a;1.Nginx访问统计&#xff1a;2.基于授权的访问控制&#xff1a;3.基于客户端访问设置&#xff08;设置黑白名单&#xff09;&#xff1a;4.基于域名的nginx虚拟主机&#xff1a;5.基于IP的nginx虚拟主机…

算法分析02--分治法

3.分治法 3.1递归 递归是指子程序&#xff08;或函数&#xff09;直接调用自己或通过一系列调用语句间接调用自己&#xff0c; 是一种描述问题和解决问题的常用方法。使用递归技术往往使函数的定义和算法的描述简洁且易千理解。 递归有两个基本要素&#xff1a;边界条件&…

告别固定字体大小:CSS使用相对单位提升网页可访问性和兼容性

在 Web 开发领域中&#xff0c;有很多误解流传&#xff0c;即使它们被反驳了很多次也仍然存在。"外部链接应该总是在新标签页中打开" 就是一个很好的例子。CSS Tricks 在将近十年前就对此进行了详细的解释&#xff08;简而言之&#xff1a;大多数情况下是错误的&…

沃尔玛、亚马逊跨境境电商如何实现自养账号采退、海淘及测评的

今天曹哥还是针对下亚马逊、沃尔玛跨境平台如何实现自己养买家号可以给自己采购、海淘及测评等技术问题 首先你要有一个稳定的环境方案&#xff0c;这个是做自养号采购、海淘及测评的基础。环境有很多&#xff0c;从早期的虚拟机&#xff0c;模拟机&#xff0c;云手机&#xf…

MATLAB | 绘图复刻(十) | 旋转45度的相关系数热图绘制

我们在论文里经常能见到这样三角形的相关性热图&#xff0c;这样的热图绘制出来会更节省空间&#xff1a; 这期就教大家如何绘制三角形的热图&#xff0c;绘制效果如下&#xff1a; 以下是教程部分&#xff1a; 0 数据准备 这里随便生成了一组数据&#xff0c;计算了相关系数&…