Docker安装

Docker命令

  • 查看安装的容器
  1. docker images
  • 通过Dockerfile构建镜像
  1. docker build -f .Dockerfile -t container_name:tag_name
  • 从镜像中实例化容器
  1. docker run -d --name mynginx -p 8080:80 nginx
  2. # -d 后台配置
  3. # -p 端口映射
  4. # -v 卷挂载
  5. # -e 环境配置
  6. # --name 容器命名
  7. # --net 指定网络
  • 查看当前运行的容器
  1. docker ps -a
  • 运行容器
  1. docker run -d container_id
  2. # -d 后台运行
  • 查看容器最近10条日志
  1. docker logs -tf --tail 10 container_id
  2. # -t 添加时间戳
  3. # --tail 指定日志数量
  • 查看容器信息
  1. docker inspect container_id
  • 进入当前运行的容器
  1. docker exec -it container_name /bin/bash
  2. # /bin/bash 打开新的终端
  3. # cd /home 执行其他命令
  • 进入容器打开当前终端
  1. docker attach container_id
  • 删除容器
  1. docker rm container_id # 删除容器
  2. docker rm -f $(docker ps -aq) # 删除所有的容器
  3. docker rmi image_name # 删除镜像
  • 在宿主机终端上,将docker文件拷贝的宿主机
  1. docker cp container_id:容器文件路径 主机文件路径
  • 查看cpu状态
  1. docker stats
  • 将修改过的容器提交为新的镜像
  1. docker commit -a "作者" -m "提交备注" 容器ID 新镜像名称:标签
  2. # 如 docker commit -a "ksir" -m "init" 98aa88ee9c23 nginx01:1.0
  • 查看镜像构建历史
  1. docker history container_id
  • 构建tar files与安装tar files
  1. docker save
  2. docker load

Docker镜像

容器数据卷

  1. -v 容器内路径 # 匿名挂载
  2. -v 卷名:容器内路径 # 具名挂载 将存放在/var/lib/docker/valumes/名称/_data
  3. -v /宿主路径:容器内路径 # 制定路径挂载
  4. 在容器内路径后添加 :ro 或者 :rw 改变读写权限
  5. ro: readonly # 只读
  6. rw: readwrite # 读写

Dockerfile

构建步骤:

  1. 编写一个Dockfile文件
  2. docker build 构建成镜像
  3. docker run 运行镜像
  4. docker push 将镜像推送 到远程库(dockerhub、阿里云)

基础知识:

  1. 每个保留关键字(指令)都必须大写
  2. 执行从上到下的顺序
  3. 表示注释

  4. 每个指令都会创建提交一个新的镜像层、并提交
  5. Dockfile 是面向开发的,逐渐成为了企业交付的标准

指令:

  • FROM 基础镜像
  • MAINTAINER 镜像作者(姓名<邮箱>)
  • RUN 镜像构建的时候需要运行的命令
  • ADD 步骤(可自动解压压缩包)
  • WORKDIR 工作目录
  • VOLUME 挂在目录
  • EXPOST 暴露端口
  • CMD 指定容器启动的时候需要运行的命令,只有最后一个会生效,可被替代
  • ENTRYPOINT 指定容器启动的时候需要运行的命令,可以追加命令
  • ONBUILD 当构建一个被继承 Dockfile 这个时候就会运行 ONBUILD 的指令。触发指令
  • COPY 将我们的文件拷贝到镜像中
  • ENV 构建的时候设置环境变量
  1. FROM centos
  2. MAINTAINER ksir<2232342@qq.com>
  3. ENV MYPATH /usr/local
  4. WORKDIR $MYPATH
  5. RUN yum -y install vim
  6. RUN yum -y install net-tools
  7. EXPOSE 80
  8. CMD echo $MYPATH
  9. CMD echo "-----end-------"
  10. CMD /bin/bash

构建命令

  1. docker build -f Dockfile 文件路径 -t 目标镜像名:版本标签 .
  2. -f # file
  3. -t # target

Docker网络原理

查看容器内部网络地址

  1. ip addr

linux 可以ping 通容器内部网络,每启动一个容器,docker 就会使用默认docker0路由给容器分配一个 IP 地址,以 linux 作为网桥 ,使用 evth-pair 技术连接各种虚拟设备。

所有的容器在不指定网络的情况下,都是共用 docker0 路由的,docker 给每一个容器分配一个默认的可用 IP 地址。

容器之间通过 link 指令互联:

  1. docker run -d --name container_01 image_name
  2. docker run -d --name container_02 --link container_01 image_name
  3. docker exec -it container_02 ping container_01
  4. # 通过 link 指令可以让两个容器通过容器名互联
  5. # --link 其实就是在容器中的 host 中添加了 ip 映射
  6. # 关于--link做了解即可,在实践开发中不推荐使用--link 指令,常使用自定义网络。

网络模式 —net 参数:

  • bridge # 桥接 docker (默认)
  • none # 不配置网络
  • host # 使用宿主机网络
  • container # 容器网络互通(用得少,局限大)

创建一个自定义网络:

  1. # 创建
  2. docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
  3. # 查看
  4. docker network ls
  5. # 容器使用网络
  6. docker run -d --name container_03 --net mynet image_name

网络联通容器—connect 指令:

  1. # 将网络 mynet 联通到容器 container_01
  2. docker network connect mynet container_01

Docker Compose (高级)

  1. 运行多容器(web、mysql、redis、nginx…)
  2. 对多容器进行编排,配置环境、端口、网路…

命令:

  1. docker-compose up -d
  2. # 启动,当前路径下需要有一个 docker-compose.yml 文件
  3. docker-compose stop
  4. docker-compose down
  5. # 停止

yaml 规则

  1. # 3层
  2. version: "" #版本号
  3. services: # 服务
  4. 服务 1: web
  5. # 服务配置
  6. images
  7. build
  8. network
  9. depends_on:
  10. ...
  11. 服务 2: mysql
  12. ...
  13. 服务 3redis
  14. ...
  15. # 其他配置, 网络/卷、全局规则
  16. valumes:
  17. networks:
  18. configs:

Docker Swarm(高级)

CI\CD Jenkins(高级)

IDEA整合Docker