docker入门以及常见的命令

news2024/11/26 7:36:09

目录

1. 什么是docker

2. docker的核心组件

3. docker的安装

3.1 安装的先决条件

3.2.1 ubuntu安装docker

3.2.2 CentOS安装docker

3.3 配置镜像加速器

4. 镜像常用操作

4.1 搜索镜像

4.2 镜像下载

4.3 查看宿主机中的镜像

4.3 删除镜像

5. 容器常用命令

5.1 运行容器

5.2 使用容器

5.3 查看运行的容器

5.4 容器的退出

5.5 容器的启动与停止

5.6 复制文件

5.7 进入容器

5.9 查看容器信息

5.10 容器的删除

6. 其他(了解)

6.1 如何卸载原先安装的 docker

6.2 关于删除容器


1. 什么是docker

首先我们可以好好的看看docker的那个可能的图标,你想象到了什么? ...

docker是一个开源的应用容器引擎,有Docker公司(前dotCloud公司)开发,基于Apache2.0开源授权协议发行。该引擎提供了一个轻量、快递的环境,能够运行开发者的程序,并方便高效的将程序从开发者的电脑部署到测试环境,然后再部署到生产环境。

docker的优点:

  • 启动速度快(秒级),由于去除了管理程序的开销,docker容器拥有很高的性能,同一台宿主机可以运行更多的容器,有效的利用了资源

     

  • 能够为开发,测试和部署提供一致的环境,避免了在开发或测试时一切正常,但在生成环境中却不能运行的问题。

  • 鼓励面向服务架构,Docker 推荐单个容器只运行一个应 用程序或进程,这样就形成了一个分布式的应用程序模型

docker用途

  • 提供一次性的环境。比如,本地测试他人的软件、持续集成的时候提供单元测试和构建的环境
  • 提供弹性的云服务。因为 Docker 容器可以随开随关,很适合动态扩容和缩容
  • 组建微服务架构。通过多个容器,一台机器可以跑多个服务,因此在本机就可以模拟出微服务架构

docker与虚拟机的区别:

  • VM(VMware)在宿主机器、宿主机器操作系统的基础上创建虚拟层、虚拟化的操作系统、虚拟化的仓库,然后再安装应用

  • Docker在宿主机的操作系统上创建Docker引擎,直接通过宿主机的操作系统调用硬件资源,而不是虚拟化操作系统和硬件资源,所以占用资源更少,性能更高。

  • 对比图

特性dockervm
启动速度秒级分钟级
硬盘使用MBGB
性能接近原生弱与原生
系统支持数量单机可支持数百甚至数千几十个

2. docker的核心组件

1)Docker客户端和服务器,也称为Docker引擎
2)Docker镜像
3)Registry
4)Docker容器

docker架构图:

 

  • docker引擎
    docker是客户端/服务器架构的程序,docker客户端只需向docker服务器或守护进程发送请求,守护进程或服务器完成后返回结果,docker的守护进程有时也称作为docker引擎。用户可以在同一台宿主机上运行Dokcer守护进程和客户端,也可以从本地的docker客户端连接到另一台宿主机上的docker引擎。示意图:

     

  • docker镜像
    镜像是docker容器的基石,用户基于镜像来运行容器的,镜像在docker生命周期中属于“构建阶段”,镜像基于联合文件系统的一种层式结构,由一系列的命令构建出来。可以将镜像理解为容器的“源代码”。镜像体积小,便于分享,存储,更新。

  • Registry
    Registry即仓库,Registry分为公共和私有的两种。docker公司运营的公共Registry是docker hub。用户可以自己注册账号,在其中保存自己的镜像。也可以搭建私有的仓库。

  • 容器
    镜像处在docker生命周期的“构建”阶段,容器则处在“运行”阶段,如果将镜像理解为一个“类”,则容器可以理解为这个“类”的“运行时实例”,可以被创建,启动,停止,删除。
    总结起来容器就是:一个镜像格式,一系列标准操作,一个执行环境。

3. docker的安装

3.1 安装的先决条件

安装docker时需要一些基本的前提条件:

  • 运行64位cpu架构的机器(x86_64, amd64),不支持32位机器
  • 运行linux3.8或更高的内核(可以使用uname -a 命令查看系统内核)
  • 内核必须支持一种合适的存储驱动:Device Messager,AUFS,vfs等,默认为Device Messager。
  • 内核支持cgroup和命名空间

注:
cgroups,其名称源自控制组群(control groups)的简写,是Linux内核的一个功能,用来限制、控制与分离一个进程组的资源(如CPU、内存、磁盘输入输出等)

3.2.1 ubuntu安装docker

1.卸载可能存在的旧版本
apt-get remove docker docker-engine docker-ce docker.io

2.更新apt包索引
apt-get update

3.安装以下包以使apt可以通过HTTPS使用存储库(repository)
apt-get install -y apt-transport-https ca-certificates curl software-properties-common

4.添加Docker官方的GPG密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
成功后应该显示OK

5.设置stable存储库
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

6.再更新一下apt包索引
apt-get update

7.安装最新版本的Docker CE
apt-get install -y docker-ce

8.验证
8.1查看docker服务是否启动
systemctl status docker
或如下命令
service docker status

8.2若未启动,则启动docker服务
systemctl start docker 或如下命令service docker start

以上在线安装方式,通过连接到官网可以安装最新的版本(目前的版本为19.04),也可以使用下面的方式从软件仓库直接安装

apt-get update && apt-get install  -y docker.io

这种方式安装的优点是简单,缺点是版本较低(目前是18.09)

3.2.2 CentOS安装docker

1)root账户登录,查看内核版本如下

[root@localhost ~]# uname -a
Linux localhost.localdomain 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018 
x86_64 x86_64 x86_64 GNU/Linux
  1. yum包更新到最新
[root@localhost ~]# yum update
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
 * base: centos.ustc.edu.cn
 ......

注:如果不执行更新,获取的docker版本太旧

3)安装yum-util, 该包提供yum-config-manager功能

yum install -y yum-utils
  1. 设置docker源

yum-config-manager --add-repo http://download.docker.com/linux/centos/docker-ce.repo(中央仓库)
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo(阿里仓库)

可以任选其一

5) 安装docker, yum install docker-ce-版本号

[root@localhost ~]# yum install docker-ce-18.06.3.ce
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
正在解决依赖关系
--> 正在检查事务
---> 软件包 docker-ce.x86_64.0.18.06.3.ce-3.el7 将被 安装

6)查看docker版本号,验证

[root@localhost ~]# docker version
Client:
 Version:           18.06.3-ce
 API version:       1.38
 Go version:        go1.10.3
 Git commit:        d7080c1
 Built:             Wed Feb 20 02:26:51 2019
 OS/Arch:           linux/amd64
 Experimental:      false

7)启动docker

systemctl start docker
  1. 设置开机启动
systemctl enable docker

3.3 配置镜像加速器

默认的情况下docker会从docker hub中查找或下载镜像,在国内会比较慢。可以使用阿里的镜像加速器来提高速度。
具体操作步骤如下:
1)获取加速器地址
首先需要有一个淘宝或支付宝的账号,登录阿里云 https://www.aliyun.com/。

点击“控制台”,进入如下界面:

点击容器镜像服务,就可以获取镜像加速器地址,操作如下图所示:

 

 

 

2)配置docker
在/etc/docker目录下创建daemon.json配置文件

vim /etc/docker/daemon.json

具体配置文件内容如下:

{
    "registry-mirrors":["你的阿里云专属加速器地址"]
}

3)重新加载daemon

systemctl daemon-reload

4)重启docker

systemctl restart docker

4. 镜像常用操作

4.1 搜索镜像

docker search 镜像名称

示例:

docker search rabbitmq

4.2 镜像下载

docker pull 镜像名称:标签

如果未指定标签,则默认我latest

示例:

# 未指定标签
docker pull ubuntu

#指定标签
docker pull ubuntu:16.04

4.3 查看宿主机中的镜像

docker images

4.3 删除镜像

docker rmi 镜像id或名称

如果提示镜像被使用,需要先停止某个ID的容器,那么要先删除容器再删除镜像,如需强行删除可以使用-f参数,例如:docker rmi -f ubuntu:16.04

5. 容器常用命令

镜像在docker生命周期中的构建阶段,容器则属于运行阶段,可以将容易理解为镜像的一个运行实例。

5.1 运行容器

首先让我们来尝试启动第一个docker容器,docker run命令提供了docker容器的创建到启动的功能。使用该命令创建和启动容器也是docker的推荐做法。

#创建并启动一个ubuntu容器
sudo docker run -it ubuntu:18.04 /bin/bash

使用该命令时,如果镜像还没有下载,则docker会首先下载该镜像,然后执行创建并启动容器。具体参数说明如下:

  • -i 开启容器中的STDIN(标准输入流),能接受命令,可以理解为已交互模式启动容器
  • -t 为容器分配一个tty终端,即:分配一个命令行窗口, 有了这两个参数新创建的容器才能有一个交互式shell。
  • /bin/bash 参数告诉docker在容器中启动一个bash shell
  • 可以通过--name 参数为容器命名
  • 如果指定 -d 参数,则说明容器以守护进程形式启动
  • 可以使用 docker help run查看更详细的参数说明
  • 在容器中使用,“cat /etc/issue”可以查看到运行中的容器其实为ubuntu系统。

-i -t参数是我们创建一个交互式容器的最基本的参数,需说明的是所创建的容器是交互式的,而不是一个运行后台服务的容器。

运行上面的命令,docker会为我们创建一个ubuntu的容器,并自动以root身份进入容器,如下图:

图中的7b8b196818d5为容器的编号。

 

创建容器还可以使用docker create命令,如:

docker create -it ubuntu:latest

参数与docker run命令相同,与docker run命令不同的是docker create命令创建的容器不会自动启动。

5.2 使用容器

这是一个精简但完整的ubuntu系统,例如执行以下的命令:

root@7b8b196818d5:/# hostname
7b8b196818d5

root@7b8b196818d5:/# ls
bin   dev  home  lib64  mnt  proc  run   srv  tmp  var
boot  etc  lib   media  opt  root  sbin  sys  usr

但当你收入ip,或ifconfig命令时会发现,无法找到命令:

root@7b8b196818d5:/# ip a
bash: ip: command not found

root@7b8b196818d5:/# ifconfig
bash: ifconfig: command not found

root@7b8b196818d5:/# whereis ifconfig
ifconfig:

#查看环境变量
root@7b8b196818d5:/# env
.....
HOSTNAME=7b8b196818d5
PWD=/
HOME=/root
TERM=xterm
SHLVL=1
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
_=/usr/bin/env
OLDPWD=/etc/apt

因为是这些命令还都没有安装,ubuntu镜像是精简版的系统,如果需要使用这些命令需要另外安装net-tools,包括vi,vim等也是需要另外安装的。

5.3 查看运行的容器

保持刚才运行的容器不要退出,另外打开一个命令终端,输入下列命令:

lisen@ubuntu:~$ sudo docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
7b8b196818d5        ubuntu:18.04        "/bin/bash"         2 hours ago         Up 2 hours                              cranky_lewin

docker ps命令可以查看运行中的容器信息,包括id,镜像,名称等。

注:为什么要保持刚才运行的ubuntu容器不退出?
原因是上面创建的是普通的交互式容器,不是运行于后台的服务容器,如果推出则容器自动停止运行。
容器退出后可以使用 docker ps -a 命令查看到,-a参数表示查看所有容器,包括已停止的。

5.4 容器的退出

退出时如果想继续运行容器:按顺序按【ctrl+p】,【ctrl+q】
如果不想继续运行:按【ctrl+d】或输入exit

如果不是运行于后台的服务容器,则在容器退出后回自动停止运行,此时通过docker ps命令查看不到容器信息,需要使用docker ps -a命令查看。

5.5 容器的启动与停止

1)停止容器

root@ubuntu:/# docker stop 7b8b
7b8b

2)启动容器

root@ubuntu:/# docker start 7b8b
7b8b

注:7b8b为容器id,容器id可以不输入完全,但需要能唯一确定一个容器。

5.6 复制文件

复制文件可以分为从容器到宿主机的复制,和从宿主机到容器的复制
1)从容器到宿主机的复制, 容器 -> 宿主机
命令格式:docker cp 容器名或ID:要拷贝的文件在容器里面的路径 要拷贝到宿主机的相应路径
示例:将test.js从容器里面拷到宿主机的/opt路径下面

docker cp testtomcat:/usr/local/tomcat/webapps/test/js/test.js  /opt

2)从宿主机到容器的复制, 宿主机 -> 容器
命令格式:docker cp 要拷贝的文件路径 容器名:要拷贝到容器里面对应的路径
示例:如果宿主机已经实现了换源,则可以通过如下命令将宿主机的配置文件拷到容器中,实现ubuntu容器换源

docker cp /etc/apt/sources.list  ubuntu:/etc/apt/

5.7 进入容器

命令格式:docker exec -it 容器ID/容器NAME /bin/bash
示例:

root@ubuntu:/# docker exec -it 7b8b /bin/bash
root@7b8b196818d5:/#

注意:只能进入运行中的容器。

5.9 查看容器信息

查看容器信息可以进入容器后,使用命令查看,例如:hostname,env等,(如果运行ifconfig,ip addr等命令,则需要先安装),可以在宿主机通过如下格式的命令查看:

root@ubuntu:/# docker exec 7b8b hostname
7b8b196818d5

root@ubuntu:/# docker exec 7b8b env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=7b8b196818d5
HOME=/root

推荐使用docker inspect命令查看容器信息,使用方式如下所示

root@ubuntu:/# docker inspect 7b8b
[
    {
        "Id": "7b8b196818d5d53af160847462c6ab68987d938bb68cd8ea982b229fee76268c",
        "Created": "2020-01-31T03:54:16.467988209Z",
        "Path": "/bin/bash",
 ... ...

7b8b为容器ID

该命令以json的方式返回容器的信息,内容比较多,可以只查询一种一部分,示例如下:

root@ubuntu:/# docker inspect -f {{.Config.Hostname}} 7b8b
7b8b196818d5

注:inspect使用的是go语言模板,详细资料请参考Go语言模板。

5.10 容器的删除

命令格式:docker rm 容器ID,(与删除镜像的命令很像,只少个i,镜像删除docker rmi 镜像名)

参数:

  • -f, --force=false 是否强行终止并删除一个运行中的容器
  • -1, --link=false :删除容器的连接 ,但保留容器
  • -v, --volumes=false :删除容器挂载的数据卷

6. 其他(了解)

6.1 如何卸载原先安装的 docker

1.打开Terminal,执行下面命令:
sudo apt-get purge docker-ce

2.删除Docker安装目录
sudo rm -rf /var/lib/docker

3.验证是否删除成功
docker info
bash: /usr/bin/docker: No such file or directory
我们可以看到已经无法找到 docker 安装目录,证明 卸载成功

6.2 关于删除容器

方法一:
#显示所有的容器,过滤出Exited状态的容器,取出这些容器的ID,
sudo docker ps -a|grep Exited|awk '{print $1}'
#查询所有的容器,过滤出Exited状态的容器,列出容器ID,删除这些容器
sudo docker rm docker ps -a|grep Exited|awk '{print $1}'

方法二:
#删除所有未运行的容器(已经运行的删除不了,未运行的就一起被删除了)
sudo docker rm $(sudo docker ps -a -q)

方法三:
#根据容器的状态,删除Exited状态的容器
sudo docker rm $(sudo docker ps -qf status=exited)

方法四:
#Docker 1.13版本以后,可以使用 docker containers prune 命令,删除孤立的容器。
sudo docker container prune (推荐)

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

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

相关文章

#Z1243. 完美数

一,题目描述 一个数是完美的,仅当它等于它的因数中比它小的所有数之和。 例如:28124714,所以 28 是完美的。 由此我们可以定义一个数的不完美值 F(N),代表 N和比 N 小的所有 N 的因数之和的差的绝对值。 例如&…

c# 服务

是什么 Microsoft Windows 服务(过去称为 NT 服务)允许用户创建可在其自身的 Windows 会话中长时间运行的可执行应用程序。 这些服务可在计算机启动时自动启动,可以暂停和重启,并且不显示任何用户界面。 这些功能使服务非常适合在…

metrics-server监控主机资源

使用metrics-server实现主机资源监控获取metrics-server资源清单文件修改metrics-server资源清单文件部署metrics-server资源清单文件验证及授权获取metrics-server资源清单文件 直接使用命令来获取资源清单文件 wget https://github.com/kubernetes-sigs/metrics-server/rele…

车用DCDC双路输出电源模块规格书

产品名称:非隔离稳压双路输出车用电源模块 产品型号:LM36J40W2EH 典型特征值:24V/8V(3A)&5V(2A) u 产品概述 LM36J40W2EH模块电源是一款非隔离型双路输出的开关稳压器。它采用集成IC设计,使用一进两出的接线方式&#xff…

【Html圣诞树】2022年的圣诞节了,祝大家节日快乐。

目录 1. 效果展示2. 源代码1. 效果展示 是最近在互联网上很火的一个效果。 是带有背景音乐的,而且背景音乐支持选择,也支持自定义。 2. 源代码 美丽的圣诞树.html <!DOCTYPE html> <html lang="en"

从零学习 InfiniBand-network架构(十) —— IB协议中全局ID

从零学习 InfiniBand-network架构&#xff08;十&#xff09; —— IB协议中全局ID &#x1f508;声明&#xff1a; &#x1f603;博主主页&#xff1a;王_嘻嘻的CSDN主页 &#x1f511;未经作者允许&#xff0c;禁止转载 &#x1f6a9;本专题部分内容源于《InfiniBand-network…

设备指示灯开关状态识别检测系统 yolov5

设备指示灯开关状态识别检测系统是基于yolo网络深度学习模型&#xff0c;对现场画面进行实时监测识别。自动识别仪表示数或开关状态。我们使用YOLO(你只看一次)算法进行对象检测。YOLO是一个聪明的卷积神经网络(CNN)&#xff0c;用于实时进行目标检测。该算法将单个神经网络应用…

Python中使用zip函数的七重境界

1. 引言 Python中有一些内置函数&#xff0c;可以使我们的代码非常优雅。zip 函数就是其中之一&#xff0c;但是zip 函数的使用对于初学者来说不是很直观&#xff0c;有时容易出错。因此本文将从7个层次来由浅入深地来探讨强大的zip 函数的概念、用法和技巧。 闲话少说&#x…

用HTML写一个2023跨年动画代码(烟花+自定义文字+背景音乐+雪花+倒计时)

*2022年圣诞节到来啦&#xff0c;很高兴这次我们又能一起度过~ 文章目录一、前言二、跨年烟花三、效果展示五、HTML源码一、前言 时光荏苒&#xff0c;白驹过隙。 2022这一年又在忙碌中度过了&#xff0c;过去的一年&#xff0c;我们同努力&#xff0c;我们共欢笑&#xff0c;…

ContentProvider基础知识

ContentProvider基础知识 1.ContentProvider入门 1.简介 不同程序之间的数据交换&#xff0c;不同app之间的数据共享学会如何操作数据学会如何监听数据变化学会URI,URImatcher&#xff0c;ContentUris的如何使用2.基本使用 A应用&#xff0c;使用ContentProvider的子类进行暴漏…

RabbitMQ 第二天 高级 8 RabbitMQ 应用问题

RabbitMQ 【黑马程序员RabbitMQ全套教程&#xff0c;rabbitmq消息中间件到实战】 文章目录RabbitMQ第二天 高级8 RabbitMQ 应用问题8.1 消息可靠性保障8.1.1 消息补偿8.2 消息幂等性保障8.2.1 乐观锁机制第二天 高级 8 RabbitMQ 应用问题 8.1 消息可靠性保障 在RabbitMQ的使…

pytorch【线性回归】【逻辑回归】【softmax回归】

文章目录零、前置函数线性相乘均方误差损失函数梯度下降函数数据的生成函数一、线性回归1.手动实现线性回归2.调库实现线性回归1.定义我们线性回归的模型2.定义我们的误差函数3.定义优化方法4.模型的训练5.开始训练6.查看模型的参数7.计算我们模型的当前的均方误差二、逻辑回归…

【5G RLC】AM模式的数据传输详解

博主未授权任何人或组织机构转载博主任何原创文章&#xff0c;感谢各位对原创的支持&#xff01; 博主链接 本人就职于国际知名终端厂商&#xff0c;负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作&#xff0c;目前牵头6G算力网络技术标准研究。 博客…

Linux内核死锁检测工具——Lockdep

文章目录前言配置内核简单的AB-BA死锁案例实际项目中的死锁前言 死锁是指两个或多个进程因争夺资源而造成的互相等待的现象&#xff0c;如进程A需要资源X&#xff0c;进程B需要资源Y&#xff0c;而双方都掌握对方所需要的资源&#xff0c;且都不释放&#xff0c;这会导致死锁。…

【圣诞快乐】如何用代码画一颗圣诞树?

文章目录一、前言二、创意角度三、java swing版 效果展示四、java swing版 实现步骤&代码五、springboot项目banner版 效果展示六、springboot项目banner版 实现步骤七、 linux shell界面打印版 效果展示八、 linux shell界面打印版 实现步骤一、前言 一年一度的圣诞节来了…

Allegro如何设置差分对内等长规则

Allegro如何设置差分对内等长规则 Allegro上可以对差分网络设置对内等长规则,方便把P/N网络进行等长处理,以下面这对USB为例 具体操作如下 打开Constraint Manage找到这对USB网络

vue3 antd table表格的样式修改(一)调整table表格每行(row)行高过高问题

vue3 antd项目实战——修改ant design vue table组件的默认样式&#xff08;调整每行行高&#xff09;知识调用场景复现实际操作解决a-table表格padding过宽知识调用 文章中可能会用到的知识链接vue3ant design vuets实战【ant-design-vue组件库引入】css样式穿透&#xff08;…

RV1126笔记十三:实现RTMP多路拉流

若该文为原创文章,转载请注明原文出处。 一、介绍 通过RV1126实现RTMP的多路拉流,并在屏幕上显示出来,这里涉及到ffmpeg几个重要知识点,和RV1126如何在屏幕分屏显示。 二、流程图 流程和单路拉流类似,这里只是涉及拉取后的图像需要解码缩放,在合成分屏显示出来。 具体…

【完整】分类模型中类别不均衡问题解决

目录 1. 数据类别不均衡问题 2. 解决办法 过采样&#xff1a; 欠采样&#xff1a; ensemble 方法&#xff1a; 修改损失函数&#xff1a; 梯度调和机制&#xff1a; Dice Loss&#xff1a; 标签平滑&#xff1a; 3. 类别不均衡问题loss设计 4. 梯度调和机制GHM Gradi…

Graphviz安装向导

目录 1、首先在官网下载graphviz 2、安装。 3、测试 1、首先在官网下载graphviz 下载网址&#xff1a;Download | Graphviz 根据自身电脑位数选择合适的下载地址 2、安装。 打开第一步已经下载好的软件。点击下一步&#xff0c;在安装路径选择时可将安装路径修改为 E:\G…