Docker
虚拟机
- 资源占用多 冗余步骤多 启动慢
- 虚拟机它可以在一种系统里面运行另外一种系统,而对于底层系统来说,虚拟机就是一个普通的文件。
Docker
一次构建、随处运行
- 更快速的应用交付与部署
- 更便捷的升级和扩缩容
- 更简单的系统运维
- 更高效的计算资源利用
Docker的优势
- 轻亮,秒级的快速启动速度
- 简单易用活跃的社区
- 标准统一的打包/部署/运行方案
- 镜像支持增量分支,易于部署,易于构建,良好的REST API
- 性能:尤其是内存和io的开销
Docker的三大组成
仓库:仓库(repository)可看着一个代码控制中心,用来保存镜像。
镜像(类):Docker 镜像(Image),就相当于是一个 root 文件系统。
容器(实例):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器
原理:
安装
centos6.8
1.依赖的库epel-release
1 yum install -y epel-release
2.安装docker-io
1 yum install -y docker-io
3.安装后的配置文件
1 /etc/sysconfig/docker
4.启动docker后台
1 service docker start
5.查看版本
1 docker version
6.配置阿里云加速地址
1 vim /etc/sysconfig/docker 2 other_args = "--registry-mirror=https://xxxx.mirror.aliyuncs.com"
7.重启docker
1 service docker restart
centos7官网参照官网
1 阿里云镜像加速专网:dev.aliyun.com/search.html 2 专属加速地址:https://xxxx.mirror.aliyuncs.com 3 可能没有这个配置文件/etc/docker/daemon.json 这里就要新建一个此文件 4 vim /etc/docker/daemon.json 5 写入: 6 { 7 "registry-mirror": ["https://xxxx.mirror.aliyuncs.com", ] 8 } 9 systemctl daemon-reload 10 systemctl restart docker
1 cat /etc/redhat-release 2 yum -y install gcc 3 yum -y install gcc c++ 4 gcc -v 5 官网先卸载 6 sudo yum remove docker \ 7 docker-client \ 8 docker-client-latest \ 9 docker-common \ 10 docker-latest \ 11 docker-latest-logrotate \ 12 docker-logrotate \ 13 docker-engine 14 15 安装需要的软件包 16 sudo yum install -y yum-utils \ 17 device-mapper-persistent-data \ 18 lvm2 19 设置stable镜像仓库 20 sudo yum-config-manager \ 21 --add-repo \ 22 https://download.docker.com/linux/centos/docker-ce.repo 23 24 sudo yum-config-manager \ 25 --add-repo \ 26 http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 27 28 更新yum软件包索引 29 sudo yum makecache fast 30 31 安装docker-ce 32 yum -y install docker-ce 33 sudo yum install docker-ce docker-ce-cli containerd.io 34 yum list docker-ce --showduplicates | sort -r 35 36 启动并测试 37 sudo systemctl start docker 38 39 配置镜像加速 40 mkdir -p /etc/docker 41 vim /etc/docker/daemon.json 42 配置 43 { 44 "registry-mirror": ["https://xxxx.mirror.aliyuncs.com", ] 45 } 46 systemctl daemon-reload 47 systemctl restart docker 48 49 卸载 50 停止docker 51 systemctl stop docker 52 yum -y remove docker-ce 53 rm -rf /var/lib/
运行容器docker
1 docker run hello-world 由于本地没有hello-world这个镜像,会下载一个hello-world镜像,并在容器内运行
docker常用命令
1 帮助命令 2 docker version 3 docker info 4 docker --help 5 鲸鱼背上装有集装箱 6 蓝色的大海:宿主机系统MaxOS 7 鲸鱼就是docker 8 集装箱就是容器实例,容器实例来自镜像模板
镜像命令
1 docker images 列出本地主机上镜像模板 2 options参数 3 -a: 列出本地所有镜像 4 -q:只显示镜像id 5 --digests:显示镜像的摘要信息 6 --no-trunc:显示完整的镜像信息 7 8 网站:http://hub.docker.com 9 去Docker Hub上查nginx 10 1.docker search 11 docker search nginx 12 options参数 13 -no-trunc:显示完整的镜像信息 docker search -s 30 -no-trunc nginx 14 -s:列出收藏数不小于指定值的镜像 docker search -s 30 nginx 15 --automated:只列出automated build类型的镜像 16 17 2.docker pull 18 docker pull nginx:latest=docker pull nginx 最新版本 19 docker pull nginx:1.12 20 21 3.docker rmi 镜像id 22 删除单个 docker rmi -f id 23 删除多个 docker rmi -f 镜像名1:TAG 镜像名2:TAG 24 删除全部 docker rmi -f $(docker images -qa)
容器命令
1 1.下载一个centos docker pull centos 2 2.新建并启动容器 docker run 3 docker run -it 容器id --name mycentos重新另起别名 i交互 t重分配终端 -P:随机端口映射 -p:指定端口映射 docker run -it -p 8888:6379 redis 4 3.docker ps 列出所有运行的docker容器 5 参数 a列出所有运行过的容器 l显示最近创建的容器 n显示最近创建的几个容器 q只显示容器id编号 6 docker ps -n 3 7 4.退出 exit关闭并退出 ctrl+p+q容器不停止退出 8 5.重启容器 9 docker start 容器id 10 docker restart 容器id 11 6.停止 12 docker stop 容器id 13 docker kill 容器id 强制 14 7.删除已停止的容器 15 docker rm 容器id 停止的容器 16 docker rm -f 容器id 强制删除正在运行的容器 17 18 一次性删除多个容器: 19 docker rm -f $(docker ps -q -a) 20 docker ps -a -q | xargs docker rm 21 -xargs:linux可变参数 22 23 -------------------****************------------------ 24 8.启动守护式 25 docker run -d centos容器 26 27 9.查看容器日志 28 docker logs -f -t --tail 容器id 29 -t加入时间戳 30 -f跟随最新的日志打印 31 --tail 3 数字显示最后3条 32 33 10.查看容器内的进程 34 docker top 容器id 35 36 11.查看容器内部的细节 37 docker inspect 容器id 数组里边以json字符串看明细 38 39 12.进入正在运行的容器并以命令行交互 40 docker exec -it 容器id bashshell(ls -l/tmp外面获取结果 /bin/bash进入容器的方法) 41 重新进入docker attach 容器ID 42 上述两区别: attach 直接进入容器启动命令的终端,不会启动新的进程 43 exec 是在容器中打开新的终端,并且可以启动新的进程 44 弹幕高能补充:docker exec -it 容器ID /bin/bash 再使用exit不会使容器关闭 45 46 13.从容器内拷贝文件到主机上 47 docker cp 容器id: /tmp/yum.log /opt 48 docker commit -m="提交的信息" -a="作者" 容器id 要创建的目标镜像名字:[标签名] 49 14.docker commit提交成为新的镜像
docker镜像
1 镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件 2 UnionFS(联合文件系统):对文件系统的修改行为一次提交来一层层的叠加 3 联合文件系统是docker镜像的基础 4 bootfs包含bootloader和kernel两部分,bootloader加载kernel 5 rootfs包含linux系统etc,bin等标准目录与文件,它其实就是不同操作系统发行版 ubuntu与centos 6 为什么快?底层共用宿主机的kernel 7 分层好处:共享资源
docker容器数据卷
1 作用:1.主要做持久化2.容器之间可以共享数据 2 容器内添加数据卷: 3 1.命令方式 docker run -it -v /宿主机绝对路径:/容器内目录 --privileged=true 镜像名 ps:v=volume 4 加权限:命令方式 docker run -it -v /宿主机绝对路径:/容器内目录:ro 镜像名 ro=readonly 5 2.DockerFile是描述镜像的 镜像构建文件 dockerfile添加数据卷 6 第一步编写:创建dockerfile文件 第二步构建新的镜像:docker build -f dockerfile路径 -t 命名空间 .第三步执行新的实例:run 7 8 容器间传递共享 --volumes-from
dockerfile文件案例
1 DockerFile文件 2 FROM scratch 所有镜像祖先类 3 MAINTAINER The CentOS Project <cloud-ops@centos.org> 4 ADD c68-docker.tar.xz / 5 LABEL name="CentOS Base Image" \ 标签说明 6 vendor="CentOS" \ 7 license="GPLv2" \ 8 build-date="2016-06-02" 9 # Default command 10 CMD ["/bin/bash"]
dockerfile字指令
1 FROM 基础镜像 2 MAINTAINER 作者描述 3 RUN 运行 4 EXPOSE 暴露出该镜像实例的端口 5 WORKDIR 工作目录 6 ENV 构建环境变量 7 ADD 拷贝+解压缩 8 COPY 拷贝 9 VOLUME 持久化 10 CMD 指定容器启动是要运行的命令 在dockerfile里边可以有多个cmd但是只是最后一个cmd生效 有覆盖的作用 11 ENTRYPOINT 指定容器启动是要运行的命令 参数追加的作用 12 ONBUILD 触发器 父镜像在被子继承后父镜像的onbuild被触发
dockerfile文件编写
1 FROM centos 2 ENV mypath /tmp 3 WORKDIR $mypath 4 RUN yum -y install vim 5 RUN yum -y install net-tools 6 EXPOSE 80 7 CMD /bin/bash
docker上安装mysql
1 docker search mysql 2 docker pull mysql:5.7 3 docker images 4 docker run -p 12345:3306 --name mysql 5 -v /zjzjuse/mysql/conf:/etc/mysql/conf.d 6 -v /zjzj/mysql/logs:/logs 7 -v /zjzj/mysql/data:/var/lib/mysql 8 -e MYSQL_ROOT_PASSWORD=123456 9 -d mysql:5.7
docker安装redis
1 docker pull redis:5.1 2 docker images 3 docker run -p 6379:6379 --name redis 4 -v /zjzjuse/myredis/data:data 5 -v /zjzjuse/myredis/conf/redis.conf:/usr/local/etc/redis/redis.conf 6 -d redis:5.1 redis-server /usr/local/etc/redis/redis.conf 7 --appendonly yes 8 在主机上/zjzjuse/myredis/conf/redis.conf文件夹修改 vim /zjzjuse/myredis/conf/redis.conf/redis.conf 本机地址注释掉
本地镜像发布到阿里云
注册仓库就是了
参照官网操作更多https://docs.docker.com/reference/