Docker镜像及仓库;持久化储存;Docker网络架构

一、自定义镜像
1. docker commit
• 使用镜像启动容器,在该容器基础上修改
• 另存为另一个镜像
a.启动一个容器 
[root@docker01 ~]# docker run -it centos /bin/bash

b.自定义yum源
[root@953cae78d957 /]# cd  /etc/yum.repos.d/
[root@953cae78d957 yum.repos.d]# rm -rf *
[root@953cae78d957 yum.repos.d]# cat default.repo
[centos]
name=centos7
baseurl=ftp://192.168.5.254/mmp
enabled=1
gpgcheck=0

c.装相关的自定义包
[root@953cae78d957 yum.repos.d]# yum -y install net-tools psmisc vim

d.最重要的一步另存为一个镜像
[root@docker01 ~]# docker commit   953cae78d957(这里是此容器ID号)  myos:latest

[root@docker01 ~]# docker images    //可以看到我们刚刚上传的镜像
REPOSITORY      TAG           IMAGE ID          CREATED             SIZE
myos          latest     26d33239d021        About a minute ago   362.9 MB

2.Dockerfile
a.Dockerfile语法格式
– FROM:基础镜像
– MAINTAINER:镜像创建者信息
– EXPOSE:开放的端口
– ENV:设置变量
– ADD:复制文件到镜像
– RUN:制作镜像时执行的命令,可以有多个
– WORKDIR:定义容器默认工作目录
– CMD:容器启动时执行的命令,仅可以有一条CMD

b.• 使用Dockerfile工作流程
– mkdir build; cd build
– vim Dockerfile
– docker build -t imagename Dockerfile

c.编写自定义的centos
[root@docker01 ~]# mkdir mycentos 
[root@docker01 ~]# cd mycentos

[root@docker01 mycentos]# cp /etc/yum.repos.d/CentOS-Base.repo  ./     //ADD上传的东西必须在当前路径

[root@docker01 mycentos]# vim Dockerfile   //编写Dockerfile 文件
FROM centos:latest
RUN  rm -f /etc/yum.repos.d/*
ADD  CentOS-Base.repo  /etc/yum.repos.d/local.repo
RUN  yum install -y net-tools psmisc vim

[root@docker01 mycentos]# docker build -t  mycentos:latest  .      //这里的 .  表示Dockerfile在当前路径

扫描二维码关注公众号,回复: 3763753 查看本文章

d.编写一个python交互的镜像

[root@docker01 mypython]# docker build -t mypython:latest .

[root@docker01 ~]# mkdir mypython
[root@docker01 ~]# cd mypython
[root@docker01 mypython]# vim Dockerfile 
FROM myos:latest
CMD ["/usr/bin/python"]

[root@docker01 mypython]# docker images

e.编写一个apache的应用封装镜像
[root@docker01 ~]# mkdir httpd 
[root@docker01 ~]# cd httpd

[root@docker01 httpd]# docker run -it myos:latest /bin/bash 
[root@b2008cc4f597 /]# yum -y install httpd

[root@b2008cc4f597 /]# rpm -ql httpd | grep  service
/usr/lib/systemd/system/httpd.service

[root@b2008cc4f597 /]# cat /usr/lib/systemd/system/httpd.service
[Service]
Type=notify
EnvironmentFile=/etc/sysconfig/httpd
ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND      //这里可以找到apache的启动方式


下面就可以编写Dockerfile文件了
FROM myos
RUN  yum install -y httpd
WORKDIR /var/www/html
RUN  echo "hello nsd1804" >index.html
ENV  EnvironmentFile=/etc/sysconfig/httpd
EXPOSE 80
CMD  ["/usr/sbin/httpd", "-DFOREGROUND"]

[root@docker01 httpd]# docker build -t myos:apache . 
Successfully built b77a51866834

[root@docker01 httpd]# docker images


3.自定义镜像仓库
a.修改配置文件
 vim /etc/docker/daemon.json
{
  "insecure-registries" : ["192.168.5.1:5000"]
}

b.重启服务
systemctl restart docker

c.启动私有仓库服务
docker run -d -p 5000:5000 registry

d.打标记
[root@docker02 docker]# docker tag busybox:latest 192.168.5.1:5000/busybox:latest 
[root@docker02 docker]# docker tag centos:latest 192.168.5.1:5000/centos:latest 

e.上传
[root@docker02 docker]# docker push  192.168.5.1:5000/busybox:latest
[root@docker02 docker]# docker push  192.168.5.1:5000/centos:latest

f.另外一台docker访问
查看私有仓库有什么样的镜像
curl http://192.168.1.11:5000/v2/_catalog

查看私有仓库的镜像有什么样的标签
curl http://192.168.1.11:5000/v2/myos/tags/list


二、数据持久化
卷的概念
• docker容器不保持任何数据
• 重要数据请使用外部卷存储(数据持久化)
• 容器可以挂载真实机目录或共享存储为卷

1. 主机卷的映射
• 将真实机目录挂载到容器中提供持久化存储
[root@docker01 ~]# mkdir /data        //创建共享目录
[root@docker01 ~]# docker run -v /data:/usr/share/html    -it  nginx  /bin/bash

root@6b6a0784e399:/# cd /usr/share/html/
root@6b6a0784e399:/usr/share/html# echo haha > index.html 

到真实机可以看到我们创建的首页
[root@docker01 ~]# cd /data/
[root@docker01 data]# ls
index.html
[root@docker01 data]# cat index.html 
haha

2.共享存储
共享存储基本概念
• 一台共享存储服务器可以提供给所有Docker主机使用
• 共享存储服务器(NAS、SAN、DAS等)
• 如:
– 使用NFS创建共享存储服务器
– 客户端挂载NFS共享,并最终映射到容器中

a.搭建一台nfs文件共享服务器供docker集群使用(192.168.5.3)
[root@nfs ~]# yum -y install nfs-utils 
[root@nfs ~]# mkdir /public
[root@nfs ~]# vim /etc/exports 
/public  192.168.5.0/24(rw,no_root_squash)

b.客户端挂载使用
[root@docker01 ~]#  yum -y install nfs-utils

root@docker01 ~]# vim /etc/fstab
192.168.5.3:/public  /mnt/  nfs  _netdev  0  0

root@docker01 ~]# mount -a 

测试
[root@docker01 httpd]# docker run -v /mnt:/var/www/html -it cenos:apache /bin/bash
[root@cce15a381b1f /]# cd /var/www/html 
[root@cce15a381b1f html]# echo test > index.html

[root@docker01 httpd]# cd /mnt/
[root@docker01 mnt]# ls
index.html


三、Linux网桥
1.创建虚拟交换机
docker network create --driver=bridge --subnet 192.168.100.0/24 docker1

docker network ls   //可以看到我们新创建的网桥


[root@docker01 httpd]# docker run -it   --network=docker1 centos   //使用新建的网桥

[root@25a4fec68078 /]# ping 192.168.100.2     //在同一个交换机上可以通
PING 192.168.100.2 (192.168.100.2) 56(84) bytes of data.
64 bytes from 192.168.100.2: icmp_seq=1 ttl=64 time=0.191 ms
^C


[root@25a4fec68078 /]# ping 172.17.0.3     //不同的交换机是不通的达到个隔离的效果
PING 172.17.0.3 (172.17.0.3) 56(84) bytes of data.


2.端口复用
docker run -d -p 80:80 -v  /mnt:/var/www/html centos:apache 


 

猜你喜欢

转载自blog.csdn.net/majiangNB/article/details/81947806