侧边栏壁纸
博主头像
SaltFish 博主等级

行动起来,活在当下

  • 累计撰写 3 篇文章
  • 累计创建 1 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

docker简明教程(一)

Administrator
2024-12-11 / 0 评论 / 0 点赞 / 75 阅读 / 0 字

什么是docker

Docker 是一个开源的应用容器引擎,它允许开发者打包他们的应用以及应用的依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器就像一个轻量级的虚拟机,但是它们共享了宿主机的操作系统内核,这使得它们比传统虚拟机更为轻量和快速。

Docker 提供了以下主要功能:

  1. 容器化:将应用程序及其依赖项打包在一起,确保在任何环境中都能以相同的方式运行。

  2. 版本控制:通过 Docker 镜像和容器,可以轻松地进行版本控制和回滚。

  3. 微服务架构:支持微服务架构,使得应用可以分解为更小的、可独立部署的部分。

  4. 隔离性:容器之间相互隔离,一个容器的问题不会影响其他容器。

  5. 可移植性:容器可以在不同的环境中无缝迁移和运行,包括开发、测试和生产环境。

  6. 快速部署:容器的启动和停止速度远快于传统虚拟机。

为什么叫 Docker?

Docker 这个名字的由来有几个有趣的解释:

  1. “Docker” 一词的定义:在英语中,“docker” 指的是搬运货物的工人,特别是在码头上搬运集装箱的工人。这个名称象征着 Docker 的核心功能:搬运(打包)软件应用及其依赖项,并在不同的环境中移动(部署)它们。

  2. 创始人的灵感:Docker 的创始人 Solomon Hykes 曾表示,他希望找到一个简短、响亮且易于拼写的名字,Docker 这个名字符合这些要求,并且与 Docker 的核心功能——“搬运”软件——相呼应。

  3. 易于记忆和传播:Docker 这个名字简短、易于记忆,且在多种语言中都容易发音,这有助于其在全球范围内的传播和接受。

综上所述,Docker 这个名字既反映了其作为应用容器引擎的功能,也便于人们记忆和传播,这可能是其广受欢迎的原因之一。

docker是用来解决什么问题

解决依赖冲突!!!

1. 环境一致性问题

  • 问题:在开发环境中运行良好的应用程序可能在生产环境中遇到问题,因为环境配置(如操作系统、库版本等)不同。

  • Docker 解决:通过容器化,Docker 确保应用程序及其所有依赖项在任何环境中都能以相同的方式运行,从而实现“一次构建,到处运行”。

2. 依赖管理问题

  • 问题:应用程序可能依赖特定的库和环境变量,这些依赖在不同的机器或环境中可能不同。

  • Docker 解决:Docker 容器包含应用程序及其所有依赖项,避免了“在我的机器上可以运行”的问题。

3. 资源隔离问题

  • 问题:在共享主机上运行多个应用程序可能导致资源竞争和安全问题。

  • Docker 解决:容器提供了轻量级的隔离,确保应用程序不会相互干扰,提高了安全性和稳定性。

4. 资源利用效率问题

  • 问题:传统的虚拟机需要完整的操作系统,这可能导致资源浪费,尤其是在需要运行大量相似服务的场景中。

  • Docker 解决:Docker 容器共享宿主机的操作系统内核,启动更快,资源占用更少,提高了资源利用率。

Docker 和传统虚拟化方式的不同之处:

传统虚拟机技术:虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;

docker:容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟,容器依赖docker引擎与内核沟通。因此容器要比传统虚拟机更为轻便。

基本概念

镜像

Docker 镜像 是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像 不包含 任何动态数据,其内容在构建之后也不会被改变。

容器

镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的 实例 一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。

容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的 命名空间。因此容器可以拥有自己的 root 文件系统、自己的网络配置、自己的进程空间,甚至自己的用户 ID 空间。容器内的进程是运行在一个隔离的环境里,使用起来,就好像是在一个独立于宿主的系统下操作一样。这种特性使得容器封装的应用比直接在宿主运行更加安全。

仓库

集中的存储、分发镜像的服务,Docker Registry 就是这样的服务

一个 Docker Registry 中可以包含多个 仓库Repository);每个仓库可以包含多个 标签Tag);每个标签对应一个镜像。

常用 Registry :

由于某些原因,在国内访问这些服务可能会比较慢。国内的一些云服务商提供了针对 Docker Hub 的镜像服务(Registry Mirror),这些镜像服务被称为 加速器。常见的有 阿里云加速器DaoCloud 加速器 等。使用加速器会直接从国内的地址下载 Docker Hub 的镜像,比直接从 Docker Hub 下载速度会提高很多。在 安装 Docker 一节中有详细的配置方法。

国内也有一些云服务商提供类似于 Docker Hub 的公开服务。比如 网易云镜像服务DaoCloud 镜像市场阿里云镜像库 等。

私有Registry

除了使用公开服务外,用户还可以在本地搭建私有 Docker Registry。Docker 官方提供了 Docker Registry 镜像,企业可以直接参考教程部署私有 Registry 仓库。

如何安装docker(以CentOS 7.9系统为例)

先卸载

# 查看安装过的docker, 如果有通过 yum remove + 名字卸载
yum list installed | grep docker
yum remove -y + 查询结果
 
# 删除与docker相关的所有目录
find / -name docker    
rm -rf + 目录
 
# 删除docker服务
chkconfig --list | grep -i docker
chkconfig --del docker

三种安装方式

1.在线安装(需联网)

安装最新版本docker

# 确保yum包更新到最新
yum clean all
yum makecache
yum update -y
 
# 安装系统工具:
yum install -y yum-utils device-mapper-persistent-data lvm2
 
# 加载docker.repo到默认的/etc/yum.repos.d/下:
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
 
# 安装最高版本的docker-ce + docker-ce-cli + containerd.io
yum -y install docker-ce docker-ce-cli containerd.io
 
# 启动Docker
systemctl start docker
 
# 配置docker开机自启动
systemctl enable docker.service
 
# 查看是否设置成功 (状态为enable则为成功)
systemctl list-unit-files | grep docker

安装特定版本的 docker-ce + docker-ce-cli

# 列出有哪些版本的docker-ce
yum list docker-ce --showduplicates | sort -r
​
# 列出有哪些版本的docker-ce-cli
yum list docker-ce-cli --showduplicates | sort -r     
​
# 安装docker-ce + docker-ce-cli + containerd.io
yum -y install docker-ce-<tag> docker-ce-cli-<tag> containerd.io    
​
# 以18.06.3.ce-3.el7版本为例提供参考
yum -y install docker-ce-18.06.3.ce-3.el7 docker-ce-cli-18.06.3.ce-3.el7 containerd.io    

2.脚本安装(需联网)

# 阿里云脚本
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
​
# DaoCloud 的安装脚本(推荐)
curl -sSL https://get.daocloud.io/docker | sh
​
# 一键安装脚本
bash <(curl -sSL https://raw.githubusercontent.com/SuperManito/LinuxMirrors/main/DockerInstallation.sh)
​
# 安装完成之后启动docker
systemctl start docker
​
# 配置docker开机自启动
systemctl enable docker.service

注:部分机器安装遇到 “Could not resolve host: mirrorlist.centos.org; 未知的错误”,通常是网络问题,首先检查网卡dns设置、/etc/resolve.conf文件;其次考虑替换yum 源为国内网站。

# 首先备份系统自带repo文件
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
​
# 下载阿里云yum仓库文件
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
​
# 重建yum缓存
yum makecache

以上方式应该能解决脚本安装docker失败的问题。

3.离线安装

前往清华源网站下载docker-ce,点开 x86_64 目录找到对应的版本下载

https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/static/stable

这里下载最新安装包 docker-27.3.1.tgz ,下载完成后,可以放到服务器上,进行安装操作

# 解压安装包
tar -zxvf docker-27.3.1.tgz
​
# 执行如下命令把docker相关文件拷贝到/usr/bin目录
sudo cp -p docker/* /usr/bin

创建 /etc/systemd/system/docker.service文件,

vim /etc/systemd/system/docker.service

复制以下内容

#######################docker.service##################################
​
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
​
[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
# Uncomment TasksMax if your systemd version supports it.
# Only systemd 226 and above support this version.
#TasksMax=infinity
TimeoutStartSec=0
# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes
# kill only the docker process, not all processes in the cgroup
KillMode=process
# restart the docker process if it exits prematurely
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
​
[Install]
WantedBy=multi-user.target
​
########################docker.service#################################

赋予配置文件可执行权限

chmod +x /etc/systemd/system/docker.service

# 重新加载某个服务的配置文件,命令如下:
sudo systemctl daemon-reload
​
# 启动docker,命令如下:
sudo systemctl start docker
​
# 查看是否安装成功
docker --version

建立 docker 用户组

默认情况下,docker 命令会使用 Unix socket 与 Docker 引擎通讯。而只有 root 用户和 docker 组的用户才可以访问 Docker 引擎的 Unix socket。出于安全考虑,一般 Linux 系统上不会直接使用 root 用户。因此,更好地做法是将需要使用 docker 的用户加入 docker 用户组。

建立 docker 组:

$ sudo groupadd docker

将当前用户加入 docker 组:

$ sudo usermod -aG docker $USER

退出当前终端并重新登录,进行如下测试。

网络加速

为了提高 Docker 镜像下载的速度和稳定性,我们可以将 Docker 配置为使用国内的镜像源。国内的镜像源一般提供更高的下载速度和更低的延迟。

常用的国内镜像源有阿里云、网易、DaoCloud、清华大学等,这些镜像源都提供了加速下载 Docker 镜像的服务。

更改 Docker 配置文件:

打开 Docker 配置文件 daemon.json,该文件位于 /etc/docker/daemon.json(Linux 系统)。如果文件不存在,可以创建该文件。

vi /etc/docker/daemon.json

在文件中添加以下内容,指定镜像源地址:

# 以下三个镜像站背靠较大的开源项目,优先推荐
{
    "registry-mirrors": [
        "https://docker.m.daocloud.io",
        "https://docker.1panel.live",
        "https://hub.rat.dev"
    ]
}

重启docker服务

systemctl daemon-reload
systemctl restart docker

查看镜像加速是否生效

docker info

基本命令

搜索仓库镜像:docker search 镜像名
拉取镜像:docker pull 镜像名
查看正在运行的容器:docker ps
查看所有容器:docker ps -a
删除容器:docker rm container_id
查看镜像:docker images
删除镜像:docker rmi image_id
启动(停止的)容器:docker start 容器ID
停止容器:docker stop 容器ID
重启容器:docker restart 容器ID
启动(新)容器:docker run -it ubuntu /bin/bash
进入容器:docker attach 容器ID或docker exec -it 容器ID /bin/bash,推荐使用后者。
更多命令docker help

0

评论区