CentOS7安装部署Docker

CentOS7安装部署Docker

本教程主要用于CentOS7操作系统如何安装配置Docker环境。

一.安装前确认

1.1 系统内核版本

Docker 官方建议 CentOS 系统的内核版本高于 3.10 ,我们查看当前CentOS 版本是否支持 Docker 。

# uname -r
3.10.0-1160.45.1.el7.x86_64

虽然没有高于3.10,但是也还是可以安装的。

1.2 检查是否安装过旧版本

# rpm -qa|grep docker

如果有,请处理好数据后卸载。

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

1.3 yum升级系统包

  • 此步非必须

  • 一般是云平台安装后是最新的,如果需要升级,请使用以下命令。

# yum -y update

1.4 设置yum源

有些系统可能没有yum-config-manager命令,需要提前安装。

# yum install -y yum-utils

更新本地镜像源:

# yum-config-manager \
    --add-repo \
    https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

为了提升下载库的速度,需要配置国内镜像。比如腾讯云用它自己的镜像

# sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo

将软件包信息提前在本地索引缓存 ,用来提高搜索安装软件的速度。

# sudo yum makecache fast

如果是centos8系统,不能使用此命令,要用这个命令

# dnf makecache

二.安装

2.1 使用root用户进行一键安装

# yum install -y docker-ce

2.2 无根模式说明

以非root用户运行是在Docker Engine v19.03中作为实验特性引入的,稳定版是Docker Engine v20.10,在无根模式下,守护进程和容器都不使用根权限运行,提高了安全问题。

下面会提到如何使用非root用户运行。

2.3 启动服务

重新加载某个服务的配置文件,启动

# systemctl daemon-reload && systemctl start docker

2.4 查看进程

# ps -ef|grep docker
root     31828     1  3 15:43 ?        00:00:00 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
root     31968 13692  0 15:43 pts/1    00:00:00 grep --color=auto docker

2.5 验证docker

# docker version
Client: Docker Engine - Community
 Version:           24.0.7
 API version:       1.43
 Go version:        go1.20.10
 Git commit:        afdd53b
 Built:             Thu Oct 26 09:11:35 2023
 OS/Arch:           linux/amd64
 Context:           default

Server: Docker Engine - Community
 Engine:
  Version:          24.0.7
  API version:      1.43 (minimum version 1.12)
  Go version:       go1.20.10
  Git commit:       311b9ff
  Built:            Thu Oct 26 09:10:36 2023
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.6.26
  GitCommit:        3dd1e886e55dd695541fdcd67420c2888645a495
 runc:
  Version:          1.1.10
  GitCommit:        v1.1.10-0-g18a0cb0
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

2.6 开机自启动Docker服务

# systemctl enable docker.service
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.

查看是否开机自启动

# systemctl list-unit-files|grep docker
docker.service                                enabled
docker.socket                                 disabled

enabled是开机启动,disabled是开机不启动

三.防火墙

# 关闭
systemctl stop firewalld
# 禁止开机启动防火墙
systemctl disable firewalld

#安装iptables
yum install -y iptables 

四.Docker配置文件

当您下载安装的Docker Version不低于1.10时,建议通过daemon config进行配置。

如果你还没成功启动过Docker服务,你可以手工先创建配置文件。

# mkdir -p /etc/docker/
# touch /etc/docker/daemon.json
  • 使用配置文件/etc/docker/daemon.json,配置Docker一些常用配置。
# vim /etc/docker/daemon.json
{
  "registry-mirrors": [
        "http://hub-mirror.c.163.com",
        "https://docker.mirrors.ustc.edu.cn",
        "https://registry.docker-cn.com"
   ],
  "bip": "172.18.0.1/16",
  "data-root": "/data01/docker"
}

配置项说明:

  1. registry-mirrors:镜像加速器,提升下载镜像速度。可配置多个
  2. bip:容器的IP网段,这里主要是有时候网段冲突,为避免生成的docker0网卡导致本地路由冲突,可以进行自定义配置。
  3. data-root: 镜像、容器的存储路径,默认是/var/lib/docker。旧版本是使用graph,具体根据你的版本来选择配置项参数名。

五.Docker命令

  • 停止服务
# service docker stop
  • 启动服务
# service docker start
  • 查看镜像
# docker images
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE
  • 查看容器
# docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
  • 拉取镜像
# docker pull 镜像名
  • 运行容器
# docker run -d --name 容器名称 -p 20086:10086 -v /opt/MrDoc:/app/MrDoc 镜像名

说明:

  1. 对外的端口是20086,内部端口10086
  2. 宿主机的地址/opt/MrDoc映射到内部主机/app/MrDoc
  • 查看容器
$ docker ps -a
CONTAINER ID   IMAGE              COMMAND                CREATED         STATUS    PORTS                                           NAMES
89e8e96b96cd   zmister/mrdoc:v2   "sh docker_mrdoc.sh"   2 minutes ago   Created   0.0.0.0:20086->10086/tcp, :::10086->10086/tcp   mrdoc
  • 停止容器
$ docker ps -a|grep mrdoc
89e8e96b96cd   zmister/mrdoc:v2   "sh docker_mrdoc.sh"   58 seconds ago   Created   0.0.0.0:10086->10086/tcp, :::10086->10086/tcp   mrdoc

第一列的名字进行stop
$ docker stop 89e8e96b96cd
或者容器名停止
$ docker stop mrdoc
  • 删除容器
docker ps -a第一列的名字进行删除
$ docker rm 89e8e96b96cd
或者容器名进行删除
$ docker stop mrdoc
  • 删除镜像
docker images第3列(IMAGE ID)值进行删除
$ docker rm 07d2bcf33f96
或者容器名进行删除
$ docker stop zmister/mrdoc
  • 查看容器日志
docker ps -a第一列的名字进行查看
$ docker logs 89e8e96b96cd
或者容器名进行查看
$ docker logs mrdoc
  • 查看容器最后10行
$ docker logs 容器名 |tail -10
  • 进入容器
$ docker exec -it 容器名 /bin/sh

六. 无根模式(非root模式)使用Docker

以下内容还在探索中,仅供参考。

无根模式允许以非root用户的身份运行Docker守护进程和容器,以减少守护进程和容器运行时中的潜在漏洞。

无根模式即使在安装Docker守护进程时也不需要根权限,只要满足先决条件即可。

image-20220509163918388

6.1 先决条件

  • 必须在主机上安装newuidmapnewgidmap。这些命令由大多数发行版上的uidmap包提供。

  • /etc/subuid/etc/subgid应该至少包含65,536个用户的下级UIDs/GIDs。在下面的示例中,用户testuser拥有65,536个从属UIDs/GIDs(231072-296607)。

  • user.max_user_namespaces=28633添加到/etc/sysctl.conf文件中(或者添加到/etc/sysctl.d),然后运行命令sudo sysctl --system

  • systemctl --user 默认情况下不工作。在没有systemd的情况下直接运行dockerd-rootless.sh

6.2 限制条件

  • 仅支持以下存储驱动:
  1. overlay2(仅当运行5.11或更高版本的内核,或 Ubuntu-flavored的内核,或 Debian-flavored的内核时)
  2. fuse-overlayfs(仅当运行内核4.18或更高版本,并且安装了fuse-overlayfs)
  3. btrfs(只有在内核4.18或更高版本运行时,或者~/.local/share/docker是用user_subvol_rm_allowed挂载选项挂载的)
  4. vfs
  • 只有在使用Cgroup v2和systemd运行时,才支持Cgroup。

  • 不支持以下特性:

    AppArmor
    Checkpoint
    Overlay network
    Exposing SCTP ports
    
  • 公开特权TCP/UDP端口(< 1024)

  • IPAddress显示在docker inspect中,命名空间在RootlessKit的网络命名空间中。这意味着如果没有nsenter-ing到网络命名空间,主机就无法访问IP地址。

  • 主机网络(docker run --net=host)的命名空间也在RootlessKit中。

  • 不支持NFS作为docker"data-root"挂载。这个限制并不特定于无根模式。

6.3 部署启动

1.可以新建一个专门的系统用户

# useradd dockeruser

2.普通用户查看脚本

$ which dockerd-rootless-setuptool.sh
/bin/dockerd-rootless-setuptool.sh

3.普通用户执行脚本安装命令

$ dockerd-rootless-setuptool.sh install
[INFO] systemd not detected, dockerd-rootless.sh needs to be started manually:

PATH=/bin:/sbin:/usr/sbin:$PATH dockerd-rootless.sh

[INFO] Creating CLI context "rootless"
Successfully created context "rootless"

[INFO] Make sure the following environment variables are set (or add them to ~/.bashrc):

# WARNING: systemd not found. You have to remove XDG_RUNTIME_DIR manually on every logout.
export XDG_RUNTIME_DIR=/home/dockeruser/.docker/run
export PATH=/bin:$PATH
export DOCKER_HOST=unix:///home/dockeruser/.docker/run/docker.sock

4.设置环境变量

$ vim ~/.bash_profile

export XDG_RUNTIME_DIR=/home/dockeruser/.docker/run
export PATH=/bin:$PATH
export DOCKER_HOST=unix:///home/dockeruser/.docker/run/docker.sock

5.生效环境变量

$ source  ~/.bash_profile

6.root停止服务

# service docker stop
Redirecting to /bin/systemctl stop docker.service
Warning: Stopping docker.service, but it can still be activated by:
  docker.socket

7.普通用户启动服务

$  nohup /bin/dockerd-rootless.sh &

日志会放在家目录下nohup.out。

如果需要重启docker服务,把这个用户下的进程干掉,再启动服务。


本文没有授权给任何组织、企业和个人转载,未经作者允许禁止转载!

欢迎关注我的公众号testerzhang,原创技术文章第一时间推送。

公众号二维码

updatedupdated2023-12-192023-12-19