经过上一篇【Docker篇一】了解到Docker的三大核心概念:镜像、容器、仓库,以及镜像下载上传导入和导出操做,容器的建立以及启动,导入和导出。
本篇将从以下三个方面详解如何灵活的构建本身的容器,实现这些容器中数据的迁移,以及怎么样实现从网络中访问容器中的数据。html
命令格式:docker commit [选项] 容器ID/名称 仓库名称[标签] 经常使用选项: -m:说明信息 -a:做者信息 -p:生成过程当中中止容器的运行
docker images
docker create -it 11426a19f1a2 /bin/bash
docker ps -a
docker start 4212c3d37718
docker commit -m "new" -a "test" 4212c3d37718 httpd:testweb
wget http://download.openvz.org/template/precreated/debian-7.0-x86-minimal.tar.gz
cat debian-7.0-x86-minimal.tar.gz | docker import - zhangsan:newdocker
基础镜像信息
维护者信息
镜像操做指令
容器启动时执行指令apache
如上图所示,编写Dockerfile时,有严格的格式须要遵循,第一行必须是FROM指令说明所基于的镜像名称,以后使用MAINTAINER指令说明维护该镜像的用户信息,而后是镜像操做相关指令,如RUN,每运行一条指令,都会给基础镜像添加新的一层,最后使用CMD指令,来指定启动容器时要运行的命令操做。json
mkdir apache
cd apach
vim Dockerfile //注意名称必须是Dockerfilevim
#基于的基础镜像,若本地没有就会自动下载 FROM centos #维护镜像的用户信息 MAINTAINER The porject <cloud-ops@centos.org> #镜像操做指令安装apache软件 RUN yum -y update //初始化yum仓库 RUN yum -y install httpd #开启 80 端口 EXPOSE 80 #复制网站首页文件,将本地与Dockerfile同级目录下的index.html文件放入容器对应路径下,需手动建立 ADD index.html /var/www/html/index.html #将执行脚本复制到镜像中,此脚本为启动服务脚本,不存在,须要本身建立 ADD run.sh /run.sh RUN chmod 755 /run.sh #启动容器时执行脚本 CMD ["/run.sh"]
echo "NEVER SAY NEVER !" > index.htmlcentos
vim run.sh缓存
#!/bin/bash rm -rf /run/httpd/* //初始化容器httpd服务,清楚缓存 exec /usr/sbin/apachectl -D FOREGROUND //启动容器中httpd服务
docker build -t httpd:centos . //注意末尾有"."bash
docker run -d -p 1216:80 httpd:centos //镜像名称与标签同在生成镜像时设定服务器
WARNING:IPv4 forwarding is disabled.Networking will not work.
sysctl -w net.ipv4.ip_forward=1
当使用docker push命令上传时,默认上传到官方公共仓库,对于一些公共仓库里面的镜像没法了解详细状况下,咱们们须要创建私有仓库,方便咱们选择更加合适本身的容器镜像。
docker pull registry
Using default tag: latest latest: Pulling from library/registry 4064ffdc82fe: Pull complete c12c92d1c5a2: Pull complete 4fbc9b6835cc: Pull complete 765973b0f65f: Pull complete 3968771a7c3a: Pull complete Digest: sha256:51bb55f23ef7e25ac9b8313b139a8dd45baa832943c8ad8f7da2ddad6355b3c8 Status: Downloaded newer image for registry:latest
vim /etc/docker/deamon.json
{ "insecure-registries":["192.168.144.111:5000"]} //指定私有仓库地址和端口号
systemctl status docker.service
docker create -it registry /bin/bash //为registry镜像建立容器
docker ps -a
docker start a1a68e5b9b6f //启动registry镜像容器
docker run -d -p 5000:5000 -v /data/registry:/tmp/registry registry
docker tag zhangsan:new 192.168.144.111:5000/zhangsan
docker push 192.168.144.111:5000/zhangsan
curl -XGET http://192.168.144.111:5000/v2/_catalog
为了方便查看容器内产生的数据或者将多个容器中的数据实现共享,就涉及到容器的数据管理操做,管理Docker容器中数据主要有两种方式,数据卷和数据卷容器。
在docker run 命令中使用-v选项能够在容器内建立数据,屡次使用,可建立多个数据卷,使用--name选项能够给容器建立一个友好的自定义名称。
docker run -v /var/www:/data1 --name web1 -it centos /bin/bash
[root@202dd484fd62 /]# cd /data1/
[root@202dd484fd62 data1]# touch test123
[root@localhost ~]# ls /var/www/
若是须要在容器之间共享一些数据,最简单的方法就是使用数据卷容器,数据卷容器就是一个普通的容器,专门提供数据卷给其余容器挂载使用,使用方法以下:
首先须要建立一个容器做为数据卷容器,以后在其余容器建立使用时用--volumes-from挂载数据卷容器中的数据卷使用。
docker run --name web100 -v /data1 -v /data2 -it centos /bin/bash
docker run -it --volumes-from web100 --name db1 centos /bin/bash
docker run -d -P httpd:centos
docker run -d -p 49280:80 httpd:centos
docker ps -a
6d461287c25d httpd:centos "/run.sh" 7 seconds ago Up 7 seconds 0.0.0.0:49280->80/tcp zen_swanson
docker run -P --name web1 -it httpd:centos /bin/bash
docker run -P --name web2 --link web1:web1 -it httpd:centos /bin/bash