docker
联合文件系统
分层
docker镜像都是只读的,当容器启动时,一个新的可写层加载到镜像的顶部
这一层就是我们所说的容器层,容器之下的都叫镜像层
镜像
1 2 3 4 5 6 7 8 9
| docker version 显示docker版本 docker images 查看镜像文件 -a 列出所有镜像 -q 只显示镜像id docker search ID 搜索镜像 docker pull 下载镜像 docker pull mysq:5.7 下载指定版本容器 docker rmi -f ID 删除指定容器 docker rmi -f $(docker images -aq) 批量删除所有的容器
|
容器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| docker run [可选参数] image 启动镜像 --name='Name' 自定容器名字 -d 后台方式运行 -it 使用交互方式运行,进入容器 -p 指定容器端口 -p 8080:8080 目标端口:原端口 -P 随机指定端口 -e 环境配置修改 docker run -it centos /bin/bash 启动进入容器 docker ps -a 查看所有运行的容器 docker ps 查看当前运行的容器 docker ps -aq 显示所有运行容器的id docker rmi ID 删除指定镜像 docker rm ID 移除指定容器 docker rm -f $(docker ps -aq) 移除所有容器 docker ps -aq | xargs docker rm 启动/停止: docker start ID 启动容器 docker restart ID 重启容器 docker stop ID 停止当前在运行的容器 docker kill ID 强制杀掉容器 docker stats ID 查看服务运行状态
常用的其他命令: docker run -d centos 后台启动,容器发现没有提供服务就会自杀 docker logs 查看日志 docker top ID 查看docker容器内部信息 docker inspect ID 查看镜像源数据(容器、网络、参数等信息)
进入当前运行容器: docker exec -it ID /bin/bash 进入容器内部(开启新终端) docker attch ID 进入容器(容器正在执行的终端) docker cp id:容器内部路径 外部主机路径 从容器拷贝文件到外主机 (docker cp 146ecba301d4:/home/jiangxu.txt ./) commit镜像 docker commit ID 提交容器成为新的副本 docker commit -m “提交描述信息” -a="作者" 容器id 目标镜像名:[tag] dokcer commit -m="add webapps" -a="jiangxu" 90bde776f89f tomcat:V1 docker history 0d120b6ccaa8 查看镜像构建历史
|
数据卷
多容器同步数据
1 2 3 4 5 6
| docker run --name docker01 -itd liujiangxu-centos docker run --name docker02 -itd --volumes-from docker01 liujiangxu-centos docker run --name docker03 -itd --volumes-from docker01 liujiangxu-centos docker01 docker02 docker03 三台容器卷共享 --volumes-from docker01删除不会影响其他数据同步效果
|
三种挂载方式
1 2 3 4 5 6 7 8 9
| -v 容器内路径 docker run -d -P --name=nginx01 -v juming-nginx:/etc/nginx:ro nginx ro:可读 docker run -d -P --name=nginx01 -v juming-nginx:/etc/nginx:rw nginx rw:读写 -v 卷名:容器内路径 docker run -d -P -v juming-nginx:/etc/nginx nginx 具名挂载 -v 宿主机路径:容器内路径 docker run -it -v /home/ceshi:/home/ceshi centos /bin/bash (主机目录:容器目录)
所有docker容器中,没有指定目录情况下都在/var/lib/docker/volumes/XXX/_data
|
dockerfile:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| docker build -f dockerfile1 -t liujiangxu-centos . 构建dockerfile -f 指定文件 -t 设定后目标
FROM centos VOLUME ["volume01"] CMD echo "----end-----" CMD /bin/bash
DOCKERFILE命令: FROM 基础镜像 MAINTAINER 维护者信息 RUN 构建时需要运行的命令 ADD COPY文件,比如将本地tomcat添加到容器 WORKDIR 设置当前工作目录 VOLUME 设置卷,挂载主机目录 EXPOSE 暴漏端口配置 CMD 指定容器启动运行的命令,只有最后一个会生效,可被替代 ENTRYPOINT 指定容器启动运行的命令,可以追加命令 ONBUILD 当构建一个被继承dockerfile时候运行的指令,触发指令 COPY 类似ADD ,将文件拷贝镜像中 ENV 构建时设置环境变量
|
docker网络:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| 每启动一个容器,docker就会给容器分配一个ip,只要安装docker,就会有一个网卡docker0 桥接模式:使用的技术是evth-pair技术 evth-pair:一对虚拟的设备接口,都是成对出现的(容器带来的网卡都是一对一对的) 容器和容器之间是可以互相ping通
所有的容器在不指定的情况下,都是docker0路由的,docker会分配默认的可用ip --link: 类似与将ip 服务名写入到/etc/hosts文件 docker -itd -P --name tomcat02 --link tomcat01 tomcat docker exec -it tomcat02 ping tomcat01 可以通过服务名ping通另一台容器 • 但tomcat01ping服务名tomcat02是不行
自定义网络:容器互连 docker network ls 查看容器网络状况 网络模式: bridge: 桥接模式 host: 主机模式 container: 容器网络连通 none: 不配置网络 直接启动的命令默认参数 --net bridge docker run -itd -P --name tomcat01 --net bridge tomcat
创建自定义网络:(创建子网掩码16 网关为192.168.0.1 名称为mynet 的桥接模式网络) docker network create mynet --subnet 192.168.0.0/16 --gateway 192.168.0.1 --dirver bridge 设置网络模式桥接 --subnet 192.168.0.0/16 设置子网 --gateway 192.168.0.1 设置网关 启动容器设置为自己设置的自定义网络: docker run -d -P --name tomcat01 --net mynet tomcat • 网络相互连通 • 服务名正常ping通 不同网络模式容器连通:connect(连接) docker network connect mynet tomcat01-delfaut 将整个mynet网络增加到默认网络tomcat01-delfaut的容器中
|
docker swarm
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| 初始化节点: docker swarm init --advertise-addr 192.168.108.130 其他主机加入节点: docker swarm join --token SWMTKN-1-4pglq5modcssvddg0iwtg1n37sewh30pftf3osl97wjmxwl279-ahoa9ba936d416ip5n466cxr4 192.168.108.130:2377 生成主节点令牌: docker swarm join-token manager 生成工作节点令牌 docker swarm join-token worker 查看节点: docker node ls 离开集群: docker swarm leave (在想要离开的本机执行即可) docker node demote (先降级) docker node rm ID (先离开 降级 删除节点) 节点升降级: dockr node update --role=worker HOSTNAME 降级工作节点 docker node update --role=manager HOSTNAME 升级为管理节点 docker node demote HOSTNAME 降级主机 docker node promote HOSTNAME 升级主机
以volume卷挂载: docker service create --mount type=volume,src=nginx-vol,dst=/usr/local/nginx/html \ --replicas=2 --name nginx-test nginx 查看卷: docker volume ls
docker service create -p 8888:80 --name my-nginx nginx 创建一个nginx服务 docker service rm my-nginx 删除服务 docker service ls 查看启动的服务 docker service ps my-nginx 查看那些节点使用my-nginx服务 docker service 动态扩缩容 --replicas 3 副本==3容器 docker service update --replicas 3 my-nginx docker service scale my-nginx=3 在集群中扩容3个my-nginx容器(当集群某节点宕机将会将会自动拉起副本不少于3) 调整sservice以什么方式运行 --mode string docker service create --mode replicated --name mytom tomcat:7 (工作,集群分配工作节点运行) docker service create --mode global --name mytom tomcat:7(全局,集群随机分配运行)
|