基础命令:
sudo service docker start
sudo service docker stop
sudo docker --version
docker-run
docker和vm的区别
docker本质是容器;vm本质相当于虚拟机;所占内存、启动速度、集成性
docker:镜像,容器,仓库 镜像是静态存储,容器是镜像运行起来的动态实例,仓库是存储很多镜像的地方,在远端
镜像分层简单理解:所有的Docker镜像都起始于一个基础镜像层 ,当进行修改或增加新的内容时,就会在当前镜像层之上,创建新的镜像层;
docker镜像基本命令
docker pull <名称> 拉取镜像
docker images 查看所有镜像信息
docker inspect 查看具体镜像信息
docker search <应用名称> 查找
docker rmi <标签或者ID> 删除
docker tag <ID> <tag名称> 修改名称
docker commit <ID> <REPOSETORY:TAG> 创建
docker save -o ***.tar <TAG/ID> 迁出
docker load --input ***.tar 或者 codker load <***.tar 载入
docker push <仓库名称> 上传
docker容器相关命令
docker create -ti ubuntu 创建容器
docker run 创建并运行容器
查看终止的容器: docker ps -a
查看运行的容器: docker ps
重新启动:docker start <ID>
终止容器:docker stop <ID>
进入容器:docker exec -t -i <ID> bash
删除容器:docker rm
导出容器是指导处一个已经创建的容器到一个文件:docker export <NAMES> > ***.tar
导出的文件又可以使用docker import命令导入,成为镜像:cat aa.tar | docker import - ccc/testcc:cctar
docker相关运用
sudo docker pull nginx
sudo docker ps -a 列出所有容器, 不加 -a 仅列出正在运行的,像退出了的或者仅仅只是创建了的就不列出来
sudo docker run -d -p 8800:80 --name nginx_xiao nginx #运行指定的镜像
dudo docker run -d --privileged=true -p 83:80 --name nginx83 nginx #提升权限
#宿主主机端口:容器内部端口
-d 后台运行
-p 8800:80 是指定对外暴露的端口 容器内部用80 对应外部宿主主机的的8800 代理一样
--name指定容器的名字 最后的nginx 代码要运行的镜像名字 有tag的加上tag 如 nginx:xxx 默认为latest
docker数据管理:数据卷&挂载
数据卷
创建数据卷:docker volume create mydata
查看:docker volume ls
查看详细信息:docker volume inspect mydata
挂载:方式1:docker run --name xxxx -p 8888:8888 -v /my:/docker -it imagename /bin/bash
docker run --name xxxx -p 8888:8888 --mount
type:volume,source=/src/xxx,target=/xxx /my:/docker -it imagename /bin/bash
挂载:docker run -it --name c1 -v /宿主机目录:/docker目录 -it imagename /bin/bash
dockerfile:
绑定dockerfile位置:docker build -f /path/to/a/Dockerfile
# This my first nginx Dockerfile
# Version 1.0
# Base images 基础镜像
FROM centos
#MAINTAINER 维护者信息
MAINTAINER tianfeiyu
#ENV 设置环境变量
ENV PATH /usr/local/nginx/sbin:$PATH
#ADD 文件放在当前目录下,拷过去会自动解压
ADD nginx-1.8.0.tar.gz /usr/local/
ADD epel-release-latest-7.noarch.rpm /usr/local/
#RUN 执行以下命令
RUN rpm -ivh /usr/local/epel-release-latest-7.noarch.rpm
RUN yum install -y wget lftp gcc gcc-c++ make openssl-devel pcre-devel pcre && yum clean all
RUN useradd -s /sbin/nologin -M www
#WORKDIR 相当于cd
WORKDIR /usr/local/nginx-1.8.0
RUN ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-pcre && make && make install
RUN echo "daemon off;" >> /etc/nginx.conf
#EXPOSE 映射端口
EXPOSE 80
#CMD 运行以下命令
CMD ["nginx"]
dockerignore
.dockerignore 文件的作用类似于 git 工程中的 .gitignore
Compose 是用于定义和运行多容器 Docker 应用程序的工具,通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务
docker容器之间的通信
docker网络通信分类介绍:NET(网络地址转换,涉及到ipv4地址,公网ip,内网),host-only(网卡通信),bridge(网桥,TCP/IP 二层协议,mac地址)对于一个docker 容器,如果没有通过--network进行指定,则默认采用的是bridge桥接模式
网络配置:Docker容器网络资源通过内核的Network Namespace机制实现隔离,不同的Network Namespace有各自的网络设备、协议栈、路由表、防火墙规则等
linux6种namespace
IPC:隔离System V IPC 和 POSIX消息队列
Network:隔离网络资源
Mount:隔离文件系统挂载点
PID:隔离进程ID
UTS:隔离主机名和域名User:隔离用户ID和组ID
docker五种容器的网络模式:none(手动配置)、macvlan(通过macvlan在host网卡上面创建多个子网卡)、host(与主机共享一个Network Namespace)、bridge(docker设计的NAT网络模型)、overlay(跨主机子网络模型 vxlan)
libnetwork:基于CNM的实现;Docker 启动容器时,用来为 Docker 容器提供网络接入功能的插件,它可以让 Docker 容器顺利接入网络,实现主机和容器网络的互通
跨主机网络通信的解决方案:weave,flanne
K8s简介:是一个可移植、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化;特点:1、服务发现和负载平衡 2、存储编排 3、自动部署和回滚 4、自动垃圾箱打包 5、自我修复 6、秘密和配置管理
主节点Master:kube-apiserver etcd kube-scheduler kube-controller-manager cloud-controller-manager
计算节点Node:kubelet kube-proxy Pod