容器准备

拉取centos镜像

  1. 使用docker pull指令拉取镜像
1
docker pull centos:centos7.9.2009
  • docker pull命令从docker hub上拉取一个centos7.9.2009的镜像

建立容器待更新

  1. 新建一个容器并设置名为centos,再进入这个容器
1
2
docker run -itd --name centos centos:centos7.9.2009 /bin/bash
docker exec -it centos /bin/bash
  • docker run命令用于在 Docker 中运行一个容器
  • -itd 是选项组合:
    • -i: 交互模式运行容器
    • -t: 为容器分配一个伪终端
    • -d: 后台运行该容器(分离模式)
  • --name centos为容器建立一个名称为centos
  • centos:centos7.9.2009镜像名称和标签
  • /bin/bash启动容器后启动/bin/bash
  • docker exec在运行的容器中执行命令

更新容器

  1. 备份source.listhome目录
1
cp /etc/yum.d/source.list ~/source.list
  • source.list文件备份到主目录
  1. 添加ustc镜像源
1
2
3
4
sed -e 's|^mirrorlist=|#mirrorlist=|g' \
-e 's|^#baseurl=http://mirror.centos.org/centos|baseurl=https://mirrors.ustc.edu.cn/centos|g' \
-i.bak \
/etc/yum.repos.d/CentOS-Base.repo
  • 修改容器中的yum源为中国科学技术大学的镜像源
  1. 更新
1
yum update
  • 更新容器中的软件包

保存容器为镜像

  1. 提交保存镜像
1
docker commit -m "centos:update" centos centos:v1
  • docker commit把有修改的容器提交成新的镜像
  • -m添加注释
  • centos有修改的容器名称
  • centos:v1新的镜像名称和标签名

创建网络待容器使用

  1. 创建网络
1
docker network create --subnet=192.168.1.0/24 mynetwork
  • docker network create创建自定义网络的 Docker 命令
  • --subnet=192.168.1.0/24创建一个网络并指定新网络的子网参数
    • 192.168.1.0/24: 创建一个子网掩码为 255.255.255.0 的子网,范围从 192.168.1.1 到 192.168.1.254。/24 表示子网掩码有 24 位(255.255.255.0)
  • mynetwork: 自定义网络的名称

建立环境容器

  1. 输入以下指令启动三个容器, 模拟分布式
1
2
3
docker run -itd --name master -v /sys/fs/cgroup:/sys/fs/cgroup --network mynetwork --ip 192.168.1.151 --privileged=true --hostname master centos:v1 /sbin/init
docker run -itd --name slave1 --network mynetwork --ip 192.168.1.152 --privileged=true --hostname slave1 centos:v1 /sbin/init
docker run -itd --name slave2 --network mynetwork --ip 192.168.1.153 --privileged=true --hostname slave2 centos:v1 /sbin/init
  • -v /sys/fs/cgroup:/sys/fs/cgroup: 将宿主机的/sys/fs/cgroup目录挂载到容器的/sys/fs/cgroup目录。这样做是为了让容器能够访问宿主机的cgroup文件系统,为后面安装mysql打下基础
  • --network mynetwork: 将容器连接到名为 mynetwork 的 Docker 网络
  • --ip 192.168.1.151: 指定容器的 IP 地址为 192.168.1.151
  • --privileged=true: 启用特权模式
  • /sbin/init: 在容器启动时运行/sbin/init
  1. 输入以下指令进入此容器
1
2
3
docker exec -it master /bin/bash
docker exec -it slave1 /bin/bash
docker exec -it slave2 /bin/bash
  • 分别进入masterslave1slave2容器的Bash终端

参考文章

Docker “pull“命令获取镜像,讲道理你真的会吗?

深入理解 Docker Run 命令:从入门到精通

Docker network 命令

docker 简明教程