跳至主要內容

Docker install centos7

Jelly大约 3 分钟DockerDockerCentOS7

因为VMware装在电脑上会影响虚拟网卡的创建, 于是我尝试使用docker来代替VMware来完成课堂任务

拉取一个镜像到本地

docker pull centos:centos7

# docker pull image_name:tag
# 或者使用 docker pull image_name 来获取最新版本

user defined bridge networksopen in new window

# 指定一个网段, 用于设置容器的静态ip
docker network create --subnet=192.168.60.0/8 --gateway 192.168.60.0 misaka

# 查看docker网络列表
docker network ls

# 删除指定的网络
docker network rm misaka

DNS

找到宿主机中 /etc/docker/daemon.json(Linux) 或 C:\Users\用户名\.docker\daemon.json(Windows) 添加dns配置, 配置完后一定要对docker进行重启, 不然新创建的容器读取不到更新的配置. 我在window下用vscode对daemon.json编辑后发现新创建的容器不受配置文件的影响, 后来我在docker内置的daemon.json配置的页面里有一个apply&restart的按钮, 我才意识到改完配置后要重启docker

注意: 这个daemon.json设置的dns不会显示在容器的 /etc/resolv.conf 文件中

常用的DNS
119.29.29.29 腾讯
223.5.5.5 阿里
114.114.114.114

1.1.1.1 cloudflare
8.8.8.8 谷歌
9.9.9.9 IBM
208.67.222.222 思科

# 配置 - 添加dns
{
    "dns": ["119.29.29.29", "223.5.5.5", "114.114.114.114", "1.1.1.1", "8.8.8.8"]
}

运行容器

docker run -itd -v /d/Desktop/docker_src/package:/root/package --privileged=true --name misaka0 --hostname misaka0 --net misaka --ip 192.168.60.10 --add-host misaka1:192.168.60.11 centos:centos7 /usr/sbin/init

# [-it] 以交互模式运行启动容器
# [-v 宿主机目录:容器目录] 挂载宿主机目录到容器目录, 
# [-d] 后台运行容器
# [-p 宿主机端口:容器端口]  端口映射
# [--privileged=true] 为了使用systemd,需要开启并从/usr/sbin/init启动容器, 让0号进程为init, 通常情况下不使用privileged和/usr/sbin/init, 官方也不推荐使用privileged
# [--hostname hostname] 设定hostname;
# [--net] 指定网络模式 (默认bridge)
# [--ip] 指定IP
# [--add-host] 指定往/etc/hosts添加的host
# [--dns nameserver] 指定容器dns

其他命令

宿主机

# 进入容器
docker exec -it [container_name | container_id] /bin/bash

# 停止容器
docker container stop container1 container2 ...

# 删除容器
docker container rm container1 container2 ...

# 重启容器
docker container restart container1 container2 ...

# 启动容器
docker container start container1 container2 ...

容器

# 查看容器dns
cat etc/resolv.conf

# 查看网络上的设备对应的ip
cat /etc/hosts

目标

  1. 创建misaka网络
  2. 将misaka0, misaka1连接misaka网络
  3. 成功ping baidu.comopen in new window
  4. 安装java和zookeeper

配置

container nameiphostname
misaka0192.168.60.10misaka0
misaka1192.168.60.11misaka1
misaka2192.168.60.12misaka2

require package

yum -y update
yum install -y net-tools

ssh服务

安装ssh服务

yum -y install openssh-server

修改/etc/ssh/sshd_config文件

sed -i "s/^#Port 22/Port 22/g" /etc/ssh/sshd_config
sed -i "s/^#ListenAddress 0.0.0.0/ListenAddress 0.0.0.0/g" /etc/ssh/sshd_config
sed -i "s/^#ListenAddress ::/ListenAddress ::/g" /etc/ssh/sshd_config

端口放行和ssh服务的启动

yum -y install firewalld
firewall-cmd --permanent --zone=public --add-port=22/tcp
systemctl restart firewalld

systemctl enable sshd.service
systemctl restart sshd.service

生成密钥

expect -c "
    spawn "ssh-keygen -t rsa";
    expect {
            \"Are you sure you want to continue connecting (yes/no)?\" {send \"yes\r\"; exp_continue}
            }
        "
expect "Enter file in which to save the key (/root/.ssh/id_rsa):" {send "\n"}
expect "Enter passphrase (empty for no passphrase):" {send "\n"}
expect "Enter same passphrase again:" {send "\n"}

传输密钥

for ip in misaka0 misaka1 misaka2
do
    if [ ${ip} != $HOSTNAME ];then
        ssh-copy-id ${ip}
        expect "(yes/no)?"
        send "yes\n"
        expect "password:"
        send "123456\n"
    fi
done

修改密码

echo "123456" | passwd --stdin root