Docker网络
跨主机间的容器访问
Ø 使用自定义网桥连接跨主机容器
N/A,待写
Ø 使用Ambassador实现跨主机容器
N/A, 待写
Ø kubernetes
N/A, 待写
数据管理
Ø 把物理机的目录挂载到容器里
以交互模式启动一个容器,将物理机的/src/webapp挂载到/opt/webapp下
#sudodocker run -t -i -v /src/webapp:/opt/webappubuntu:14.04 /bin/bash
参数解释
-v 物理机目录:容器目录:读写权限
其中默认的权限为可读写, ro:只读
Ø 把物理机的文件挂载到容器里
#sudo dockerrun -t -i -v/src/webapp/test.html:/opt/webapp/test.html ubuntu:14.04 /bin/bash
Ø 把容器挂载到另外一个容器
#sudo docker create -v /dbdata --name dbdata ubuntu:14.04 //创建容器
#sudodocker run -it --volumes-from dbdata ubuntu:12.04 /bin/bash //启动容器卷来自dbdata
参数解释
-volumn-from:卷来自哪个容器
Ø 把容器挂载作为数据备份
#sudo docker run --volumes-from dbdata -v $(pwd):/backup--name worker ubuntu tar cvf /backup/backup.tar /dbdata
命令解释
首先利用ubuntu镜像创建一个容器worker.使用—volumes-from dbdata参数来让容器挂载dbdata容器的数据卷;使用 –v $(pwd):/backup参数来挂载本机的当前目录到worker容器的/backup目录
Woker容器启动后,执行tar命令将/dbdata压缩到/backup/backup.tar,这样就到物理机的当前目录了
Ø 把容器挂载作为数据迁移
#sudo docker run -v/dbdata --name dbdata2 ubuntu /bin/bash
#sudo docker run--volumes-from dbdata2 -v $(pwd):/backup busybox tar xvf /backup/.tar
挂载到某个容器
#sudo docker attach 容器ID
显示运行容器的进程信息
#sudo docker top 容器ID
从容器内部拷贝文件到物理机
#sudo docker cp cd0f61fb8256:/opt/a.html /
列出容器里被改变的文件夹或文件
#sudo docker diff 容器ID
列表解释
list列表会显示出三种事件,A 增加的,D 删除的,C 被改变的
Docker镜像相关命令
镜像查看
#sudo docker images //在本机进行镜像查看
#sudo docker inspect 镜像ID //查看单个镜像的具体信息,以JSON格式返回
获取镜像
# sudo docker pull centos //从DockerHub获取镜像
查询镜像
#sudo docker search 镜像名称 //从DockerHub按照镜像名称模拟查询镜像
制作镜像
ü 通过Dockerfile构建镜像
#sudo cd / //来到根“/”下
#sudo mkdir redis //创建redis文件夹
#touch Dockerfile //创建Dockerfile文件,文件内容见如下灰色部分
FROM ubuntu:14.04
RUN apt-get update && apt-getinstall -y redis-server
EXPOSE 6379
ENTRYPOINT ["/usr/bin/redis-server"]
#sudo docker build -t ningyougang/redis . //通过dockerbuild制作镜像
参数解释
-t:tag名称
.:当前Dockerfile的路径,在此处表示当前文件夹下
ü 对运行着的容器commit镜像
# sudo docker commit -m "Added json gem" -a"Kate Smith" 0b2616b0e5a8 ouruser/sinatra:v2
参数解释
-m:提交注释,如此处你加了什么特别的功能
-a:作者
0b2616b0e5a8:运行着的容器ID
ouruser/sinatra:v2:给当前提交的镜像起名字并打标签
备注:从上面可以看出,我们可以通过dockercommit来创建镜像,但是这种方式有点凌乱而且很难复制,更好的方式是通过Dockerfile来构建镜像,因为它步骤清晰并且容易复制
给镜像打标签
#sudo docker tag 5db5f8471261 ouruser/sinatra:devel //当commit or build后,对镜像打标签
参数解释
5db5f8471261:此处的id为镜像ID
备注:向私有仓库push镜像也要打标签
推送镜像到公共库DockerHub
#sudo docker push ouruser/sinatra
下面介绍下DockerHub
DockerHub是存放镜像的远程仓库,这里简单介绍下,如何使用
Ø 注册
Ø 登录
帐号注册成功后,在https://hub.docker.com/account/login/,即可登录
除了通过登录页面,您也可以通过命令行,通过指令sudo docker login登录
Ø 查询镜像
点击“Browse Repos”(或输入https://registry.hub.docker.com/),进入镜像查询页面
在此页面,您可以录入你感兴趣的镜像名称,进行模糊查询
当然你也可以通过docker search XXX进行镜像查询
Ø 使用Docker帐号绑定GitHub帐号,进行自动化构建
需要细化,没有来得及研究
推送镜像到私有库
ü 下载私有仓库镜像
# docker pull registry #从DockerHub下载registry镜像,里面含私库的运行环境,#当然你也可以自己下载源码包,自己安装
ü 推送之前打tag
# docker tag 704ca5ad68c5 192.168.202.213:5000/newtouch/activemq #打标签(必须先打标签,#在推送)
该命令格式为:docker tag $ID $IP:$port/$name。push到私库上必须先打个tag,而tag名称的格式为:$IP:$port/$name, 个人感觉此处设计不太好或我自己没有找到更好的办法。如果设计良好应该可以直接push,不用打标签.
ü Push tag到镜像
#docker push 192.168.202.213:5000/newtouch/activemq #将此tag推送到私有库
ü Push到仓库后,远程查看
#curl http://192.168.202.213:5000/v1/search #push之后,远程查看
ü 在另外一个docker客户端,从私有仓库下载
#docker pull 192.168.202.213:5000/newtouch/activemq
Docker tag报https错误问题解决:
vi /etc/default/docker #红色部分是添加的部分,重启docker服务
# Docker Upstart and SysVinitconfiguration file
# Customize location of Dockerbinary (especially for development testing).
#DOCKER="/usr/local/bin/docker"
# Use DOCKER_OPTS to modify thedaemon startup options.
#DOCKER_OPTS="--dns8.8.8.8 --dns 8.8.4.4"
DOCKER_OPTS="--insecure-registry 192.168.202.213:5000"
# If you need Docker to use anHTTP proxy, it can also be specified here.
#exporthttp_proxy="http://127.0.0.1:3128/"
# This is also a handy place totweak where Docker's temporary files go.
#exportTMPDIR="/mnt/bigdrive/docker-tmp"
删除镜像
#sudo docker rmi 镜像ID
列出镜像的变更历史
# docker history
Docker运维相关命令
在物理机下查看有哪些容器
$ sudo docker ps //查看有那些正在运行着的容器
参数解释
-l:最近的一个容器,有可能没有运行
-a:查看所有的容器,包含运行和没有运行的容器
实时打印所有容器的系统事件
#sudo docker events