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 save
docker 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 centos
MAINTAINER ksir<2232342@qq.com>
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN yum -y install vim
RUN yum -y install net-tools
EXPOSE 80
CMD echo $MYPATH
CMD 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_name
docker run -d --name container_02 --link container_01 image_name
docker 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_01
docker network connect mynet container_01
Docker Compose (高级)
- 运行多容器(web、mysql、redis、nginx…)
- 对多容器进行编排,配置环境、端口、网路…
命令:
docker-compose up -d
# 启动,当前路径下需要有一个 docker-compose.yml 文件
docker-compose stop
docker-compose down
# 停止
yaml 规则
# 3层
version: "" #版本号
services: # 服务
服务 1: web
# 服务配置
images
build
network
depends_on:
...
服务 2: mysql
...
服务 3:redis
...
# 其他配置, 网络/卷、全局规则
valumes:
networks:
configs: