docker
docker 简介
docker由来
「Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。」
docker 解决了不同环境下配置不同的问题,docker可以把运行环境(系统、代码、配置、数据、依赖等)都打包到一个沙盒中(容器),部署到任何流行的Linux机器上
docker vs 虚拟机
上图:
虚拟机属于虚拟化技术。而Docker这样的容器技术,也是虚拟化技术,属于轻量级的虚拟化。
区别:虚拟机虽然可以隔离出很多“子电脑”,但占用空间更大,启动更慢,虚拟机软件可能还要花钱,但是docker不需要虚拟出整个操作系统,容器内的应用进程直接运行于宿主的内核。容器没有自己的内核,仅包含运行时的所需的runtime环境,所以占用资源少,启动快
docker 核心概念
上图
仓库(Repository)
存放镜像地址的远程仓库(github类似)
镜像(Image)
镜像轻量级可执行的软件包,相当于是一个模板,它除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(例如环境变量)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。
容器(Container)
按镜像生成的实例,每个容器相互隔离,可以把容器看成一个精简版的linux环境
docker 安装
首先换源 (yum或者apt)
根据官网安装,略~
阿里云上下载docker安装环境命令
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
替换成
sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
Docker安装时出现requires containerd.io >= 1.2.2-3错误
wget http://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.13-3.1.el7.x86_64.rpm
yum -y install ./containerd.io-1.2.13-3.1.el7.x86_64.rpm
docker 常用命令
docker 帮助命令
- docker version
- docker info
- docker --help
docker 镜像命令
docker images
列出所有本地镜像模板
docker search
查找镜像
docker search nginx --filter=stars=800
找出星星数大于800的镜像
docker pull
下载镜像
docker pull mysql:5.6
下载指定标签的镜像 默认:latest
docker rmi
删除镜像
docker rmi $(docker images -qa)
删除所有镜像
容器命令
docker run
启动容器,如果没有该镜像,会从远程仓库中拉取镜像,新建容器并启动
常用的options说明;
- --name 容器名
- -d 后台运行容器,即启动守护进程 全拼--detach
- -i 已交互模式运行容器,通常与-t一起使用
- -t 为容器重新分配一个伪输入终端
- -p 指定端口映射
- ip:hostPort:containerPort
- ip::containerPort
- hostPort:containerPort
- containerPort
- -P(大写) 随机端口映射
- -e 作用是指定容器内的环境变量
- -rm 执行docker run命令带--rm命令选项,等价于在容器退出后,执行docker rm。
docker run -it --name myCentos centos
启动centos 并打开交互终端
docker run centos -d
输入docker ps -a
查看会发现容器已经退出了,
很重要的一点:docker容器后台运行,就必须有一个前台进程,这是docker机制, 最佳的解决方案是将你要运行的程序以前台进程的形式运行
docker run -d centos /bin/bash -c "while true;do echo hello zzyy;sleep 2;done"
/bin/bash
:默认
docker run -d -p 8888:8080 tomcat
这是可以后台运行不退出的 ,因为tomcat执行不退出
docker ps
列出当前所有正在运行的容器
exit
容器停止退出
ctrl+P+Q
容器不停止退出
docker stop
关闭容器
docker kill
强制关闭容器
docker rm
删除已停止的容器
docker rm -f $(docker ps -aq)
docker ps -aq | xargs docker rm
- xargs 可变参数
- |管道符 把上一个命令参数传递给下个命令 删除所有容器
docker start
启动容器
docker restart
重启容器
docker logs
查看容器日志 options:
- -t 是加入时间戳
- -f 跟随最新的日志打印 一直输入不停止
- tail 数字 显示最后多少条
docker top
查看容器内运行的进程
docker inspect
查看容器内部细节
docker exec
在容器中打开新的终端,并且可以启动新的进程,
docker exec -it centosContainer ls /tmp
执行完返回,不停留再交互终端
docker exec -it centosContainer /bin/bash
停留在交互终端 后面的/bin/bash的作用是表示载入容器后运行bash
docker attach
直接进入容器启动命令的终端,不会启动新的进程,停留在交互终端
docker cp
拷贝容器内的文件到宿主机中
docker cp centosContainer:/test/a.text /test
docker commit
提交容器副本 使之成为一个新的镜像
docker commit -a="zjjaxx" -m="fix init" dabceae191c9 zjjaxx/tomcat:1.1
-a
表示作者 -m
表示描述 zjjaxx/
表示包名
docker build
生成一个新的镜像
docker build -f /mydocker/dockerfile -t zjj/centos .
-f
指名dockerfile文件路径 -t
表示包名+镜像名 .
表示在当前目录下
docker 命令options说明
-a
:表示列出本地所有
-q
:只显示id
-f
:强制执行
docker 镜像相关概念
UnionFS(联合文件系统)
Union文件系统(UnionFS)是一种分层、轻量级并且高并发的文件系统,它支持「对文件系统的修改作为一次提交来一层层的叠加」,同时可以将不同目录挂载到同一个虚拟文件系统下。Union文件系统时Docker镜像的基础,镜像可以通过分层来进行继承,基于基础镜像,可以制作各种具体的应用镜像
docker 镜像的加载原理
liunx 系统分为两个部分:
- bootfs 主要包含bootloader和kernel,bootloader主要时引导加载kernel,linux刚启动时会加载bootfs文件系统,「docker镜像的最底层是bootfs,镜像没有内核,所有镜像公用宿主机内核」
- rootfs 在bootfs之上,包含liunx系统中的/dev,/proc,/bin等标准目录,不同的Linux系统各不相同,所有每个容器为其提供不同的rootfs,对于一个精简的os,rootfs可以很小,所有docker比虚拟机小得多
镜像分层
镜像分层为了复用共享
数据卷
功能:实现容器数据持久化,容器之间共享数据
命令添加
docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名
docker run -it -d -v /tomcatVolume:/containerVolume --name myTomcat -p 8888:8080 tomcat
docker run -it -d -v /tomcatVolume:/containerVolume:ro --name myTomcat -p 8888:8080 tomcat
:ro
options 表示read-only,在容器中只读,只允许主机中修改
数据卷容器
「命名的容器挂载数据卷,其它容器通过挂载这个实现数据共享,挂载数据卷的容器,称之为数据卷容器」
实现不同容器数据的共享
docker run -it --name container2 --volumes-from container1 centos
Dockerfile
Dockerfile是用来构建Docker镜像的构建文件,是由一些列命令和参数构成的脚本
Dockerfile基本规则
- 每条保留字指令都必须为大写字母且后面要跟随至少一个参数
- 指令按照从上到下,顺序执行
- #表示注释
- 每条指令都会创建一个新的镜像层,并对镜像进行提交
Dockerfile的大致流程
- docker从基础镜像运行一个容器
- 执行一条指令并对容器做出修改
- 执行类似docker commit 的操作提交一个新的镜像层
- docker在基于刚提交的镜像运行一个新的容器
- 执行Dockerfile中的下一条指令直到所有指令都执行完成
Dockerfile保留关键字
FROM
基础镜像,表示当前新镜像是基于哪个镜像的
MAINTAINER
镜像的维护人员的姓名+邮箱地址
RUN
容器构建时需要运行的命令
EXPOSE
当前容器对外暴露出的端口
WORKDIR
指定在创建容器后,终端默认登入进来的工作目录
ENV
用来在构建镜像过程中设置的环境变量
ADD
将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包
COPY
只拷贝不解压
VOLUME
设置数据卷,用于数据保存和持久化工作
CMD
指定一个容器启动时要运行的命令,可以有多个CMD指令,但只有最后一个生效,会被docker run 之后的参数替换
ENTRYPOINT
和CMD不同的是 docker run 之后的参数会在ENTRYPOINT后面追加
ONBUILD
当构建一个被继承的Dockerfile时运行命令,父镜像在被继承后父镜像的ONBUILD被触发
Docker Compose
Compose是一个用于定义和运行多容器Docker应用程序的工具。
安装
compose 配置参考
默认名称为docker-compose.yml
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于