实验
容器的编排compose能同时制作多个dockerfile 并且让他们运行起来
主要是验证yaml文件的初体验
compose实验
实验环境:
docker ps -a ##清空
docker images ##清空
iptables -F ##清空防火墙策略
setenforce 0 ##关闭核心防护
#安装docker
vim docker.sh
#!/bin/bash
yum -y install yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum -y install docker-ce
systemctl start docker.service
systemctl enable docker.service
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://7lkjwk2y.mirror.aliyuncs.com"]
}
EOF
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p
systemctl restart network
systemctl reload network
systemctl restart docker
一、将所需要的软件docker-compose放在/root目录下
chmod +x docker-compose ##给软件一个执行的权限
mv docker-compose /usr/local/bin ##为了便于系统识别
mkdir compose_nginx ##创建一个单独的镜像目录便于管理
cd compose_nginx
mkdir nginx ##在创建一个nginx镜像专属的目录
cd nginx
二、将nginx需要的包传到nginx目录 然后在写制作镜像为文件和启动脚本
[root@localhost nginx]# vim Dockerfile
FROM centos:7
MAINTAINER this is nginx image <lai>
RUN yum -y update
RUN yum -y install pcre-devel zlib-devel gcc gcc-c++ make
RUN useradd -M -s /sbin/nologin nginx
ADD nginx-1.15.9.tar.gz /usr/local/src
WORKDIR /usr/local/src
WORKDIR nginx-1.15.9
RUN ./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module && make && make install
ENV PATH /usr/local/nginx/sbin:$PATH
EXPOSE 80
EXPOSE 443
RUN echo "daemon off;">>/usr/local/nginx/conf/nginx.conf
ADD run.sh /run.sh
RUN chmod 755 /run.sh
CMD ["/run.sh"]
[root@localhost nginx]# vim run.sh
#!/bin/bash
/usr/local/nginx/sbin/nginx
[root@localhost nginx]# ls
Dockerfile nginx-1.15.9.tar.gz run.sh
三、设置yml的配置
[root@localhost nginx]# cd ..
[root@localhost compose_nginx]# vim docker-compose.yml
version: '3' ##我们用的版本信息是3,符号用单引号
services: ##服务:你提供的服务也可以是多个
nginx: ##第一个服务nginx
hostname: nginx ##你的主机名称
build: ##构建
context: ./nginx ##你的镜像内容存放位置为
dockerfile: Dockerfile ##读取你的制作镜像为文件
ports: ##构建端口映射
- 1216:80 ##内端口为1216映射到80端口
- 1217:443 ##在建一个https的端口映射
networks: ##网络
- abc ##这个网络名称可以自定义
volumes: ##写一个数据卷
- ./wwwroot:/usr/local/nginx/html
##把当前目录中的wwwroot挂载到站点(目录容器的)相当设备wwwroot挂载到容器中的/usr/local/nginx/html下面
##networks: ##声明你的网络信息
## abc:
##查看一下需要的文件全部全
[root@localhost compose_nginx]# ls
docker-compose.yml nginx
##执行制作镜像的过程
docker-compose -f docker-compose.yml up -d
##制作好后会出现
Successfully built 50bee1ad2f57
Successfully tagged compose_nginx_nginx:latest
docker images ##查看会出现两个镜像一个容器
REPOSITORY TAG IMAGE ID CREATED SIZE
compose_nginx_nginx latest 50bee1ad2f57 About a minute ago 481MB
centos 7 7e6257c9f8d8 3 months ago 203MB
[root@localhost compose_nginx]# ls ##这时会多出来一个目录
docker-compose.yml nginx wwwroot
##可以在文件中写一文件然后可以直接去网页上看到有内容并且进入容器后也能看到相关内容
cd wwwroot/
[root@localhost wwwroot]# vim index.html 若没有填加内容去网页看会出现403
<h1>this is test web</h>
#去网页看看
20.0.0.9:1217
##然后去你的容器中也能看到相关的信息
docker exec -it 1e7312eb8b3e /bin/bash
cd /usr/local/nginx/html
[root@nginx html]# cat index.html ##会有刚才你写的内容
<h1>this is test web</h>
四、查看是否分网段了
这时候还可以看到一个功能就是IP地址
yum -y install net-tools ##使ifconfig能用
ifconfig ##能发现有两个IP地址
[root@nginx nginx-1.15.9]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.18.0.2 netmask 255.255.0.0 broadcast 172.18.255.255
ether 02:42:ac:12:00:02 txqueuelen 0 (Ethernet)
RX packets 137 bytes 322788 (315.2 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 118 bytes 7580 (7.4 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
loop txqueuelen 1 (Local Loopback)
RX packets 4 bytes 304 (304.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 4 bytes 304 (304.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
exit ##当你退回到宿主机的时候也能看到容器内的IP地址
[root@localhost ~]# ifconfig
br-05554d6dbab8: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.18.0.1 netmask 255.255.0.0 broadcast 172.18.255.255
inet6 fe80::42:f5ff:fe94:bccc prefixlen 64 scopeid 0x20<link>
ether 02:42:f5:94:bc:cc txqueuelen 0 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
docker0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255
inet6 fe80::42:e3ff:fe6c:959e prefixlen 64 scopeid 0x20<link>
ether 02:42:e3:6c:95:9e txqueuelen 0 (Ethernet)
RX packets 64977 bytes 3274765 (3.1 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 83512 bytes 632057677 (602.7 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
##这是因为在里面中从新划分了一个网络空间。相当于有了一个子网段,也就是相当于而成交换机划分了vlan就是命名空间 其实它的全网段是172.0.0.0其中也能划分其他的网段比如172.17.0.1以及172.18.0.1等 通过这个可以实现容器之间的隔离,保证容器的安全性
关键段
version: ‘3’ ##我们用的版本信息是3,符号用单引号
services: ##服务:你提供的服务也可以是多个
nginx: ##第一个服务nginx
hostname: nginx ##你的主机名称
build: ##构建
context: ./nginx ##你的镜像内容存放位置为
dockerfile: Dockerfile ##读取你的制作镜像为文件
ports: ##构建端口映射
- 1216:80 ##内端口为1216映射到80端口
- 1217:443 ##在建一个https的端口映射
networks: ##网络
- abc ##这个网络名称可以自定义
volumes: ##写一个数据卷
- ./wwwroot:/usr/local/nginx/html
##把当前目录中的wwwroot挂载到站点(目录容器的)相当设备wwwroot挂载到容器中的/usr/local/nginx/html下面
##networks: ##声明你的网络信息