当前位置: 首页 > news >正文

二、部署docker

二、安装与部署

2.1 安装环境概述

Docker划分为CE和EE,CE为社区版(免费,支持周期三个月),EE为企业版(强调安全,付费使用)。

Docker CE每月发布一个Edge版本(17.03,17.04,17.05……),每三个月发布一个Stable版本(17.03,17.06,17.09……);docker EE和stable版本号保持一致,每个版本提供一年维护。

(1)依赖的基础环境

  • 64 位CPU
  • Linux kernel(内核) 3.10+
  • Linux kernel cgroups and namespaces

(2)查询自己服务器的环境

① 使用的操作系统版本

# cat /etc/redhat-release
Red Hat Enterprise Linux release 9.3 (Plow)

② 内核版本

# uname -r
5.14.0-362.8.1.el9_3.x86_64

③ ip地址

# hostname -I

④卸载旧版本,旧版本的Docker称为docker或者docker-engine:

# yum remove docker docker-common docker-selinux docker-engine

2.2 安装docker

docker的安装官方文档:https://docs.docker.com/engine/install/centos/

2.2.1 使用yum安装

(1)添加docker-ce 源信息

安装依赖包(yum-utils 提供了 yum-config-manager):
# yum install yum-utils -y
# yum-config-manager  --add-repo https://mirrors.aliyun.com/docker-ce/linux/rhel/docker-ce.repo

(2)修改docker-ce源

# sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo##或者手动写仓库
# cat docker-ce.repo
[docker-ce]
name=cocker-ce
baseurl=https://mirrors.aliyun.com/docker-ce/linux/rhel/9/x86_64/stable/
gpgcheck=0

(3)更新源

# yum makecache

(4)安装docker-ce

①默认安装docker-ce是最新版本

#  yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
# rpm -q docker-ce
docker-ce-27.1.2-1.el9.x86_64
# systemctl start docker
# systemctl status docker

②安装指定版本

# yum list docker-ce --showduplicates |  sort -r
[root@rhel9 ~]# yum install docker-ce-26.1.4-1.el9 -y
[root@rhel9 ~]# systemctl start docker
[root@rhel9 ~]# systemctl status docker

2.2.2 二进制安装

官方指导文档:https://docs.docker.com/engine/install/binaries/#install-daemon-and-client-binaries-on-linux

(1)下载二进制文件

二进制文件的下载路径:https://download.docker.com/linux/static/stable/

#此次安装的是docker-25.0.5
[root@rocky9 ~]# mkdir -p /data
[root@rocky9 ~]# wget -P /data/ https://download.docker.com/linux/static/stable/x86_64/docker-25.0.5.tgz
[root@rocky9 ~]# cd /data/
[root@rocky9 data]# tar xf docker-25.0.5.tgz
[root@rocky9 data]# cp docker/*  /usr/bin/
[root@rocky9 data]# dockerd  &

2.3 查看当前docker信息

在docker安装之后,默认会生成一个名称为docker0的网卡并且默认IP地址为172.17.0.1

[root@rhel9 ~]# ip a show docker0
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group defaultlink/ether 02:42:2e:42:6f:44 brd ff:ff:ff:ff:ff:ffinet 172.17.0.1/16 brd 172.17.255.255 scope global docker0valid_lft forever preferred_lft forever

查看docker当前的版本

#验证docker的版本
[root@rhel9 ~]# docker version
Client: Docker Engine - CommunityVersion:           27.1.2API version:       1.46Go version:        go1.21.13Git commit:        d01f264Built:             Mon Aug 12 11:52:49 2024OS/Arch:           linux/amd64Context:           defaultServer: Docker Engine - CommunityEngine:Version:          27.1.2API version:      1.46 (minimum version 1.24)Go version:       go1.21.13Git commit:       f9522e5Built:            Mon Aug 12 11:51:10 2024OS/Arch:          linux/amd64Experimental:     falsecontainerd:Version:          1.7.20GitCommit:        8fc6bcff51318944179630522a095cc9dbf9f353runc:Version:          1.1.13GitCommit:        v1.1.13-0-g58aa920docker-init:Version:          0.19.0GitCommit:        de40ad0

查看当前的容器、镜像、仓库等信息

[root@rhel9 ~]# docker info
Client: Docker Engine - CommunityVersion:    27.1.2Context:    defaultDebug Mode: falsePlugins:buildx: Docker Buildx (Docker Inc.)Version:  v0.16.2Path:     /usr/libexec/docker/cli-plugins/docker-buildxcompose: Docker Compose (Docker Inc.)Version:  v2.29.1Path:     /usr/libexec/docker/cli-plugins/docker-composeServer:Containers: 0   #当前主机运行的容器总数Running: 0     #有几个容器是正在运行的Paused: 0     #有几个容器是暂停的Stopped: 0    #有几个容器是停止的Images: 0     #当前主机上的镜像数Server Version: 27.1.2  #服务端版本Storage Driver: overlay2  #正在使用的存储引擎Backing Filesystem: xfs  #后端文件系统,即服务器的磁盘文件系统Supports d_type: true   #是否支持d_typeUsing metacopy: false   Native Overlay Diff: true  #是否支持差异数据存储userxattr: falseLogging Driver: json-file  #日志类型Cgroup Driver: systemd  #cgroups类型Cgroup Version: 2Plugins:  #插件Volume: localNetwork: bridge host ipvlan macvlan null overlay  Log: awslogs fluentd gcplogs gelf journald json-file local splunk syslogSwarm: inactive  Runtimes: io.containerd.runc.v2 runc  #已安装的容器运行时Default Runtime: runc #默认使用的容器运行时Init Binary: docker-init  #初始化容器的守护进程,即pid为1的进程containerd version: 8fc6bcff51318944179630522a095cc9dbf9f353runc version: v1.1.13-0-g58aa920init version: de40ad0Security Options:seccompProfile: builtincgroupnsKernel Version: 5.14.0-362.8.1.el9_3.x86_64Operating System: Red Hat Enterprise Linux 9.3 (Plow)OSType: linuxArchitecture: x86_64CPUs: 2  #宿主机cpu数量Total Memory: 1.692GiB  #宿主机总内存Name: rhel9ID: 681118d1-e2e3-41a7-b24d-0ae36f8cc338Docker Root Dir: /var/lib/docker  #宿主机数据保存目录Debug Mode: falseExperimental: false   #是否测试版Insecure Registries:   #非安全的镜像仓库127.0.0.0/8  Live Restore Enabled: false  #是否开启活动重启(重启docker-daemon不关闭容器)

容器的创建与管理过程:
在这里插入图片描述

1、dockerd进程:docker client直接访问dockerd(其父进程为宿主机的systemd守护进程)进程。dockerd通过grpc和containerd模块通信,dockerd和containerd通信的socket文件:/run/containerd/containerd.sock。

2、containerd进程:containerd在dockerd启动时被启动,然后containerd启动grpc请求监听,containerd根据grpc请求做相应动作。containerd可以在宿主机中管理完整的容器生命周期(容器镜像的传输和存储,容器的执行和管理,存储和网络等)。

3、containerd-shim进程:若是创建容器,containerd拉起一个/usr/bin/containerd-shim进程,并进行相应的创建操作。containerd-shim套件其目的主要是隔离containerd和容器。

4、containerd-shim-runc-v2进程: containerd-shim启动后会去启动/usr/bin/containerd-shim-runc-v2,然后立即退出,此时containerd-shim-runc-v2的父进程就变成了systemd(1),这样containerd-shim-runc-v2就和containerd脱离了关系,即便containerd退出也不会影响到容器(这也是containerd-shim套件的作用) 。

5、runc:OCl标准的具体实现就是runc,真正创建和维护容器便是由runc来完成的。/usr/bin/containerd-shim-runc-v2会启动runc去create、start容器,然后runc立即退出,容器的父进程就变成了containerd-shim-runc-v2。containerd-shim-runc-v2会收集容器进程的状态,上报给containerd。

6、docker-proxy:实现容器通信,其父进程为dockerd

[root@rhel9 yum.repos.d]# ps -ef | egrep "(docker|containerd)"
root        3751       1  1 09:45 ?        00:00:00 /usr/bin/containerd
root        3760       1  1 09:45 ?        00:00:00 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
[root@rhel9 ~]# pstree -p | egrep "(systemd|docker|containerd)"
systemd(1)-+-ModemManager(886)-+-{ModemManager}(925)|-containerd(3751)-+-{containerd}(3752)|                  |-{containerd}(3753)|                  |-{containerd}(3754)|                  |-{containerd}(3755)|                  |-{containerd}(3756)|                  |-{containerd}(3758)|                  `-{containerd}(3759)|-dockerd(3760)-+-{dockerd}(3761)|               |-{dockerd}(3762)|               |-{dockerd}(3763)|               |-{dockerd}(3764)|               |-{dockerd}(3765)|               |-{dockerd}(3766)|               |-{dockerd}(3767)|               `-{dockerd}(3768)#运行一个容器
[root@master0101 ~]# docker run -d nginx:1.27-alpine
4a2eb061a84206517b8645da5161e0711d752c5f2d3fb159f3b22164da86ed1b#查看进程
[root@master0101 ~]# ps -ef | grep containerd
root        3751       1  0 09:45 ?        00:00:00 /usr/bin/containerd
root        3760       1  0 09:45 ?        00:00:00 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
root       11106       1  0 10:04 ?        00:00:00 /usr/bin/containerd-shim-runc-v2 -namespace moby -id 4a2eb061a84206517b8645da5161e0711d752c5f2d3fb159f3b22164da86ed1b -address /run/containerd/containerd.sock#再次运行容器,进行端口映射,可以通过宿主机端口访问容器
[root@master0101 ~]# docker run -d -P nginx:1.27-alpine
f134ebaabc20d266ab326a64d4ff521516dbdda2c0617114abb5bbae0922b247
#查看容器端口映射到宿主机的端口
[root@master0101 ~]# docker ps
CONTAINER ID   IMAGE               COMMAND                   CREATED              STATUS              PORTS                                       NAMES
f134ebaabc20   nginx:1.27-alpine   "/docker-entrypoint.…"   About a minute ago   Up About a minute   0.0.0.0:32768->80/tcp, [::]:32768->80/tcp   happy_gauss#查看docker-proxy进程
[root@master0101 ~]# ps -ef | grep docker-proxy
root       26183    3760  0 10:44 ?        00:00:00 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 32768 -container-ip 172.17.0.2 -container-port 80
root       26195    3760  0 10:44 ?        00:00:00 /usr/bin/docker-proxy -proto tcp -host-ip :: -host-port 32768 -container-ip 172.17.0.2 -container-port 80
root       26601    9640  0 10:44 pts/1    00:00:00 grep --color=auto docker-proxy

2.4 docker镜像加速配置

国内从Docker Hub拉取镜像有时会遇到困难,可以通过修改docker配置文件的方式添加一个加速器,可以通过加速器达到下载镜像的目的。

(1)从2017年6月9日起,Docker 官方提供了在中国的加速器,以解决墙的问题。不用注册,直接使用加速器地址:https://registry.docker-cn.com 即可。

(2)中国科技大学的镜像加速器:中科大的加速器不用注册,直接使用地址 https://docker.mirrors.ustc.edu.cn/ 配置加速器即可。进一步的信息可以访问:http://mirrors.ustc.edu.cn/help/dockerhub.html?highlight=docker

(3)阿里云加速器:注册阿里云开发账户(免费的)后,访问这个链接就可以看到加速器地址: https://cr.console.aliyun.com/#/accelerator

(4)DaoCloud 加速器:注册 DaoCloud 账户(支持微信登录),然后访问: https://www.daocloud.io/mirror#accelerator-doc

#配置docker镜像加速
[root@rhel9 ~]# cat /etc/docker/daemon.json
{"registry-mirrors": ["https://docker.m.daocloud.io","https://huecker.io","https://dockerhub.timeweb.cloud","https://noohub.ru","https://hub.oepkgs.net","https://huecker.io","https://dockerhub.timeweb.cloud" ]
}
[root@rhel9 ~]# systemctl daemon-reload
[root@rhel9 ~]# systemctl restart docker
#此处配置了部分
[root@rhel9 ~]# docker info  | grep -iA 4 registryRegistry Mirrors:https://docker.m.daocloud.io/https://huecker.io/https://dockerhub.timeweb.cloud/https://noohub.ru/
#出现该内容表示镜像加速配置成功
#拉取hello-world镜像,测试能否拉取
[root@rhel9 ~]# docker pull hello-world
Using default tag: latest
latest: Pulling from library/hello-world
c1ec31eb5944: Pull complete
Digest: sha256:53cc4d415d839c98be39331c948609b659ed725170ad2ca8eb36951288f81b75
Status: Downloaded newer image for hello-world:latest
docker.io/library/hello-world:latest
[root@rhel9 ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
hello-world   latest    d2c94e258dcb   15 months ago   13.3kB

http://www.mrgr.cn/news/79247.html

相关文章:

  • MySQL其四,各种函数,以及模拟了炸裂函数创建用户等操作
  • STM32F103单片机HAL库串口通信卡死问题解决方法
  • Ubuntu防火墙管理(六)——ARP防火墙过滤防御自定义系统服务
  • scala的泛型类
  • shell编程(完结)
  • 鸿蒙手机文件目录
  • 【Calibre-Web】Calibre-Web服务器安装详细步骤(个人搭建自用的电子书网站,docker-compose安装)
  • 工作:SolidWorks从3D文件导出2D的DWG或DXF类型文件方法
  • Qt Chart 模块化封装曲线图
  • 【CSS in Depth 2 精译_068】11.2 颜色的定义(下):CSS 中的各种颜色表示法简介
  • Linux镜像文件制作
  • Node-RED系列教程-生成exe
  • 构建个人大模型问答助手(基于Streamlit +gpt-4o/o1-mini):全面解析与实现
  • 小程序 —— Day1
  • 青岛鼎信Java开发面试题及参考答案(3万字长文,多张原理图)
  • 全能单行url解码器
  • ainiworth 在分布式目标的方程中 与正常互易性可以形成的方程不同 多引入了协方差元素未知 但可解,因为此时只有一个串扰参数且已经解出来了
  • vue3 vite ts day1
  • C#—交错数组
  • 12.05排错日志
  • CTFshowPHP特性
  • STL算法之merge sort
  • 【Python教程】Python基础篇之历史
  • 决策树:ID3、C4.5和CART特征选择方式
  • EasyExcel注解使用
  • 安装 Zookeeper 和 Kafka