Docker中的两个容器在服务器内网中互通
先在Linux中安装docker,然后在docker中安装appnode面板和rabbitmq,并进行docker网络端口映射。docker安装后会自动创建3中网络:bridge、host和none。默认docker容器ip地址从172.17.0.1开始。每开启一个容器就会在宿主机搭建一个网络桥接。
先在Linux中安装docker,然后在docker中安装appnode面板和rabbitmq,并进行docker网络端口映射。
docker安装后会自动创建3中网络:bridge、host和none。
默认docker容器ip地址从172.17.0.1开始。
每开启一个容器就会在宿主机搭建一个网络桥接。
安装docker
第一步,卸载旧版本docker。
若系统中已安装旧版本docker,则需要卸载旧版本docker以及与旧版本docker相关的依赖项。
命令:yum -y remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
第二步,安装gcc依赖。
命令:yum -y install gcc gcc-c++
第三步,使用docker仓库进行安装。
在新主机上首次安装docker Engine-Community之前,需要设置docker仓库。之后,可以从仓库安装和更新docker。
# 设置仓库,安装所需的软件包。
命令:yum install -y yum-utils device-mapper-persistent-data lvm2
# 设置稳定的仓库,使用官方源地址(比较慢)
命令:yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 可以选择国内的一些源地址,如阿里云
命令:yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 可以选择国内的一些源地址,如清华大学源
命令:yum-config-manager --add-repo https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
第四步,安装docker Engine-Community。
# 更新yum软件包索引
命令:yum makecache
# 安装最新版本的docker Engine-Community和containerd
命令:yum -y install docker-ce docker-ce-cli containerd.io
# 查看docker-ce是否成功安装
命令:yum list docker-ce
docker安装完默认未启动,并且已经创建好docker用户组,但该用户组下没有用户。
或
# 列出存储库中可用的版本并按版本号从高到低进行排序
命令:yum list docker-ce --showduplicates | sort -r
# 通过其完整的软件包名称安装特定版本,如docker-ce-24.0.0。
命令:yum -y install docker-ce-24.0.0 docker-ce-cli-24.0.0 containerd.io
第五步,启动docker。
命令:systemctl enable docker
systemctl start docker
systemctl restart docker
若结果显示“Job for docker.service failed because the control process exited with error code.See "systemctl status docker.service" and "journalctl -xe" for details.”,则运行如下命令:
systemctl daemon-reload
systemctl restart docker.service
第六步,验证docker Engine-Community是否正确安装。
命令:docker version
docker run hello-world
若结果显示“Unable to find image 'hello-world:latest' locally”,则需要按照下面的步骤来解决:
1)创建文件daemon.json文件。
命令:touch /etc/docker/daemon.json
2)配置文件/etc/docker/daemon.json,添加阿里云镜像。
{
"registry-mirrors": ["https://ufxq8t1x.mirror.aliyuncs.com"]
}
3)重启docker服务。
命令:systemctl restart docker
systemctl status docker
再次验证:docker run hello-world
若结果显示“Hello from docker!”,则说明docker安装成功。
docker原生网络
docker安装后会自动创建3中网络:bridge、host和none。
第一步,docker安装时会默认创建一个docker0的bridge。
命令:ip addr show docker0
注意:默认docker容器ip地址从172.17.0.1开始。
第二步,查看当前网络。
命令:docker network ls
进行docker网络端口映射appnode容器
第一步,创建执行网络端口映射appnode容器。
# 设置面板端口号为8888
命令:docker run -dit --restart=always \
--privileged=true \
--cap-add SYS_ADMIN \
-e container=docker \
--network bridge \
-p 8888:8888 \
-p 443:443 \
-p 80:80 \
-p 3306:3306 \
-p 21:21 \
-v /data:/data \
--name appnode \
sbwml/appnode:latest \
/usr/sbin/init
第二步,列出本地所有的镜像。
命令:docker images -a
第三步,列出当前所有正在运行的镜像。
命令:docker images
第四步,从docker中删除镜像。
命令:docker rmi [镜像ID或容器名称]
# 从docker中强制删除镜像
命令:docker rmi -f [镜像ID或容器名称]
# 通过docker images -p查询到的镜像ID来删除所有镜像
命令:docker rmi -f $(docker images -p)
第五步,列出所有的容器。
命令:docker ps -a
第六步,列出当前所有正在运行的容器。
命令:docker ps
第七步,强制停止容器。
命令:docker kill [容器ID或容器名称]
第八步,删除容器。
命令:docker rm [容器ID或容器名称]
# 从docker中强制删除容器
命令:docker rm -f [容器ID或容器名称]
# 删除多个容器
命令:docker rm -f $(docker ps -a -q)
第九步,访问appnode面板。
登录网址:http://x.x.x.x:8888/login
如果页面成功显示“APPNODE 轻松运维 从此开启”,则说明appnode面板安装成功并且docker网络端口映射成功。
利用原始账号:admin,原始密码:admin,登录appnode面板。
登录appnode面板之后,可以点击页面左上角“节点管理”,然后安装受控端,确保受控端在线以及实时监控CPU、内存、存储和网络。
登录appnode面板之后,点击左侧“应用列表”中的“软件管家”,然后点击“网站管理”的安装按钮,接着点击“立即安装”。
若结果显示“patch-2.7.1-12.el7_7.x86_64: [Errno 256] No more mirrors to try.”和“[Errno 14] HTTP Error 404 - Not Found”,则可以通过下面的方法来解决这个问题:
1)进入appnode容器。
命令:docker ps
docker exec -it [容器ID] /bin/bash
2)进入/etc目录,备份yum.repos.d。
cd /etc
mv yum.repos.d yum.repos.d.bak
3)下载上传新的yum.repos.d。
4)退出appnode容器。
5)重启docker服务。
6)登录appnode面板之后,重新下载网站管理。
若结果如下图所示,则说明网站管理安装成功。
进行docker网络端口映射rabbitmq容器
第一步,创建执行网络端口映射rabbitmq容器。
# 设置erlang发现端口为4368;设置amqp客户端端口为5672;设置http管理界面端口为15672;设置clustering服务端内部通信端口为25672。
命令:docker run -dit --restart=always \
--privileged=true \
--cap-add SYS_ADMIN \
-e container=docker \
--network bridge \
-p 4368:4368 \
-p 5672:5672 \
-p 15672:15672 \
-p 25672:25672 \
-v /data:/data \
--name rabbitmq \
rabbitmq:management
第二步,列出本地所有的镜像。
命令:docker images -a
第三步,列出当前所有正在运行的镜像。
命令:docker images
第四步,从docker中删除镜像。
命令:docker rmi [镜像ID或容器名称]
# 从docker中强制删除镜像
命令:docker rmi -f [镜像ID或容器名称]
# 通过docker images -p查询到的镜像ID来删除所有镜像
命令:docker rmi -f $(docker images -p)
第五步,列出所有的容器。
命令:docker ps -a
第六步,列出当前所有正在运行的容器。
命令:docker ps
第七步,强制停止容器。
命令:docker kill [容器ID或容器名称]
第八步,删除容器。
命令:docker rm [容器ID或容器名称]
# 从docker中强制删除容器
命令:docker rm -f [容器ID或容器名称]
# 删除多个容器
命令:docker rm -f $(docker ps -a -q)
Rabbitmq配置
第一步,进入rabbitmq容器。
命令:docker ps
docker exec -it [rabbitmq容器ID] /bin/bash
若结果显示下图所示,则表明尝试与正在重启的容器进行交互时发生了冲突,docker处于不可用的状态,因此,不能执行特定的操作。
可以通过下面的方法来解决这个问题:
1)运行命令“docker logs [rabbitmq容器ID]”来查看日志,会得知为什么容器会重启。
删除该容器,然后在重装容器时去掉“/usr/sbin/init”。
2)当重装容器后,运行命令“docker ps”查看状态,一旦状态变为“up”,就表示容器已经准备好了。
3)最后运行命令“docker exec -it [rabbitmq容器ID] /bin/bash”就可以成功进入容器。
第二步,添加其他用户。
因guest用户只能在本机访问,所以需要添加一个admin用户,密码设为123456。添加用户只能在Rabbitmq启动的状态下进行。
命令:rabbitmqctl add_user admin 123456
rabbitmqctl set_user_tags admin administrator
rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
# 修改密码
命令:rabbitmqctl change_password [用户名] [新密码]
# 删除用户
命令:rabbitmqctl delete_user [用户名]
# 查看用户清单
命令:rabbitmqctl list_users
第三步,开启管理权限。
命令:rabbitmq-plugins enable rabbitmq_management
第四步,在浏览器上访问rabbitmq网页。
访问:http://x.x.x.x:15672,可以使用(用户名:guest,密码:guest)登录,也可以使用(用户名:admin,密码:123456)登录。(IP地址是Rabbitmq所安装在的服务器的IP地址)
docker容器的ip分配规则
默认docker容器ip地址从172.17.0.1开始。
每开启一个容器就会在宿主机搭建一个网络桥接。
第一步,查看刚刚创建的容器对应的IP地址。
命令:docker inspect appnode
命令:docker inspect rabbitmq
可以发现appnode容器对应的IP地址是172.17.0.2,rabbitmq容器对应的IP地址是172.17.0.3。
第二步,容器内互通。
# 连接的appnode容器对rabbitmq容器进行ping,是否连接成功
命令:docker ps
docker exec -it [appnode容器ID] /bin/bash
ping 172.17.0.3
卸载docker
# 卸载docker
命令:systemctl stop docker
yum remove docker-ce docker-ce-cli containerd.io
# 删除安装包
命令:yum remove docker-ce
# 删除镜像、容器、配置文件等内容
命令:rm -rf /var/lib/docker
rm -rf /var/lib/containerd
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)