​ 上一篇 《基础 Linux 服务器环境配置》我们已经为 Linux 服务器做了初步的处理,接下来我们将进行 Docker 环境的搭建,这里我们除了安装以外,还会通过创建桥接的网络模式来指定后续的 Docker 容器实例的IP。

一、Linux 搭建基础 Docker 环境

1. 前期准备工作(选做)
# 查看Linux版本信息
$ cat /etc/redhat-release

# 安装必要依赖
$ yum -y install gcc gcc-c++
$ yum -y install yum-utils device-mapper-persistent-data lvm2

# 卸载旧版本 (PS: 这里的 \ 换行符需要配合 ctrl + enter 使用) 
$ yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
2. 安装 docker-ce

这里的安装有多种方法,其实都是用的 yum

方法一:配置 yum docker 镜像源

方法二:wget 获取镜像资源

# 方法一 设置Docker yum源
$ yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 方法二
$ wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo

# 安装 PS:可以通过 yum -y install docker-ce-20.10.12-3.el7 指定版本
$ yum -y install docker-ce

# 启动 & 自启动配置
$ systemctl enable docker && systemctl start docker && systemctl status docker

# 查看版本
$ docker --version
3. 配置 docker 国内加速镜像

这里采用的是阿里的国内镜像

# 这里正常情况下无需执行
$ mkdir /etc/docker

# 配置 docker 阿里云加速 "registry-mirrors": ["https://n8ygadq2.mirror.aliyuncs.com"],
$ cat > /etc/docker/daemon.json << EOF
 {
    "registry-mirrors": ["https://n8ygadq2.mirror.aliyuncs.com"],
    "exec-opts": ["native.cgroupdriver=systemd"],
    "log-driver": "json-file",
    "log-opts": {
      "max-size": "100m"
    },
   "storage-driver": "overlay2"
 }
EOF

# 重启
systemctl daemon-reload
systemctl restart docker
4. 安装配置 docker-compose (可选)

docker-compose 配合 spring boot pom.xml 中 dockerHost 配置以及 dockerfile 文件,通过docker:build 能够实现快速的镜像容器发布部署

# 常规获取 docker-compose 包
$ wget https://github.com/docker/compose/releases/download/v2.2.3/docker-compose-linux-x86_64

# 因为是从 github 上下载,可能需要走 proxy 代理
$ wget -Y on -e "http_proxy=http://74.125.20.109:7890" https://github.com/docker/compose/releases/download/v2.2.3/docker-compose-linux-x86_64

# 移动 & 改名
$ mv -v docker-compose-linux-x86_64 /usr/local/bin/docker-compose

# 修改权限
$ chmod +x /usr/local/bin/docker-compose

# 编辑 docker.service 服务配置文件
$ vim /lib/systemd/system/docker.service
# 开放 2376 端口 建议改成12375 (2376 容器被攻击)
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:12375  -H unix:///var/run/docker.sock

# 重启 docker 服务
$ systemctl daemon-reload
$ systemctl restart docker.service

# 检查 
$ netstat -nptl 
tcp6     0     0 :::12375     :::*     LISTEN     10729/dockerd
5. docker network 网络模式配置(可选)

配置Docker网络模式-指定Docker容器实例IP,这个配置对于后续的监控运维有很大的帮助,能够避免每次 docker 重启后容器IP不固定的问题。

1. 查看 Docker 支持的网络模式

bridge 桥接模式是 docker 默认的网络模式,不过为容器分配的IP地址是非固定的,这里我们可以自己创建,并且指定子网范围,后续在启动 Docker 容器时,可以选择指定网络模式与容器IP。

# 查看网络模式
$ docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
a9a43c203504   bridge    bridge    local
d876b639e64a   host      host      local
67d2d438cef7   none      null      local

# 查看网络模式内部信息 docker network inspect [network id & name]
$ docker network inspect a9a43c203504
"IPAM": {
      "Driver": "default",
      "Options": null,
      "Config": [
          {
              "Subnet": "172.17.0.0/16",
              "Gateway": "172.17.0.1"
          }
      ]
},
2. 创建自己的 bridge 网络
docker network create --driver bridge --subnet=172.18.0.0/16 --gateway=172.18.0.1 code-net

参数说明:

–driver bridge 表示桥接模式

–subnet 172.18.0.0/16 表示子网IP (172.18.0.2 ~ 172.18.255.255)

–gateway 172.18.0.1 表示网关

3. docker 容器指定 IP

这里拿 docker 部署 redis 为例

参数为 --network=code-net --ip 172.18.0.*

# 可以试试,也可以不试,接下来我会在此基础上搭建 Prometheus + Grafana 监控服务,其中就会用到当前配置的网络模式
$ docker run --network=code-net --ip 172.18.0.2 -d --restart=always --name redis -p 6390:6379 redis --requirepass "Xcode-redis?"
4. yaml 也能指定 networks (自行参考)
*. 相关指令
# 移除指定网络模式
$ docker network rm [network id & name] 
# 查看运行容器IPAddress
$ docker inspect redis | grep IPAddress

附* 常用指令 (持续更新)

1. 批量删除 none 镜像
docker images | grep none | awk '{print $3}' | xargs docker rmi

说明:镜像是什么?如何产生?

—— 我们在重构镜像的时候,如果该镜像正在被某个容器使用,那么构建同名镜像的时候,docker会保留原来的镜像,即容器还是会使用原来的镜像,除非重启。

指令分析

# 查询所有 none 镜像
$ docker images | grep none
# 查询所有 none 镜像的 id
$ docker images | grep none | awk '{print $3}'
# 删除所有 none 镜像
$ docker images | grep none | awk '{print $3}' | xargs docker rmi
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐