docker容器安装与使用

news2024/12/26 22:26:56

目录

1. 什么是docker

2. docker的核心组件

3. docker的安装

3.1 安装的先决条件

3.2.1 ubuntu安装docker

3.2.2 CentOS安装docker

3.3 配置镜像加速器

4. 镜像常用操作

4.1 搜索镜像

4.3 查看宿主机中的镜像

4.3 删除镜像

5. 容器常用命令

5.1 运行容器

5.2 使用容器

5.4 容器的退出

5.5 容器的启动与停止

5.6 复制文件

5.7 进入容器

5.8 查看容器信息

5.9 容器的删除

6. 其他(了解)

6.1 如何卸载原先安装的 docker

6.2 关于删除容器


1. 什么是docker

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

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

docker的优点:

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

  • 能够为开发,测试和部署提供一致的环境,避免了在开发或测试时一切正常,但在生成环境中却不能运行的问题。
  • 鼓励面向服务架构,Docker 推荐单个容器只运行一个应 用程序或进程,这样就形成了一个分布式的应用程序模型

docker用途

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

docker与虚拟机的区别:

  • VM(VMware)在宿主机器、宿主机器操作系统的基础上创建虚拟层、虚拟化的操作系统、虚拟化的仓库,然后再安装应用
  • Docker在宿主机的操作系统上创建Docker引擎,直接通过宿主机的操作系统调用硬件资源,而不是虚拟化操作系统和硬件资源,所以占用资源更少,性能更高。
  • 对比图

特性

docker

vm

启动速度

秒级

分钟级

硬盘使用

MB

GB

性能

接近原生

弱与原生

系统支持数量

单机可支持数百甚至数千

几十个

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] Index of 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

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

4.设置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

8.设置开机启动

systemctl enable docker

3.3 配置镜像加速器

默认的情况下docker会从docker hub中查找或下载镜像,在国内会比较慢。可以使用阿里的镜像加速器来提高速度。

具体操作步骤如下:

1)获取加速器地址

首先需要有一个淘宝或支付宝的账号,登录阿里云 https://www.aliyun.com/。

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

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

方法2 自己配置

在/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
# 除了名称外我们还能使用 id

# -itd 中的d是 运行后台运行 后边test是镜像名称 我们可以通过名称对这个镜像 进行一些操作也可使用id
docker run -itd --name test b6f 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身份进入容器,如下图: 下方为没有 d命运 会自动进入镜像

图中的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 查看运行的容器

保持刚才运行的容器不要退出,另外打开一个命令终端,输入下列命令: 这个需要先退出 镜像 ctrl+d

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 test:/home/abc.txt /opt

2)从宿主机到容器的复制, 宿主机 -> 容器

命令格式:docker cp 要拷贝的文件路径 容器名:要拷贝到容器里面对应的路径

示例:如果宿主机已经实现了换源,则可以通过如下命令将宿主机的配置文件拷到容器中,实现ubuntu容器换源

docker cp /opt/bbb.txt ubuntu:/home

5.7 进入容器

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

示例:

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

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

5.8 查看容器信息

查看容器信息可以进入容器后,使用命令查看,例如: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语言模板。

进行查询

docker inspect test | grep IP

5.9 容器的删除

命令格式: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/86996.html

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

相关文章

【算法】斐波那契数列通项公式

特征方程和通项公式 如果数列ana_nan​的递推公式:anc1an−1c2an−2a_nc_1a_{n-1}c_2a_{n-2}an​c1​an−1​c2​an−2​------(1) 根据待定系数法,假设an−xan−1y(an−1−xan−2)a_n-xa_{n-1}y(a_{n-1}-xa_{n-2})an​−xan−1​y(an−1​−xan−2​)…

Mybatis源码解析之执行SQL语句

作者:郑志杰 mybatis 操作数据库的过程 // 第一步:读取mybatis-config.xml配置文件 InputStream inputStream Resources.getResourceAsStream("mybatis-config.xml"); // 第二步:构建SqlSessionFactory(框架初始化) SqlSessionF…

FITC-PEG-Biotin,Biotin-PEG-Fluorescein,荧光素PEG生物素生物标记物用试剂

一:产品描述 1、名称 英文:FITC-PEG-Biotin,Biotin-PEG-Fluorescein 中文:荧光素-聚乙二醇-生物素 2、CAS编号:N/A 3、所属分类:Biotin PEG Fluorescent PEG 4、分子量:可定制&#xff0c…

MyBatis访问Db2和MySQL(Maven)

注:虽然前面写过一些文档,包含MyBatis连接Db2和MySQL的内容,但是貌似没有单独记录用Maven方式连接DB的文档,所以单写了这一篇文档,方便以后需要快速搭建MyBatis环境时参考。 注:有一篇文档“MyBatis访问Db…

基于java+springboot+mybatis+vue+mysql的摄影跟拍预定管理系统

项目介绍 摄影跟拍预定管理方面的任务繁琐,以至于每年都在摄影跟拍预定管理这方面投入较多的精力却效果甚微,摄影跟拍预定管理系统的目标就是为了能够缓解摄影跟拍预定管理工作方面面临的压力,让摄影跟拍预定管理方面的工作变得更加高效准确。 本项目在开发和设计过程中涉及到…

MyBaits入门完结篇

不仅可以判断参数,还可以判断_parameter和_databasedId bind标签 sql标签配合include标签完成对重复sql语句的抽取 要在带注解的映射器接口类中使用动态 SQL,可以使用 script 元素 缓存 一级缓存 一级缓存失效情况 手动清空缓冲的函数&#xff1a…

【众筹】百问网DShanMCU-Mio开源掌机(爻-澪)项目,完美支持运行10多个模拟器!

众筹说明 定金翻倍,即定金19.9元,在付尾款时可抵40元(成品售价不会超过120元)!达标当天就开搞,满100人加速搞尽量在年前发货,让大家先玩起来!如果不达标则原路退款,项目取消。 众筹时间&#…

ADI Blackfin DSP处理器-BF533的开发详解44:图像处理专题-StenciFilter (图像的平滑处理)(含源码)

硬件准备 ADSP-EDU-BF533:BF533开发板 AD-HP530ICE:ADI DSP仿真器 软件准备 Visual DSP软件 硬件链接 功能介绍 代码实现了图像的平滑处理(高斯模板),代码运行时,会通过文件系统打开工程文件根目下&qu…

NetCore基于Roslyn的动态编译实现

目录 一. AvalonEdit文本器 1.功能实现 2. 高亮 3. 代码提示 二. 运行效果展示 三. 源码链接 四. 参考资料 一. AvalonEdit文本器 1.功能实现 直接用Github上的源码进行实现,icsharpcode/AvalonEdit:The WPF-based text editor component used i…

在R语言中使用概率分布:dnorm,pnorm,qnorm和rnorm

在这里,我将讨论哪些函数可用于处理正态分布:dnorm,pnorm,qnorm和rnorm。 R中的分布函数 有四个关联的函数, 四个正态分布函数是: d范数:正态分布的密度函数p范数:正态分布的累积密…

【Spring】SpringBoot 配置 log4j2 日志

1. 概述 Apache Log4j2 是对原先的 Log4j 项目的升级版本,参考了 logback 的一些优秀的设计,并且修复了一些问题,因此带来了一些重大的提升。 2. 案例与解析 2.1 引入依赖 SpringBoot 的 starter 自带的是 logback 日志,若要使…

数据结构Data Structure和算法Algorithm导航目录(持续更新)

文章目录1. 大纲2. 算法基础3. 数据结构3.1 线性结构3.1.1 字符串3.1.2 线性表3.1.3 Hash表3.1.4 栈3.1.5 队列3.1.6 位图3.2 逻辑结构3.2.1 树3.2.1.1 二叉树3.2.1.2 动态查找树3.2.1.3 多路查找树3.2.2 图3.2.4 堆4. 算法4.1 排序4.2 查找5. 领域算法6. 优秀算法赏析1. 大纲 …

STM32F4 | 按键输入实验

文章目录一、STM32F4 IO 口简介二、硬件设计三、软件设计四、实验现象五、STM32CubeMX 配置 IO 口输出这一章,我们将通过 ALIENTEK阿波罗 STM32 开发板上载有的 4 个按钮( KEY_UP、 KEY0、 KEY1 和 KEY2),来控制板上的 2 个 L…

成功的项目管理需要做好哪些方面?

每一个项目都代表了为公司建立同行竞争优势和提高利润的方式,成功交付的项目会将公司与那些竞争激烈的公司区分开来。而项目的成功取决于不同的因素。这也是项目经理所需要关注的问题,在每一个项目成功标准方面保持一致可以消除项目失败的风险&#xff0…

【数据库课程设计】SQLServer数据库课程设计(学生宿舍管理),课设报告+源码+数据库关系图

数据库课程设计——学生宿舍管理,需要全部源码可以关注私信我,把邮箱发在评论区前言一、课题背景和开发环境1、课题背景2、开发环境二、系统功能及示意图1、系统实现功能2、功能示意图2.1学生模块2.2管理人员模块三、概念结构设计1、管理员分配宿舍E_R图…

传染病模型3

一、研究方向 建立传染病的数学模型描述传染病的传播过程 分析感染人数的变化规律,预测传染病高峰的到来 探索控制、根除、预防传染病传播蔓延的手段 二、舱室 流行病学中的一大类模型,称为“舱室”模型,它是将人群分成若干个“舱室…

为什么机器码、汇编不可移植,而C语言可以移植?

1、机器码不可移植的原因 机器码(二进制)是处理器能直接识别的语言,不同的机器码代表不同的运算指令,处理器可以识别哪些机器码是由处理器的硬件设备决定的,不同的处理器机器码可能不同。 比如在ARM处理器上加法可能…

Linux 线程池

文章目录线程池的定义使用线程池的原因基于POSIX实现的线程池基于block队列的线程池实现基于ring队列的线程池实现设计单例模式线程池线程池的定义 线程池就一堆已经创建好的任务线程,初始它们都处于空闲等待状态,当有新的任务需要处理的时候&#xff0…

大话设计模型 Task01:设计原则

目录1. 单一职责原则(SRP)使用动机如何使用2. 开闭原则(OCP)使用动机如何使用使用原则3. 依赖倒置原则(DIP)使用动机使用原则4. 里氏替换原则(LSP)使用动机5. 迪米特法则&#xff08…

12、MInio文件系统的使用小记一

前言:文档存储从最初的文本文档发展到现在的图片视频存储,存储容器也从数据库演变成了文件系统,目前市面上提供云存储的公司很多,百度腾讯阿里华为等,这些公司都有成熟的文件存储方案及restapi接口,很方便&…