一基于 centos:latest 创建新的镜像, 新镜像已经配置好了 yum 并且安装了 net-tools
1基于 centos 起动容器
[root@vh01 docker_images]# docker run -it centos bash
2 在容器中配置 yum, 并安装 net-tools
- [root@798d29ec0d54 /]# rm -f /etc/yum.repos.d/*
- [root@798d29ec0d54 /]# vi /etc/yum.repos.d/server.repo
- [server]
- name=server
- baseurl=ftp://192.168.4.254/rhel7.2
- enabled=1
- gpgcheck=0
- [root@798d29ec0d54 /]# yum install -y net-tools
3 将容器 commit 成为镜像
- [root@vh01 docker_images]# docker commit 798d29ec0d54 mycentos
- [root@vh01 docker_images]# docker images
4 使用新镜像起动容器, 测试 yum 和 net-tools 是否可用
- [root@vh01 docker_images]# docker run -it mycentos bash
- [root@c492adb5fe6b /]# yum repolist
- [root@c492adb5fe6b /]# ifconfig
二通过 dockerfile 生成镜像
1创建工作目录
- [root@vh01 docker_images]# mkdir -p ~/mydocker/build1
- [root@vh01 docker_images]# cd ~/mydocker/build1
2 编写 Dockerfile
- [root@vh01 build1]# vim Dockerfile
- FROM centos:latest
- CMD ["/bin/echo", "Hello tedu"]
3 生成镜像
[root@vh01 build1]# docker build -t mytest:latest .
4 测试
- [root@vh01 build1]# docker run -it mytest
- [root@vh01 build1]# docker ps
注意: 容器输入 hello tedu 后就退出了, 因为它的使命已经结束
三生成镜像
1创建工作目录
- [root@vh01 build1]# mkdir ~/mydocker/build2
- [root@vh01 build1]# cd ~/mydocker/build2
2 编写 Dockerfile
- [root@vh01 build2]# vim Dockerfile
- FROM mycentos:latest
- MAINTAINER zzg zzg@tedu.cn
- WORKDIR /var/www/html
- ADD mytest.sh /root/mytest.sh
- RUN yum install -y httpd
- RUN yum install -y php
- RUN yum install -y php-mysql
- EXPOSE 80
- CMD ["httpd", "-DFOREGROUND"]
3 生成镜像
- [root@vh01 build2]# echo pwd > mytest.sh
- [root@vh01 build2]# docker build -t centos:http .
4 验证
[root@vh01 build2]# docker run -P -itd centos:http
四生成镜像的建议
1每个容器只运行一个进程
2不要假定你的容器可以一直处于运行状态, 它们只是临时的, 很有可能被停止
3使用. dockerignore 文件排除不想加入到镜像中的文件
4使用官方提供的镜像, 而不是自己头0制作
5尽量减少镜像的层次
基于镜像起动多个容器
[root@vh01 build3]# for i in {1..5}; do docker run -P -h web$i --name web$i -itd centos:apache; done
练习:
基于 centos, 生成 mysql 镜像
- [root@vh01 mydocker]# cp -r build3 build4
- [root@vh01 mydocker]# cd build4
- [root@vh01 build4]# vim Dockerfile
- FROM mycentos:latest
- MAINTAINER zzg zzg@tedu.cn
- RUN yum install -y mariadb-server; mysql_install_db; chown -R mysql:mysql /var/lib/mysql
- EXPOSE 3306
- CMD ["mysqld_safe"]
- [root@vh01 build4]# docker build -t centos:mysql .
- [root@vh01 build4]# docker run -P -itd centos:mysql
- [root@vh01 build4]# docker exec -it f1ee bash
- [root@f1ee66ccc591 /]# mysql -uroot
将 vh01 设置成为 docker 仓库服务器
1下载仓库镜像
[root@vh01 docker_images]# docker load < registry.tar
2修改 docker 服务, 可以使用本地仓库
- [root@vh01 docker_images]# vim /usr/lib/systemd/system/docker.service
- ExecStart=/usr/bin/dockerd --insecure-registry=192.168.4.1:5000
- [root@vh01 docker_images]# systemctl daemon-reload
- [root@vh01 docker_images]# systemctl restart docker
3 导入的 registry 镜像没有名称, 为其添加名字
[root@vh01 docker_images]# docker tag c9bd19d022f6 registry
4后台起动 registry
[root@vh01 docker_images]# docker run -id -p 5000:5000 registry
5 镜像名称格式是: 仓库名 / 镜像名 才能上传
- [root@vh01 docker_images]# docker tag centos:apache 192.168.4.1:5000/centos:apache
- [root@vh01 docker_images]# docker images
6 上传镜像到仓库
[root@vh01 docker_images]# docker push 192.168.4.1:5000/centos:apache
准备虚拟机 vh02, 使期可以使用 docker 仓库
1 初始化 vh02
vh02.tedu.cn 192.168.4.2/24 selinux firewalld yum
2 在 vh02 上安装 docker, 并设置其可以使用 vh01 提供的仓库
- [root@vh01 docker]# scp rpm 192.168.4.2:/root
- [root@vh02 ~]# yum install -y rpm
- [root@vh02 ~]# vim /usr/lib/systemd/system/docker.service
- ExecStart=/usr/bin/dockerd --insecure-registry=192.168.4.1:5000
- [root@vh02 ~]# systemctl daemon-reload
- [root@vh02 ~]# systemctl start docker
- [root@vh02 ~]# systemctl enable docker
3 下载 192.168.4.1 的镜像
[root@vh02 ~]# docker pull 192.168.4.1:5000/centos:apache
4 验证
- [root@vh02 ~]# docker run -id 192.168.4.1:5000/centos:apache
- [root@vh02 ~]# docker ps
持久化存储
1不要在容器里存放重要数据, 应该将数据存储在宿主机上
- [root@vh02 ~]# docker run -idt -P --name web1 -v /webroot/web1:/var/www/html 192.168.4.1:5000/centos:apache
- [root@vh02 ~]# echo <h1>my test</h1> > /webroot/web1/index.html
2 查看容器的端口号
[root@vh02 ~]# docker ps
3 访问容器的 http 服务
配置存储服务器, vh01 和 vh02 上的容器存储的数据将存放在 vh03 上
1准备 vh03
vh03.tedu.cn 192.168.4.3 selinux firewalld yum
2 创建 nfs 共享目录
[root@vh03 ~]# mkdir -m 777 /nfsroot
3 安装 nfs 服务
[root@vh03 ~]# yum install -y nfs-utils
4 配置共享声明
- [root@vh03 ~]# vim /etc/exports
- /nfsroot 192.168.4.*(rw,sync)
5 起动服务
[root@vh03 ~]# systemctl restart nfs-server.service
6 查看输出列表
[root@vh03 ~]# showmount -e 192.168.4.3
7 在 vh01 和 vh02 上将共享目录永久挂载到 / dockdir
- [root@vh01 docker]# mkdir /dockdir
- [root@vh01 docker]# tail -1 /etc/fstab
- 192.168.4.3:/nfsroot /dockdir nfs defaults 0 0
- [root@vh01 docker]# mount -a
8 起动容器, 将容器的卷对应到 nfs 共享中
- [root@vh01 docker]# docker run -idt -P -v /dockdir/vh01/web1:/var/www/html 192.168.4.1:5000/centos:apache
- [root@vh02 ~]# docker run -idt -P -v /dockdir/vh02/web1:/var/www/html 192.168.4.1:5000/centos:apache
创建自定义网络
1创建名为 test02 的网络, ip 地址使用 172.30.0.0/24
docker network create --subnet=172.30.0.0/16 test02
2 起动容器, 指定连接的网桥是 test02
docker run --network=test02 -idt 192.168.4.1:5000/centos:apache
docker inspect < 容器 id>
来源: http://www.bubuko.com/infodetail-2524645.html