docker
2013 诞生,短短几年称霸 Build Once Run Anywhere!
Docker基于容器技术的轻量级虚拟化解决方案
Docker是容器引擎,把Linux的cgroup、 namespace等容器
底层技术进行封装抽象为用户提供了创建和管理容器的便
捷界面(包括命令行和API)
Docker是-一个开源项目,诞生于2013年初,基于Google
公司推出的Go语言实现
微软,红帽Linux,IBM, Oracle等 主流IT厂商已经在自己的
产品里增加对Docker的支持。
相比其他早期的容器技术,Docker引入了一 整套容器管理
的生态系统,包括分层的镜像模型,容器注册库,友好的
Rest API。
6个维度隔离
docker EE (企业版) docker CE(社区版)
安装和配置
~]# curl -o /etc/yum.repos.d/CentoS-Base.repo http://mirrors.aliyun.com/ repo/Centos-7.repo
~]# yum install epel-release -y
~]# yum list docker --show-duplicates
yum install -y yum-utils
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce. repo
~]# yum list docker-ce --show-duplicates
I
~]#vi /etc/docker/daemon.json 对容器引擎配置
{
"graph":"/data/docker" #工作目录
"storage-driver":"overlay2", ##存储驱动
”insecure-registries": [” registry . access. redhat .com",”quay.10" ], ##不安全的仓库,可加自建的仓库
registry-mirrors": [ "https ://q2gr04ke,mirror.aliyuncs.com"], ##拉镜像需要加速源
"bip": "172.7.5.1/24", ##容器的ip 中间两位建议个宿主机一样,容器有问题好定位在哪个宿主机
”exec-opts": [ native.cgroupdriver=systemd" ], ##启动后的一些额外参数 ,cgroupdriver是谷歌在2007写在Linux内核中的关于CPU内存资源的控制方法
"live-restore": true ##docker死活不依赖引擎
}
启动第一个容器 hello-world
~]# systemctl enable docker
~]# systemctl start docker
docker info ##容器信息 /docker version
docker 引擎是典型的C/S 架构软件
启动容器4步
docker run hello-world
1. The Docker cllent contacted the DOC ker daemon. ##客户端连接服务端
2.The Docker daemon pulled the "hello-world" image from the Docker Hub。
(amd64) ##服务端拉取镜像从docker hub
3. The DOC ker daemon Created a new Container from that image which runs the
executable that produces the output you are currently reading. ##docker守护进程拉取的镜像创建了一个新容器可执行文件,生成当前正在读取的输出
4.The Docker daemon streamed that output to the Docker client, which sent it
to your terminal. ##Docker守护进程将输出流到发送它的Docker客户机,你的终端。
docker 引擎三大概念
镜像的结构:
{registry. name}/{repository. name}/{image_ name}:{tag. _name}
例如: docker.io/library/alpine:3.10.1
镜像版本或日期时间戳做标签
容器是由镜像实例化而来的
docker 镜像特性
镜像 1G 正常 ,每次更新完.拉只是增量部分,第一次会慢
docker 基于aufs 构建,base image 第一次后每个节点都有
比如:
快速清除所有镜像
systemctl stop docker (仅限docker环境有问题,测试可以瞎搞)
rm -fr /var/lib/docker/*
systemctl start docker
查看镜像层数
docker history centos7.6_nginx:v1 |grep -v '0B'
几个文件有变化就有几层
docker镜像分层:节省空间,复用.
删除也是删除层id ,镜像id 解压tar包,每层一个文件夹,镜像id文件包含层ID,CMD,ENV等等
镜像命令
1.登录
docker login docker.io
2. 查找镜像
docker search alpine
3.下载镜像
docker pull alpine 直接下载镜像 (啥也不加,默认从docker-hub下载)
docker pull alpine:3.10.1 下载指定tag
docker pull docker.io/library/alpine:3.10.1
镜像结构:registry_name/repository_name/image_name:tag_name
例如: docker.io/library/alpine:3.10.1
4. 查看本地镜像
docker images
latest 实际上是个指针 指向一个版本
5.给镜像打标签
docker tag 965ea09ff2eb docker.io/jiajun01/alpine:v3.10.3
6.推送镜像
docker push docker.io/jiajun01/alpine:v3.10.1 推送镜像
7.删除镜像
docker rmi docker.io/jiajun01/alpine:v3.10.1 删除镜像(标签)
docker rmi -f 8984y323758 强制本地删除
容器命令
1. 启动容器
docker run是日常用的最频繁用的命令之一,同样也是较为复杂的命令 ;之一
命令格式: docker run (OPTIONS] IMAGE [COMMAND] [ARG..]
OPTIONS :选项
i:表示启动一个可交互的容器.井持续打开标准输入
-t:表示使用终端关联到容器的标准输入输出上
-d :表示将容器放置后台运行
--rm:退出后即删除容器
--name:表示定义容器唯一名称
IMAGE :表示要运行的镜像
COMMAND :表示启动容器时要运行的命令*
docker run -ti gao01/alpine:latest /bin/sh
非交互式启动一个容器
docker run --rm gao01/alpine:latest /bin/echo hello 执行完就从 列表中删除
非交互式启动一个后台容器
docker run -d --name myalpine gao01/alpine:latest /bin/sleep 300 需要命令夯住
查看容器
查看运行中的容器
docker ps
查看所有容器
docker ps -a
查看属主机进程
ps aux |grep sleep |grep -v grep 能查到刚才的sleep
进入正在运行的容器
docker exec -ti e0b7fcf28418 /bin/sh
停止/启动/重启 容器
docker stop/start/restart e0b7fcf28418
docker stop/start/restart myalpine
删除容器
docker rm myalpine
docker rm -f myalpine (运行状态强制删)
批量删除属主机上已经退出的的容器
for i in `docker ps -a |grep -i exit|awk '{print $1}'`;do docker rm -f $i ;done
提交镜像
docker commit -p myalpine gao01/alpine:v1.1_with_1.txt (创建个1.txt文件 -p 提交期间暂停容器)
导出镜像
docker save 433rthurth > alpine:v.1.1_with_1.txt.tar
导入镜像
docker load < alpine:v.1.1_with_1.txt.tar
docker tag 4243tfdghfdg gao01/alpine:v.1.1_with_1.txt (因为导入没有标签)
docker run --rm -ti --name myalpine_with_1.txtgao/alpine:v1.1_with_1.txt /bin/sh
查看容器日志
docker logs 34552df35
docker logs -f 34552df35 (类似tail -f )
常用命令
映射端口
●docker run -p容器外端口:容器内端口
docker run --rm --name mynginx -d -p81:80 gao01/nginx:v1.12.2
挂载数据卷
●docker run -V容器外目录:容器内目录
mkdir html
wget www.baidu.com -O index.html
docker run -d --rm --name nginx_with_baidu -d -p82:80 -v /root/html:/usr/share/nginx/html gao01/nginx:v1.12.2
docker inspect 8c440bed2ccb 容器运行的细节
传递环境变量
●docker run - e环境变量key=环境变量value
docker run --rm -e E_OPTS=abcdefg oldboy1103/alpine:latest printenv
打印容器中环境变量就删除
●容器内安装软件(工具).
, yum/apt-get/apt等
redhat /ubuntu,debian/alpine
16 高级 后半段