(1)Docker仓库
(2)数据管理
(3)网络配置
(4)Dockerfile命令解释
Docker仓库
仓库是集中存放镜像的地方。
仓库又分为公有仓库和私有仓库。
公有仓库---->Docker官方维护
私有仓库:下面演示如何搭建。
下载基础仓库:
[root@zxq ~] docker pull registry
启动仓库镜像:
[root@zxq ~] docker run -d -p 5000:5000 -v /opt/data/registry:/tmp/registry registry默认会将仓库创建在registry容器的/tmp/registry 目录下面,-v 参数为指定仓库存放的目录
数据仓库建立在/tmp/registry目录下,在本地启动私有仓库服务,监听端口为5000上传本地镜像到 registry 仓库中
首先将本地镜像标签修改:
docekr tag [本地镜像名:image标签] [ip地址:端口号]/[镜像名]:[标签名] //不改标签名默认为latest一、vim /etc/docker/daemon.json { "insecure-registries":["192.168.1.17:5000"] }二、systemctl restart docker //重启docker三、docker run -d -p 5000:5000 registry //启动仓库四、docker push 192.168.1.17:5000/centos:latest //上传本地镜像查询本地仓库中的镜像:
[root@zxq ~] curl -X GET http://192.168.1.17:5000/v2/_catalog //{"repositories":["centos"]}
浏览器:http://192.168.1.17:5000/v2/_catalog
从本地仓库下载镜像:
[root@zxq ~] docker pull 192.168.1.17:5000/centos数据管理
数据卷为独立的,可以在系统与容器,容器与容器之间共享。
docker run -v //-v 参数是在容器内创建一个数据卷,可创建多个数据卷 多个-v参数建立数据卷:
docker run -d -P --name web -v /webapp docker.io/centos:latest 当使用 -P 标记时,Docker 会随机映射本地一个 49000~49900 的端口到内部容器开放的5000端口。 后台运行docker镜像,将docker镜像中的/webapp目录作为数据卷,如果此目录不存在会自动创建 --name参数用docker ps -a 能看到起的名字, Exited 表示此镜像已退出 docker run -it-P --name web -v /webapp docker.io/centos:latest 加了-P参数不会一直保留这个进程,因为端口不是永久的 docker run -it -v /data:/webapp docker.io/centos /bin/bash 将本机的/data 作为数据卷 共享给容器的/webapp 目录 加载本地的目录/data作为数据卷,到容器/webapp中 docker run -d -P --name web3 -v /data:/webapp docker.io/centos:latest 在目录路径后可以加权限 /data:/webapp:ro 挂载本地的文件作为数据卷: docker run --rm -it -v ~/.bash_history:/.bash_history docker.io/centos /bin/bash 创建一个临时容器查看file_name内容,查看完了就退出了。 在系统中,默认会在家目录中有历史命令记录 .bash_history数据卷容器:在容器之间共享需要持续更新的文件。使用数据卷容器。(容器里的数据卷)
数据卷容器其实就是个容器,供其他容器挂载使用。 可以做到 备份 恢复 数据迁移 docker run -it -v /data --name dbdata centos // -v 指定容器卷目录 --name指定容器卷名 docker run -it --volumes-from dbdata --name db1 centos //将容器卷挂载到centos上并命名为db1备份:docker run --volumes-from dbdata -v $(pwd):/backup --name worker centos tar cvf /backup/backup.tar /dbdata其实数据卷容器就是一个共享的目录!!!首先将数据卷容器dbdata(这个容器就是/dbdata目录),挂载到worker容器中(worker容器上会多出个/dbdata容器),-v $(pwd):/backup 将物理机的当前目录挂载到,当前容器worker上,tar cvf 将/dbdata中的数据打包到,/backup目录中,因为物理机当前目录作为数据卷挂载到/backup上所以在物理机当前目录下就会出现backup.tar恢复: docker run -v /dbdata --name dbdata centos /bin/bash 首先建立一个数据卷容器 名称为dbdata docker run --volumes-from dbdata -v $(pwd):/backup busybox tar xvf /backup/backup.tar ( 这后面没有写内容!) 因为tar xvf /backup/backup.tar 后面没有内容 所以直接就解压到当前/dbdata数据卷容器(因为刚好挂载为当前目录)
网络配置
基础配置:
docker logs -f [image name] //通过name查看容器操作日志 映射到所有地址: docker run -d -p 5000:5000 centos //端口前无地址,默认为全地址。 映射多个端口到所有地址: docker run -d -p 5000:5000 -p 3000:80 centos
映射指定地址的指定端口:
docker run -d -p 127.0.0.1:5000:5000 centos 映射到指定地址的任意端口: docker run -d -p 127.0.0.1::5000 centos //物理主机会随机分配一个端口,映射到容器主机上的5000端口 映射UDP端口: docker run -d -p 127.0.0.1:5000:5000/udp centos //使用udp标签指定udp端口查看端口映射配置:
docker port [image name] 5000查看容器所有变量:
docker inspect [image name | ID] 容器间的通信: 删除已经使用过的镜像名,直接docker rm -f [image name | ID] //-f参数强制删除 执行 docker run 的时候加参数 --rm ,当容器运行结束后容器会自动删除,--rm 与 -d 不能同时使用docker run -it -d --name db centos /bin/bash //创建一个名为 db 的容器 docker rm -f web //删除name为web的容器 docker run -it -d -P --name web --link db:db centos /bin/bash //name:alias 前面是容器名,后面为容器别名 docker ps //显示 web/db 表示db和web容器已经建立连接
查看容器环境变量:env
docker run --rm --name web001 --link db:db centos env
显示以DB_开头的环境变量是供web/db连接使用
docker run -t -i --rm --link db:db centos /bin/bash //docker 会自动添加其他docker容器的解析内容到hosts文件中。[root@zxq ~]# yum install -y inetutils-ping //安装ping工具包
ping db
Dockerfile命令解释 Dockerfile:DokcerPool社区提供Docekrfile规范,参考编写。 FROM: FROM <image> 或 <image>:<tag> 第一条指令必须是FROM,来指定基础镜像,如果在一个Dockerfile中创建多个镜像,FROM可以多次使用,但是每个镜像只能使用一次。 MAINTIANER: MAINTIANER <name> //指定维护者信息 RUN: RUN <command> 或者 RUN ["executable","param1","param2"] 前者是直接在shell终端执行的,后者是在其他终端执行 RUN ["/bin/bash","-c","echo hello"] 每一条的RUN指令都在当前基础镜像上执行命令,命令长时可以用换行符 \ CMD: CMD ["executable","param1","param2"] CMD command param1 param2 //在 /bin/sh 中执行 每个Dockerfile只能有一条CMD命令被运行,如果有多条命令,只有最后一条会被执行。 EXPOSE: EXPOSE <port> [<port>] EXPOSE 22 80 443 暴露容器的端口号,一般供互联系统使用。在启动容器时-P参数会随机分配本地端口到指定的容器端口, -p 指定本地端口到指定的容器端口 -P不是永久生效 -p永久生效 ENV: ENV <key> <value> ENV zabbix /usr/local/zabbix/ ENV PATH $zabbix/bin:$PATH ADD: ADD <src> <dest> 将src复制到容器的dest,src一般在Dockerfile目录下为一个相对目录,也可以是一个URL,如果是tar文件 会自动解压为一个目录。 COPY: COPY <src> <dest> 复制本地主机<src>到容器<dest>中,一般为Dockerfile目录下的相对目录,当目标路径不存在时,自动创建。 ENTERYPOINT: ENTERYPOINT ["executable","param1","param2"] //在其他终端中执行 ENTERYPOINT command param1 param2 //在shell中执行 VOLUME: VOLUME ["/data"] 创建一个挂载点,可以在本地挂载,也可以被其他容器挂载。 USER: USER daemon 指定运行容器的用户名或UID,在此命令后的RUN或者其他命令,所执行的指令也是USER指定的用户执行的。 RUN groupadd -r usergroup && useradd -r -g usergroup user1 USER user1 如果需要临时获取root权限,建议使用gosu,不建议使用sudo。 WORKDIR: WORKDIR /path/to/workdir 为后面的RUN CMD ENTRYPOINT 等指令指定工作目录 WORKDIR /a WORKDIR b WORKDIR c RUN pwd 最终目录为 /a/b/c ONBUILD: ONBUILD [INSTRUCTION] 当使用这条命令生成了当前镜像,在下一个Dockerfile中如果使用了有ONBUILD命令生成的镜像时, 在这个Dockerfile中就会执行上一个基础镜像中的ONBUILD指令(此Dockerfile将上一个镜像作为了基础镜像)