docker自定义镜像

docker自定义镜像

   
自定义一个docker镜像
docker commit
• 使用镜像启动容器,在该容器基础上修改
• 另存为另一个镜像
1 root@jacob ~]# docker run -itd centos bash
2 [root@jacob ~]# docker ps
3 [root@jacob ~]# docker exec -it IDs bash
修改(增删改数据、安装软件、修改配置文件等)
[root@jacob ~]# docker commit IDs name:label
[root@jacob ~]# docker images
Dockerfile
• Dockerfile语法格式
– FROM:基础镜像
– MAINTAINER:镜像创建者信息
– EXPOSE:开放的端口
– ENV:设置变量
– ADD:复制文件到镜像
– RUN:制作镜像时执行的命令,可以有多个
– WORKDIR:定义容器默认工作目录
– CMD:容器启动时执行的命令,仅可以有一条CMD
 
• 使用Dockerfile工作流程
– mkdir build; cd build
– vim Dockerfile
– docker build -t imagename Dockerfile
 
• Dockerfile文件案例
 
使用 Dockerfile 编排镜像
FROM centos
RUN  rm -f /etc/yum.repos.d/*.repo
ADD  local.repo /etc/yum.repos.d/local.repo
RUN  yum install net-tools vim-enhanced psmisc iproute -y
========================================
1 ]# mkdir /oo
2 ]# vim Dockerfile
3 .....
4 ]# cp /etc/yum.repo.d/local.repo  /oo       //local.repo必须与Dockerfile 中的local.repo命名一致。
编排命令
1 ]# docker  build  -t  myos:latest   .               //脚本快速创建镜像
 1 [root@jacob build]# cat Dockerfile
 2 FROM centos
 3 MAINTAINER Jacob redhat@163.com
 4 ENV NAME=Jacob
 5 ENV environment=test
 6 WORKDIR /var/www/html
 7 ADD test.sh /root/test.sh
 8 RUN mkdir /dockerfile
 9 RUN echo "test" > /dockerfile/file.txt
10 RUN yum -y install httpd
11 RUN echo "test" > /var/www/html/index.html
12 EXPORSE 80
13 CMD [“httpd", "-DFOREGROUND"]
 
自定义私有仓库
• 流程:
– docker pull registry
– vim /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd --insecure-registry=ip:5000
– systemctl daemon-reload
– systemctl restart docker
– docker run -id -p 5000:5000 registry
– docker tag 镜像 IP:5000/镜像:label
– docker push IP:5000/镜像:label
• 进入registry容器查看/etc/docker/registry/config.yml
 
存储卷
 
卷的概念
• docker容器不保持任何数据
• 重要数据请使用外部卷存储(数据持久化)
• 容器可以挂载真实机目录或共享存储为卷
 
主机卷的映射
• 将真实机目录挂载到容器中提供持久化存储
1 [root@jacob ~]# docker run -v /data:/data -it centos bash
共享存储
共享存储基本概念
• 一台共享存储服务器可以提供给所有Docker主机使用
• 共享存储服务器(NAS、SAN、DAS等)
• 如:
– 使用NFS创建共享存储服务器
– 客户端挂载NFS共享,并最终映射到容器中
 
使用共享存储的案例
 
• 服务器
– yum -y install nfs-utils
– vim /etc/exports
– systemctl start nfs
• Docker主机
– mount挂载共享
– 运行容器时,使用-v选项映射磁盘到容器中
 
 
1 物理机执行以下命令
1 sysctl  -w  net.ipv4.ip_forward=1 
查找物理机上网的网卡名称  enp2s0  ,通过  ifconfig 查找的
1 systemctl stop firewalld
2 iptables -t nat -I POSTROUTING  -s  192.168.4.0/24 -o enp2s0 -j MASQUERADE
查找物理机和虚拟机通讯的 ip 地址,通过 ifconfig    192.168.4.254
 
2  在虚拟机上执行
1 ip  route replace default via 192.168.4.254
2 ping 202.106.196.115 
问题 2,给容器配置 yum 源
查看宿主机的 yum 源配置
[rhel7]
name=rhel
baseurl=ftp://192.168.4.254/rhel7
enabled=1
gpgcheck=0
 
练习: 创建一个容器,配置 yum 源,并且安装  ifconfig 命令
 
自定义镜像 
1、创建一个容器 docker run -itd centos
2、进入容器进行修改配置  docker exec -it  容器id  bash
  停止容器,不是必须的
3、创建镜像并验证 docker  commit  容器id   镜像名称:标签
 
[root@docker01 ~]# docker commit 700eb6cbd327384 centos7:img01
使用 Dockerfile 编排镜像
FROM centos
RUN  rm -f /etc/yum.repos.d/*.repo
ADD  local.repo /etc/yum.repos.d/local.repo
RUN  yum install net-tools vim-enhanced psmisc iproute -y
 
编排命令
1 docker  build  -t  centos7:img01  .
2  
3 vim Dockerfile
4 FORM centos
5 RUN yum install -y openshh-server
6 RUN echo 11 | passwd --stdin root
7 RUN sshd-keygen
8 ENV EnvironmentFile=/etc/sysconfig/sshd
9 CMD ["/usr/sbin/sshd","-D"]
基于 myos 创建 httpd 的镜像
FROM myos
RUN  yum install -y httpd
ENV  EnvironmentFile=/etc/sysconfig/httpd
EXPOSE 80
CMD  ["/usr/sbin/httpd", "-DFOREGROUND"]
 
创建私有仓库
1  添加配置文件  /etc/docker/daemon.json
1 touch  /etc/docker/daemon.json
2 {
3   "insecure-registries" : ["192.168.4.10:5000"]
4 }
重启 docker 服务
1 systemctl restart docker
2 启动私有仓库
1 docker run -d -p 5000:5000 registry
3 测试上传镜像到私有仓库
3.1  标记一下哪个镜像要上传
docker  tag   busybox:latest   镜像服务器ip:5000/busybox:latest
3.2 上传镜像
docker  images
docker  push  镜像服务器ip:5000/busybox:latest
 
4 私有仓库的使用 
查看私有仓库里面的 镜像
http://192.168.4.10:5000/v2/_catalog
查看私有仓库里面镜像的标签
http://192.168.4.10:5000/v2/myos/tags/list
 
5 使用私有仓库运行容器
5.1  添加配置文件  /etc/docker/daemon.json
1 touch  /etc/docker/daemon.json
2 {
3   "insecure-registries" : ["192.168.4.10:5000"]
4 }
5.2 重启 docker 服务
1 systemctl  restart  docker
5.3 启动容器
1 docker run -itd 192.168.4.10:5000/myos:latest
2 docker run -itd 192.168.4.10:5000/myos:python 
容器的存储与端口映射
存储卷的映射
1 docker run -d  -v /var/webroot:/var/www/html   myos:httpd
扩展实验
目标:使用 nfs 共享,所有容器内的web 页面统一
配置启动一个 apache 的容器
配置 NFS 服务器,使用 docker  mount nfs ,利用卷映射到 容器
 
容器网络
查看 docker 网络配置
1 docker network list 
创建一个网桥 br0
1 docker network create --driver bridge br0 
删除一个网桥 br0
1 docker network rm br0
创建一个网桥
1 docker network create --driver bridge --subnet=192.168.1.0/24 br0
在新的网桥上创建容器
1 docker  run -it --network=br0  myos

posted on 2018-09-06 17:13  清风老道  阅读(209)  评论(0编辑  收藏  举报

导航