Docker安装
Docker命令
- 查看安装的容器
 
docker images
- 通过Dockerfile构建镜像
 
docker build -f .Dockerfile -t container_name:tag_name
- 从镜像中实例化容器
 
docker run -d --name mynginx -p 8080:80 nginx# -d 后台配置# -p 端口映射# -v 卷挂载# -e 环境配置# --name 容器命名# --net 指定网络
- 查看当前运行的容器
 
docker ps -a
- 运行容器
 
docker run -d container_id# -d 后台运行
- 查看容器最近10条日志
 
docker logs -tf --tail 10 container_id# -t 添加时间戳# --tail 指定日志数量
- 查看容器信息
 
docker inspect container_id
- 进入当前运行的容器
 
docker exec -it container_name /bin/bash# /bin/bash 打开新的终端# cd /home 执行其他命令
- 进入容器打开当前终端
 
docker attach container_id
- 删除容器
 
docker rm container_id # 删除容器docker rm -f $(docker ps -aq) # 删除所有的容器docker rmi image_name # 删除镜像
- 在宿主机终端上,将docker文件拷贝的宿主机
 
docker cp container_id:容器文件路径 主机文件路径
- 查看cpu状态
 
docker stats
- 将修改过的容器提交为新的镜像
 
docker commit -a "作者" -m "提交备注" 容器ID 新镜像名称:标签# 如 docker commit -a "ksir" -m "init" 98aa88ee9c23 nginx01:1.0
- 查看镜像构建历史
 
docker history container_id
- 构建tar files与安装tar files
 
docker savedocker load
Docker镜像
容器数据卷
-v 容器内路径 # 匿名挂载-v 卷名:容器内路径 # 具名挂载 将存放在/var/lib/docker/valumes/名称/_data-v /宿主路径:容器内路径 # 制定路径挂载在容器内路径后添加 :ro 或者 :rw 改变读写权限ro: readonly # 只读rw: readwrite # 读写
Dockerfile
构建步骤:
- 编写一个Dockfile文件
 - docker build 构建成镜像
 - docker run 运行镜像
 - docker push 将镜像推送 到远程库(dockerhub、阿里云)
 
基础知识:
指令:
- FROM 基础镜像
 - MAINTAINER 镜像作者(姓名<邮箱>)
 - RUN 镜像构建的时候需要运行的命令
 - ADD 步骤(可自动解压压缩包)
 - WORKDIR 工作目录
 - VOLUME 挂在目录
 - EXPOST 暴露端口
 - CMD 指定容器启动的时候需要运行的命令,只有最后一个会生效,可被替代
 - ENTRYPOINT 指定容器启动的时候需要运行的命令,可以追加命令
 - ONBUILD 当构建一个被继承 Dockfile 这个时候就会运行 ONBUILD 的指令。触发指令
 - COPY 将我们的文件拷贝到镜像中
 - ENV 构建的时候设置环境变量
 
FROM centosMAINTAINER ksir<2232342@qq.com>ENV MYPATH /usr/localWORKDIR $MYPATHRUN yum -y install vimRUN yum -y install net-toolsEXPOSE 80CMD echo $MYPATHCMD echo "-----end-------"CMD /bin/bash
构建命令
docker build -f Dockfile 文件路径 -t 目标镜像名:版本标签 .-f # file-t # target
Docker网络原理
查看容器内部网络地址
ip addr
linux 可以ping 通容器内部网络,每启动一个容器,docker 就会使用默认docker0路由给容器分配一个 IP 地址,以 linux 作为网桥 ,使用 evth-pair 技术连接各种虚拟设备。
所有的容器在不指定网络的情况下,都是共用 docker0 路由的,docker 给每一个容器分配一个默认的可用 IP 地址。
容器之间通过 link 指令互联:
docker run -d --name container_01 image_namedocker run -d --name container_02 --link container_01 image_namedocker exec -it container_02 ping container_01# 通过 link 指令可以让两个容器通过容器名互联# --link 其实就是在容器中的 host 中添加了 ip 映射# 关于--link做了解即可,在实践开发中不推荐使用--link 指令,常使用自定义网络。
网络模式 —net 参数:
- bridge # 桥接 docker (默认)
 - none # 不配置网络
 - host # 使用宿主机网络
 - container # 容器网络互通(用得少,局限大)
 
创建一个自定义网络:
# 创建docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet# 查看docker network ls# 容器使用网络docker run -d --name container_03 --net mynet image_name
网络联通容器—connect 指令:
# 将网络 mynet 联通到容器 container_01docker network connect mynet container_01
Docker Compose (高级)
- 运行多容器(web、mysql、redis、nginx…)
 - 对多容器进行编排,配置环境、端口、网路…
 
命令:
docker-compose up -d# 启动,当前路径下需要有一个 docker-compose.yml 文件docker-compose stopdocker-compose down# 停止
yaml 规则
# 3层version: "" #版本号services: # 服务服务 1: web# 服务配置imagesbuildnetworkdepends_on:...服务 2: mysql...服务 3:redis...# 其他配置, 网络/卷、全局规则valumes:networks:configs:
