Docker学习2
Docker学习Docker镜像是什么镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件。UnionFS(联合文件系统)UnionFS是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下。UnionFS是Doc
文章目录
Docker学习
Docker镜像
是什么
-
镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件。
-
UnionFS(联合文件系统)
-
UnionFS是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下。
-
UnionFS是Docker镜像的基础。镜像可以通过分层来进行继承,基于基础镜像,可以制作各种具体的应用镜像。
-
特性:
一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录。
-
-
Docker镜像加载原理
-
分层的镜像
-
为什么Docker镜像要采用这种分层的结构
- 最大的一个好处就是——共享资源
- 例如:有多个镜像都是从相同的base镜像构建而来,那么宿主机只需要在磁盘上保存一份base镜像,同时内存中也只需要加载一份base镜像,就可以为所有容器服务了。而且镜像的每一层都可以被共享。
特点
- Docker镜像都是只读的
- 当容器启动时,一个新的可写层被加载到镜像的顶部
- 这一层通常被称作**“容器层”,容器层之下的都叫“镜像层”**。
Docker镜像commit操作补充
-
docker commit 提交容器副本使之成为一个新的镜像
-
docker commit -m="提交的描述信息" -a="作者" 容器ID 要创建的目标镜像名:[标签名]
Docker容器数据卷
是什么
类似Redis的RDB和AOF文件
能干嘛
- 容器的持久化
- 容器间继承+共享数据
数据卷
容器内添加
-
直接命令添加
-
命令
docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名
-
命令(带权限)
docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名 #只读
-
-
DockerFile添加
-
VOLUME ["/dataVolumeContainer","/dataVolumeContainer2","/dataVolumeContainer3"]
-
说明:
- 处于可移植和分享的考虑,用-v 主机目录:容器目录这种方法不能够直接在DockerFile中实现。
- 由于宿主机目录是依赖于特定宿主机的,并不能够保证在所有的宿主机上都存在这样的特定目录。
-
File构建
# voulme test FROM centos:7 VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"] CMD echo "finished,-------success1" CMD /bin/bash
-
build后生成镜像
docker build -f /myDocker/DockerFile -t lixi233/centos .
-
run容器
docker run -it lixi233/centos
-
通过上述步骤,容器内的卷目录地址已经知道对应的主机目录地址在哪?
-
主机对应默认地址
-
备注
-
数据卷容器
-
是什么
命名的容器挂载数据卷,其它容器通过挂载这个(父容器)实现数据共享,挂载数据卷的容器,称之为数据卷容器。
-
docker run -it --name dc02 --volumes-from dc01 lixi233/centos
-
共享的容器会共享数据
-
容器之间配置信息的传递,数据卷的生命周期一直持续到没有容器使用它为止
DockerFile解析
是什么
DockerFile是用来构建Docker镜像的的构建文件,是由一系列命令和参数构成的脚本。
DockerFile构建过程解析
基础知识
- 每条保留字指令都必须为大写且后面要跟随至少一个参数
- 指令按照从上到下,顺序执行
- “#” 表示注释
- 每条指令都会创建一个新的镜像层,并对镜像进行提交
Docker执行DockerFile的大致流程
- docker从基础镜像运行一个容器
- 执行一条指令并对容器做出修改
- 执行类似docker commit的操作提交一个新的镜像层
- docker再基于刚提交的镜像运行一个新容器
- 执行dockerfile中的下一条指令直到所有的指令都执行完成
DockerFile体系结构(保留字指令)
-
FROM
基础镜像,当前新镜像是基于哪个镜像的
-
MAINTAINER
镜像维护者的姓名和邮箱地址
-
RUN
容器构建时需要运行的命令
-
EXPOSE
当前容器对外暴露的端口
-
WORKDIR
指定在创建容器后,终端默认登陆进来的工作目录,一个落脚点
-
ENV
用来在构建镜像过程中设置环境变量
如:ENV MY_PATH /usr/mytest
这个环境变量可以在后续的任何RUN指令中使用
比如:WORKDIR $MY_PATH
-
ADD
将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包
-
COPY
类似ADD
将从构建上下文目录中<源路径>的文件/目录复制到新的一层镜像内的<目标路径>位置
COPY src dest COPY["src","dest"]
-
VOLUME
容器数据卷,用于保存数据和持久化工作
-
CMD
- 指定一个容器启动时要运行的命令
- DockerFile中可以有多个CMD命令,但只有最后一个生效,CMD会被docker run之后的参数替换
-
ENTRYPOINT
- 指定一个容器启动时要运行的命令
- ENTRYPOINT的目的和CMD一样,都是指定容器启动程序及参数
-
ONBUILD
当构建一个被继承的DockerFile时运行命令,父镜像在被子镜像继承后父镜像的ONBUILD被触发
DockerFile案例
自定义镜像
-
Base镜像(scratch):DockerHub中99%的镜像都是通过在base镜像中安装和配置需要的软件构建出来的
-
自定义编写镜像mycentos
- 初始的centos运行时默认进入路径是pwd
- 默认不支持vim
- 默认不支持ifconfig
- 自定义的mycentos
- 登录后的默认路径
- vim编辑器
- 查看网络配置ifconfig支持
-
编写
FROM centos:7 MAINTAINER lixi233<1452594689@qq.com> ENV mypath /tmp WORKDIR $mypath RUN yum -y install vim RUN yum -y install net-tools EXPOSE 80 CMD echo $mypath CMD echo "success--------------ok" CMD /bin/bash
-
构建
docker build -f DockerFile2 -t mycentos:1.3 .
-
运行
docker run -it mycentos:1.3
-
列出镜像的变更历史
docker history 镜像ID
Docker常用安装
总体步骤
- 搜索镜像
- 拉取镜像
- 查看镜像
- 启动镜像
- 停止容器
- 移除容器
安装mysql
-
docker hub上查找mysql镜像
docker search mysql
-
从docker hub上拉取mysql镜像到本地
docker pull mysql
-
运行镜像
docker run -p 3306:3306 --name mysql_01 -v /usr/local/mysql/conf:/etc/mysql/conf.d -v /usr/local/mysql/logs:/logs -v /usr/local/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=********* mysql
-
交互
docker exec -it 容器ID /bin/bash
-
数据备份
docker exec 容器ID sh -c 'exec mysqldump --all-databases -uroot -p"*****" ' > /宿主机路径/***.sql
安装redis
-
docker search redis
-
docker pull redis
-
docker run -p 6379:6379 --name redis_01 -v /usr/local/redis/data:/data -v /usr/local/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf -d redis redis-server /usr/local/etc/redis/redis.conf [--appendonly yes] [--requirepass *******]
-
docker exec -it 容器ID redis-cli
更多推荐
所有评论(0)