首页 > 其他分享 >Docker 学习

Docker 学习

时间:2024-07-10 11:08:29浏览次数:12  
标签:容器 compose ce 学习 镜像 Docker docker

1 Docker

Docker 是一个开源的应用容器引擎。Docker 可以将应用程序及其依赖项打包到一个可移植的容器中,这个容器包含了应用程序的代码、运行环境、依赖库、配置文件等必须的资源。通过 Docker 可以实现快速部署并且隔离环境。无论部署的环境如何,Docker 能保证容器中的应用程序都会运行在同一种环境下。

1.1 Docker 核心概念

Docker 的核心概念包括镜像(Image)、容器(Container)和仓库(Repository):

  • 镜像:可以看作是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像类似于虚拟机中的快照,用于启动容器或创建新的容器。
  • 容器:是镜像的运行实例,每个容器都是独立运行的,并且相互之间不会有任何接口。容器内的应用程序直接运行在宿主内核中,没有自己的内核,也没有进行硬件虚拟,因此比传统虚拟机更轻量级、占用资源更小、启动速度更快。
  • 仓库:提供一个注册服务器,用于存储多个仓库,而仓库是用来存储镜像的。用户可以将自己创建的镜像上传到仓库中,并在需要时从仓库下载。

1.2 Docker 优点

  1. 简化开发和部署流程:
    • Docker 使得应用程序的开发和部署更加简单和高效。开发人员可以将所有应用程序、库和依赖项打包到一个完整的容器中,确保它可以在任何环境中稳定运行。
    • Docker 容器提供了一致的运行环境,避免了“在我的机器上可正常工作,其他机器不能正常工作”的问题。
  2. 提高资源利用率:
    • Docker 容器轻量级且占用资源少,可以在一台物理机上运行多个容器实例,从而大大提高资源利用率。
    • Docker 容器可以迅速启动和停止,降低了系统开销。
  3. 增强安全性和隔离性:
    • Docker 容器提供了应用级别的隔离,每个容器都是独立运行的,相互之间不会有任何接口,这有助于提升应用的安全性。
    • Docker 容器默认提供超强的隔离性,即使某个应用出现问题,也只是单个容器的问题,不会影响到整台机器。
  4. 支持持续集成和持续部署(CI/CD):
    • Docker 容器易于版本管理、复制、分享和修改,使得持续集成和持续部署变得更加容易和高效。
    • 开发人员可以轻松地构建、测试和部署应用程序,而无需担心环境不一致的问题。
  5. 提高可移植性和兼容性:
    • Docker 容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等。这种兼容性可以让用户轻松地将一个应用程序从一个平台迁移到另一个平台。



2 Docker 安装

2.1 卸载之前安装过的 Docker

sudo yum remove docker \
                docker-client \
                docker-client-latest \
                docker-common \
                docker-latest \
                docker-latest-logrotate \
                docker-logrotate \
								docker-selinux \
								docker-engine-selinux \
								docker-engine \
								docker-ce \
								docker-ce-cli \
								containerd.io \
								docker-compose-plugin
# 删除镜像、容器、配置文件等内容
rm -rf /var/lib/docker

2.2 Docker 安装

  1. yum 包更新
yum update
  1. 安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
yum install -y yum-utils device-mapper-persistent-data lvm2
  1. 设置yum仓库并更新yum缓存
# 官方源(慢,不推荐)
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 阿里云
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 清华大学源
yum-config-manager --add-repo https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo

# 更新yum缓存
yum makecache fast

# 验证仓库是否添加成功(三选一)
# 查看仓库文件  输出 docker-ce.repo 表示安装成功
ls /etc/yum.repos.d/ | grep docker-ce
# 查看已配置仓库及其状态  输出 docker-ce 仓库相关信息 表示安装成功
yum repolist | grep docker-ce
# 查看所有仓库 输出 docker-ce.repo表 示安装成功
ls /etc/yum.repos.d/

  1. 安装docker,Y到底
# docker-ce 							Docker社区版
# docker-ce-cli 					Docker命令行界面(CLI)
# containerd.io 					Docker插件,直接调用 Docker Compose
# docker-compose-plugin 	Docker插件,直接调用 Docker Compose
yum install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
  1. 查看docker版本
# 输出版本则验证成功
docker version
# 输出docker相关的安装包
rpm -qa |grep docker
# docker-buildx-plugin-0.14.1-1.el7.x86_64
# docker-compose-plugin-2.27.1-1.el7.x86_64
# docker-ce-cli-26.1.4-1.el7.x86_64
# docker-ce-26.1.4-1.el7.x86_64
# docker-ce-rootless-extras-26.1.4-1.el7.x86_64

2.3 切换 Docker 镜像源

  1. 创建 Docker 镜像源配置文件目录
# 创建配置文件夹
mkdir /etc/docker

# 编辑配置文件
vim /etc/docker/daemon.json

# 以下json格式直接黏贴进daemon.json文件。
# 数组中为镜像源列表(以下镜像源在文档书写时可用,如果后期不可用需要另外找新的)。
{
  "registry-mirrors": [
    "https://docker.m.daocloud.io",
    "https://docker.1panel.live",
    "https://82m9ar63.mirror.aliyuncs.com"
  ]
}

# 重新加载配置项文件
systemctl daemon-reload
  1. 验证镜像源是否有效
# 启动docker
systemctl start docker
# 拉取测试镜像
docker pull hello-world
# 查看镜像是有刚下载的hello-world,验证通过则镜像源有效
docker images
# REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
# hello-world   latest    d2c94e258dcb   14 months ago   13.3kB



3 Docker 使用

3.1 容器操作

创建容器

# 创建容器
# OPTIONS:这是可选的,您可以在这里指定容器的名称(--name)、分配的资源限制(如内存和CPU)、网络设置等。
# IMAGE:指定要基于哪个镜像来创建容器。
# COMMAND 和 ARG...:这些是可选的,用于指定容器启动时要执行的命令和传递给该命令的参数。如果不指定,则默认执行镜像中定义的默认命令。
docker create [OPTIONS] IMAGE [COMMAND] [ARG...]

启动和停止容器

# 启动一个或多个已经被停止的容器。
docker start <容器名或ID>
# 停止一个运行中的容器。
docker stop <容器名或ID>
# 重启容器。
docker restart <容器名或ID>

查看容器状态

# 查看当前正在运行的容器。
docker ps
# 查看所有容器(包括停止的)。
docker ps -a
# 查看容器的详细信息。
docker inspect <容器名或ID>

进入容器

# 进入正在运行的容器并以命令行进行交互。推荐使用docker exec命令,因为使用docker attach命令时,如果从容器中退出(使用exit命令),会导致容器停止。
docker exec -it <容器名或ID> /bin/bash

删除容器

# 删除已经停止的容器。
docker rm <容器ID>
# 强制删除正在运行的容器。
docker rm -f <容器ID>

查看容器日志

# 查看容器的实时日志。
docker logs -f <容器名或ID>

查看容器IP

# 查看容器的IP地址。
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' <容器名或ID>

3.2 镜像操作

拉取和推送镜像

# 从远程仓库下载镜像到本地。
docker pull <镜像名>:<标签>
# 将本地的镜像推送到远程仓库。
docker push <镜像名>:<标签>

构建镜像

# 基于Dockerfile构建镜像。
docker build -t <镜像名>:<标签> <Dockerfile路径>:

查看本地镜像

# 列出本地所有镜像。
docker images
# 查看镜像的详细信息。
docker inspect <镜像名>

删除镜像

# 删除单个镜像。
docker rmi -f <镜像ID>
# 删除所有镜像(请谨慎使用)。
docker rmi -f $(docker images -qa)

3.3 网络操作

查看网络

# 列出所有网络。
docker network ls

创建和删除网络

# 创建自定义网络。
docker network create <网络名>
# 删除网络。
docker network rm <网络名>

3.4 数据卷操作

创建和删除数据卷

# 创建数据卷。
docker volume create <卷名>
# 删除数据卷。
docker volume rm <卷名>

3.5 日志和事件操作

查看Docker事件

# 查看Docker引擎事件。
docker events

3.6 其他常用命令

启动Docker服务

systemctl start docker(适用于基于systemd的系统)。

停止Docker服务

systemctl stop docker(适用于基于systemd的系统)。

重启Docker服务

systemctl restart docker(适用于基于systemd的系统)。

查看Docker状态

systemctl status docker(适用于基于systemd的系统)。

设置Docker开机启动

systemctl enable docker(适用于基于systemd的系统)。

查看Docker概要信息

docker info。

查看Docker总体帮助文档

docker --help。

查看Docker命令帮助文档

docker 具体命令 --help。

4 docker-compose 安装

运行一个由多个容器组成的服务时。它允许你使用一个单独的文件(通常称为 docker-compose.yml)来配置应用程序的服务,然后使用该文件快速启动整个应用的所有服务。

直接安装,可以尝试,但是基本会失败

# github 下载,太慢了基本成功不了
sudo curl -L "https://github.com/docker/compose/releases/download/v2.2.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 三方镜像网站,我测试的时候已挂
sudo curl -L https://get.daocloud.io/docker/compose/releases/download/v2.4.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

去docker-compose官网https://github.com/docker/compose/releases下载最新版或指定版本,找到文件名 docker-compose-linux-x86_64,下载到本地后重命名为 docker-compose,上传至服务器路径下 /usr/local/bin/,最终文件路径/usr/local/bin/docker-compose

# 将docker-compose设置为可执行文件
sudo chmod +x /usr/local/bin/docker-compose
# 查看docker-compose版本 输出版本号验证下载成功
# Docker Compose version v2.28.1
docker-compose -v

标签:容器,compose,ce,学习,镜像,Docker,docker
From: https://www.cnblogs.com/wanglei1900/p/18293526

相关文章

  • 【C语言】学习笔记:找出一个二维数组中的最大值,并打印出该最大值及其在数组中的位置
    找出一个二维数组中的最大值,并打印出该最大值及其在数组中的位置。首先,定义了必要的变量,包括用于遍历数组的索引变量i和j,以及用于存储最大值及其位置的变量hang、lie和max。定义了一个名为arry的二维数组,并初始化了其元素。使用两个嵌套的for循环来遍历数组,并......
  • 在Ubuntu中安装docker最新的docker(被墙)(转)
    在目前的情况下download.docker.com访问不是特别稳定的情况下,可以使用阿里的地址来进行更新一、安装1、检查环境1.1卸载旧版dockersudosuaptremovedockerdocker-enginedocker.iocontainerdrunc2、安装依赖apt-yinstallca-certificatescurlgnupglsb......
  • Docker - docker run 后面的 bin/bash的作用
    简单例子dockerrun-itcentos/bin/bash首先,dockerrun-itcentos的意思是,为centos这个镜像创建一个容器-it就等于-i和-t,这两个参数的作用是,为该docker创建一个伪终端,这样就可以进入到容器的交互模式?(也就是直接进入到容器里面)后面的/bin/bash的作用是表示载入容器后运......
  • 【机器学习】使用决策树分类器预测汽车安全性的研究与分析
    文章目录一、决策树算法简介决策树的结构分类和回归树(CART)决策树算法术语决策树算法直觉二、属性选择度量信息增益熵基尼指数计算分割基尼指数的步骤三、决策树算法中的过度拟合避免过度拟合的方法四、导入库和数据可视化探索性数据分析重命名列名查看数据集的总......
  • C语言学习笔记(03)——常用运算符
    基本运算符*/inta=b*10; CPU可能多个周期,甚至要利用软件的模拟方法去实现乘法inta=b+10; CPU一个周期可以处理/取整%取余一般使用/和%配合得到小数,一般/的结果得到的是整数,除非: floata,b,c,d; a=7/2; b=7.0/2; c=7/2.0; d=7.0/2.0; printf......
  • opus学习规划
    第一阶段:基础知识学习1.数字信号处理(DSP)书籍推荐:《数字信号处理导论》byJohnG.Proakis和DimitrisG.Manolakis《数字音频信号处理》byUdoZölzer在线课程:Coursera的DSP课程MITOpenCourseWare的DSP课程重点学习内容:采样与量化离散傅里叶变换(DFT)......
  • Excel 学习
    Excel学习Excel统计函数Excel统计函数:共111个函数?COUNT函数Count函数:是Excel中最基本的统计函数,用于计算给定数据范围中的:数字个数函数用法:=COUNT(数值1,数值2,...)=COUNT(C1,C2)Countif函数Countif函数:是Excel中,更为灵活和强大的统计函数,它可以根据**指定条件**,统......
  • 达到学习前端的一种心流状态
    我是一名本科应届生,如今在武汉的一家技术公司做前端开发,想必很多人也跟我一样学历不是很高,但是对前端开发有着一腔热血,也可以说是热爱,我没有太多资格来议论关于开发技术上的种种困难点,我分享是对前端学习的一种心境。我学习前端已经有三年的时间了,前端主流框架Vue,React,No......
  • 学习方法
    我不幸翻出了去年(2023年)6月初的一篇随笔。当时班主任要上一个班会公开课,然后邀请了两位同学在班会课前面分享了学习经历。那天下午在录播室,后排坐满了一半的老师,然后我拿着麦克风和演讲稿(现在鉴赏一下,只能叫随笔),然后就平淡地读完了,期间麦克风被我喷爆了。而另一位同学,只说了几句......
  • 嵌入式开发学习day07
    1、提示并输入一个字符串,统计该字符串中字母、数字、空格以及其他字符的个数#include<stdio.h>#include<string.h>intmain(intargc,constchar*argv[]){chararr[20]={0};intlen;intzm=0,sz=0,kg=0,other=0;printf("请输入字符串\n");gets......