欢迎来到魔幻小生的博客

Docker安装CentOS容器并配置静态ip

查看CentOS版本

进入docker镜像官网查看centos版本

地址:https://hub.docker.com/

image

拉取CentOS镜像

这里以CentOS7.9为例

[root@localhost yum.repos.d]# docker pull centos:centos7.9.2009
centos7.9.2009: Pulling from library/centos
2d473b07cdd5: Pull complete 
Digest: sha256:be65f488b7764ad3638f236b7b515b3678369a5124c47b8d32916d6487418ea4
Status: Downloaded newer image for centos:centos7.9.2009
docker.io/library/centos:centos7.9.2009

image

安装Docker桥接网络

为了后续给CentOS容器分配ip,需要创建Docker桥接网络。

首先打开网卡文件(/etc/sysconfig/network-scripts目录下),注释掉其中有关IP地址、子网掩码、网关、DNS等的配置;
并在最下方添加 BRIDGE="br0"

image

创建名为 ifcfg-br0 的网卡文件(网络配置根据实际情况填写)

DEVICE="br0"
NM_CONTROLLED="yes"
ONBOOT="yes"
TYPE="Bridge"
BOOTPROTO=none
IPADDR=10.20.82.25
NETMASK=255.255.0.0
GATEWAY=10.20.0.1
DNS1=114.114.114.114

执行 systemctl restart network 重启网络

image

查看桥接网络

yum install -y bridge-utils
brctl show

image

创建CentOS容器并配置ip

docker run -itd --name=centos_demo --privileged=true --hostname=centos_demo --net=none --restart=always --add-host=centos_demo:10.20.82.2 centos:centos7.9.2009 /usr/sbin/init

-t: 终端 -i: 交互式操作 -d: 后台运行
--privileged=true 容器内可以使用真正的root权限
--restart=always 重启docker后自动启动容器
--add-host=centos_demo:10.20.82.2 会将该信息配置到容器的/etc/hosts文件中
/usr/sbin/init 启动容器之后可以使用systemctl方法(使用/bin/bash无法使用systemctl)

容器配置ip需要使用pipework脚本,将该脚本放到/usr/bin/目录下,cp -a /opt/pipework-master/pipework /usr/bin/

下载地址:https://github.com/jpetazzo/pipework

image

配置ip

# pipework 【网桥名】 【容器名称/ID】 【静态IP地址】/【子网掩码】@【网关】
pipework br0 centos_demo 10.20.82.2/16@10.20.0.1
# 重启容器会失效,需要重新配置

此时使用物理设备ping该容器ip发现已经可以ping通了!

基本配置

# 进入容器
docker exec -it centos_demo /bin/bash
# 安装常用工具
yum install -y openssh-server vim lrzsz wget gcc-c++
yum -y install gcc automake autoconf libtool make
yum install -y net-tools
# 开启ssh服务
systemctl start sshd
# 修改root密码
passwd root
# 安装jdk
yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel

可将安装了常用工具的CentOS容器构建镜像,方便后续创建多个容器使用(无需反复配置ssh/root密码等)

# 暂停刚才创建的CentOS容器
docker pause centos_demo
# 基于该容器构建镜像
docker commit centos_demo centos_test:lastest
# 查看镜像是否创建成功
docker images
# 启动所有容器
docker start $(docker ps -a | awk '{ print $1}' | tail -n +2)
# 启动某个容器
docker start 容器名或ID
# 关闭所有容器
docker stop $(docker ps -a | awk '{ print $1}' | tail -n +2)
# 关闭某个容器
docker stop 容器名或ID
# 所有容器批量开启ssh服务
vi startsshd.sh

docker ps -a | awk '{print $NF}' > dockername.txt
while read line
do
        if [[ "$line" != "NAMES" && "$line" != "docker-ui-10" ]]; then
                echo $line
                docker exec $line /usr/sbin/sshd
        fi 
done < dockername.txt
posted @ 2023-04-25 17:52  魔幻小生  阅读(860)  评论(0编辑  收藏  举报