1.应用:单台物理机虚拟化 docker中装多台centos7,再使用centos7进行分布式集群部署
适合于测试环境,单节点使用虚拟分布式,最终实现ssh通信,简言之就是同VMware
注意就是ip的问题,当前使用桥接bridge模式,ip映射到宿主机器上时,只能以宿主机器去访问
操作笔记
1.安装
a.centos7要是64位的,uname -r
b.移出旧版本
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
c.安装一些必要的系统工具:
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
d.添加软件源信息:
sudo yum-config-manager –add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
e.安装 Docker-ce:(社区版免费)
sudo yum -y install docker-ce
f.启动 Docker 后台服务
sudo systemctl start docker
g.测试运行docker run hello-world
2.使用
概念:运行镜像cento每次会生成新的容器,容器对应的images即原imagesid,改名后可以直接启动该容器
docker
docker run hello-world
docker ps 查看正在运行的容器
docker ps -a 所有的
docker stop
docker port bf08b7f2cd89 #查看指定容器的端口
systemctl enable docker (service docker enable)(开机启动)
docker images (查看已有的镜像)
docker rmi images (删除镜像)
docker stop 1fa4ab2cf395 停掉某个容器 取id
docker inspect 11426a19f1a2 使用镜像id,查看镜像详细信息
docker stop $(docker ps -q) #停用全部运行中的容器
docker rm $(docker ps -aq) #删除全部容器
docker stop $(docker ps -q) & docker rm $(docker ps -aq) #一条命令实现停用并删除
docker tag httpd httpd:lamp 给httpd镜像加标签名lamp
docker rename 原容器名 新容器名 c重命名
docker tag c3b4dc0cfac7 mycentos:centos7 # 改名 docker tag IMAGEID(镜像id) REPOSITORY:TAG(仓库:标签)
docker run -itd 镜像 /bin/bash
docker exec -it 容器 /bin/bash
运行镜像做容器会生成新的id
创建容器给root权限:
docker run –privileged –cap-add SYS_ADMIN –name master -e container=docker -itd
–restart=always mycentos:centos7 /usr/sbin/init
进入容器:
docker exec -it master /bin/bash
端口映射说明:
0.0.0.0:32769->5000/tcp – Docker 开放了 5000 端口 映射到主机端口 32769 上 被映射主机名:端口
0.0.0.0:60003->22/tcp – Docker 开放了 22 端口 映射到主机端口 60003 上
3.容器的使用和Docker的登录
先创建三个文件,分别是:Dockerfile,requirements.txt,app.py
运行以下命令,创建一个Docker镜像(Docker image),并且加一个 -t 参数用于设置一个友好的命名
docker build -t friendlyhello .
运行你的应用,映射你电脑机器的4000端口到容器(Container)的80端口,使用参数 -p
docker run -p 4000:80 friendlyhello
访问: http://192.168.50.135:4000/
当然,你也可以使用 curl 来访问了,获取的是页面源码
curl http://localhost:4000
*加速器
新版的 Docker 在 /etc/docker/daemon.json
vi daemon.json
{
“registry-mirrors”:[“https://j0bdjvov.mirror.aliyuncs.com”]
}
http://hub-mirror.c.163.com #163的源也可以
4.如运行centos容器
a.如以 centos 为镜像创建的容器写入,然后输出,会输出 hello world
本地没有centos的话会从仓库下
[root@master home]# docker run centos /bin/echo “Hello world”
Hello world
b.我们通过docker的两个参数 -i -t,让docker运行的容器实现”对话”的能力
[root@master home]# docker run -i -t centos /bin/bash
[root@1ce644038223 /]#
输入docker ps 这个时候docker已经在运行了,exit或者ctrl+d退出容器
docker stop 1ce644038223 停止容器
c.容器后台模式
[root@master docker]# docker run -d centos /bin/sh -c “while true; do echo hello world; sleep 1; done”
112286c694066da8ddf613865c32fa88c6b5c8947c1928f35eddd58e3b7f5a55
docker ps
docker logs 2b1b7a428627
d.web应用
# docker pull training/webapp # 载入镜像
# docker run -d -P training/webapp python app.py
-d:让容器在后台运行。
-P:将容器内部使用的网络端口映射到我们使用的主机上。
docker ps
这里多了端口信息:
PORTS
0.0.0.0:32769->5000/tcp
Docker 开放了 5000 端口(默认 Python Flask 端口)映射到主机端口 32769 上
这时我们可以通过浏览器访问WEB应用 192.168.50.170:32769
我们也可以通过 -p 参数来设置不一样的端口:
# docker run -d -p 5000:5000 training/webapp python app.py
查看容器端口的映射情况:
docker port bf08b7f2cd89
输出: 5000/tcp -> 0.0.0.0:32768
f. 启动
docker start dockername
docker rm dockername
5.启动某个镜像来运行容器 #作参考
# docker run -t -i centos /bin/bash
# docker run -itd centos /bin/bash
进入容器 docker attach bce6d9a692b2
进入Docker容器比较常见的几种做法如下:
使用 docker attach (docker attach命令不太适合于生产环境,平时自己开发应用时可以使用该命令,窗口同步)
使用 SSH
使用 nsenter
使用 exec 建议
sudo docker exec -ti -u root 7509371edd48 bash
docker pull centos
这个命令是下载最新版本的CENTOS包
第二步:建立一个CENTOS的容器。
sudo docker run –privileged –cap-add SYS_ADMIN -e container=docker -it –name=master -p 80:8080 -d –restart=always centos:7 /usr/sbin/init
这个命令用来建立一个CENTOS的容器。因为我要在这个容器安装一个Tomcat,所以我做了一个端口映射,把80端口映射到容器的8080端口。
–privileged 指定容器是否是特权容器。这里开启特权模式。
–cap-add SYS_ADMIN 添加系统的权限。不然,系统很多功能都用不了的。
-e container=docker 设置容器的类型。
-it 启动互动模式。
/usr/sbin/init 初始容器里的CENTOS。
以上的参数是必需的。不然,建立的CENTOS容器不能正常使用和互动。
如果没有-it参数,容器会不停启动。
如果没有初始化和特权等等的开关,就不能使用systemctl。所以,以上的开关和设置是一样不能少的。
第三步:进入容器
docker exec -it master /bin/bash
6.centos默认没有ifconfig命令,配置ifconfig
启动sshd:
# /usr/sbin/sshd -D
这时候再试一下ssh localhost,发现错误改变:
ssh: connect to host localhost port 22: Cannot assign requested address
说明sshd服务还没有开启。用ps -ef也可以验证这一点。
由于是docker里面的centos,所以service和systemctl都不好用。
尝试手动运行/usr/sbin/sshd
报如下错误:
Could not load host key: /etc/ssh/ssh_host_rsa_key
Could not load host key: /etc/ssh/ssh_host_ecdsa_key
Could not load host key: /etc/ssh/ssh_host_ed25519_key
sshd: no hostkeys available — exiting.
手动执行/usr/sbin/sshd-keygen -A
再执行/usr/sbin/sshd成功。
执行ssh localhost
docker ps -a
7.如果安装3个centos
8.开始配置三台机之间准备搭建集群的环境
原文链接:https://blog.51cto.com/u_16099316/7486134