Docker初入门

Docker简介

Docker理念:“Build, Ship and Run Any App, Anywhere"(一次封装,到处运行)

Docker技术:解决了运行环境和配置问题的软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术。

虚拟机的缺点:1. 资源占用多;2. 冗余步骤多;3. 启动慢

Docker是内核级虚拟化。

镜像( image )Docker镜像( image )就是一个只读的模板。镜像可以用来创建Docker容器,一个镜像可以创建很多容器。

容器( container )Docker利用容器( container )独立运行的一个或一组应用。容器是用镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。可以把容器看作是一个简易版的Linux环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。容器的定义和镜像几乎一模一样,唯一区别在于容器的最上面那一层是可读可写的。

仓库( repository ):是集中存放镜像文件的场所。仓库(Repository)和仓库注册服务器(Registry) 是有区别的。仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多镜像,每个镜像有不同的标签(tag)。 
阿里云镜像加速配置:(可以参考ubuntu配置docker的阿里云镜像加速器 - 北漂的尘埃 - 博客园 (cnblogs.com)

Docker工作原理:Docker是一个Client-Server结构的系统,Docker守护进程运行在主机上,然后通过Socket连接从客户端访问,守护进程从客户端接受命令并管理运行在主机上的容器。容器,是一个运行时环境,就是我们前面说到的集装箱。
Docker常用命令

 1 docker version
 2 docker info
 3 docker --help
 4 docker images 
 5 -a 列出本地所有的镜像(含中间映射层)
 6 -q 只显示镜像ID
 7 --digests 显示镜像的摘要信息
 8 --no-trunc 显示完整的镜像信息
 9 docker search
10 --no-trun 显示完整的镜像描述
11 -s 列出收藏数不小于指定值的镜像
12 --automated 只列出 automated build类型的镜像
13 docker pull 
14 docker rmi
15 docker rm -f 
16 docker rmi -f ${docker images -qa}
17 docker run -d 
18 docker logs -f -t --tail 容器ID
19 -t 是加入时间戳
20 -f 跟随最新的日志打印
21 --tail 数字显示最后多少条
22 # 查看容器内部细节
23 docker inspect 容器ID
24 docker exec -it 容器ID
25 docker attach 容器ID
26 docker cp 容器ID:容器内路径 目的主机路径
27 docker commit -m="提交的描述信息" -a="作者" 容器ID 要创建的目标镜像名:[标签名]
28 docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名
29 # 带上了只读权限
30 docker run -it -v /宿主机绝对路径目录:/容器内目录**:ro** 镜像名

Docker镜像

镜像:是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的有内容,包括代码、运行时、库、环境变量和配置文件。

UnionFS(联合文件系统)Union文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual file system)。Union文件系统是Docker镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像)可以制作各种具体的应用镜像。

UnionFS(联合文件系统)的特性:一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录。

Docker镜像采用分层结构的原因:共享资源。比如,有多个镜像都从相同的base镜像构建而来,那么宿主机只需在磁盘上保存一份base镜像, 同时内存中也只需加载一份base镜像,就可以为所有容器服务了。而且镜像的每一层都可以被共享。

Docker容器数据卷

容器数据卷:持久化容器数据,当容器删除时,将需要的数据被保留下来。完全独立于容器的生命周期。通过容器间继承和共享数据实现容器数据的持久化。

容器数据卷特点:1. 数据卷可在容器之间共享或重用数据;2. 卷中的更改可以直接生效;3. 数据卷中的更改不会包含在镜像的更新中;4. 数据卷的生命周期一直持续到没有容器使用它为止。

可能错误:Docker挂载主机目录Docker访问出现cannot open directory . Permission denied 解决办法:在挂载目录后多加一个--privileged=true参数即可

DockerFile解析

Dockerfile:用来构建Docker镜像的构建文件,由一系列命令和参数构成的脚本。

Docker执行Dockerfile的大致流程:1. docker从基础镜像运行一个容器;2. 执行一条指令并对容器作出修改;3. 执行类似docker commit的操作提交一个新的镜像层;4. docker再基 于刚提交的镜像运行一个新容器;5. 执行dockerfile中的下一条指令直到所有指令都执行完成。

DockerfileDocker镜像与Docker容器:分别代表软件的三个不同阶段,Dockerfile是软件的原材料,Docker镜像是软件的交付品,Docker容器则可以认为是软件的运行态。Dockerfile面向开发,Docker镜像成为交付标准,Docker容器则涉及部署与运维,三者缺一不可,合力充当Docker体系的基石。

 1 FROM:基础镜像,当前新镜像是属于哪个基础镜像的
 2 MAINTAINER:镜像维护者的昵称和邮箱信息
 3 RUN:容器构建时需要运行的命令
 4 EXPOSE:当前容器对外暴露出的端口
 5 WORKDIR:指定在创建容器后,终端默认登陆进来的工作目录,一个落脚点
 6 ENV:用来在构建镜像过程中设置环境变量
 7 ADD:将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理url和解压tar压缩包
 8 COPY:类似ADD,拷贝文件和目录到镜像中。将从构建上下文目录中<源路径>的文件/目录复制到新的一层的镜像内的<目标路径>位置
 9 VOLUME:容器数据卷,用于数据保存和持久化工作
10 CMD:指定一个容器启动时要运行的命令,DockerFile中可以有多个CMD命令,但只有最后一个生效,CMD会被docker run之后的参数替换
11 ENTRYPOINT:指定一个容器启动时要运行的命令,ENTRYPOINT 的目的和CMD一样,都是在指定容器启动程序及参数
12 ONBUILD:当构建一个被继承的DockerFIle时运行命令,父镜像在被子镜像继承后父镜像的onbuild被触发

将镜像推送到阿里云

 

1 $ sudo docker login --username=white3e registry.cn-shenzhen.aliyuncs.com
2 $ sudo docker tag [ImageId] registry.cn-shenzhen.aliyuncs.com/ggccqq/mycentos:[镜像版本号]
3 $ sudo docker push registry.cn-shenzhen.aliyuncs.com/ggccqq/mycentos:[镜像版本号]
4 其中[ImageId][镜像版本]自己填写
posted @ 2021-07-17 20:22  北漂的尘埃  阅读(50)  评论(0编辑  收藏  举报