写点什么

Docker

用户头像
关注
发布于: 2020 年 11 月 10 日

Docker 是一个开放源代码软件,是一个开放平台,用于开发应用、交付(shipping)应用、运行应用。 Docker 允许用户将基础设施(Infrastructure)中的应用单独分割出来,形成更小的颗粒(容器),从而提高交付软件的速度。[1]Docker 容器与虚拟机类似,但二者在原理上不同。容器是将操作系统层虚拟化,虚拟机则是虚拟化硬件,因此容器更具有便携性、高效地利用服务器。 容器更多的用于表示 软件的一个标准化单元。由于容器的标准化,因此它可以无视基础设施(Infrastructure)的差异,部署到任何一个地方。另外,Docker 也为容器提供更强的业界的隔离兼容。[2]Docker 利用Linux核心中的资源分离机制,例如cgroups,以及 Linux 核心名字空间(namespaces),来创建独立的容器(containers)。这可以在单一 Linux 实体下运作,避免引导一个虚拟机造成的额外负担[3]。Linux 核心对名字空间的支持完全隔离了工作环境中应用程序的视野,包括行程树、网络、用户 ID 与挂载文件系统,而核心的 cgroup 提供资源隔离,包括CPU存储器、block I/O 与网络。从 0.9 版本起,Dockers 在使用抽象虚拟是经由libvirtLXC与 systemd - nspawn 提供界面的基础上,开始包括 libcontainer 库做为以自己的方式开始直接使用由 Linux 核心提供的虚拟化的设施,依据行业分析公司“451 研究”:“Dockers 是有能力打包应用程序及其虚拟容器,可以在任何 Linux 服务器上运行的依赖性工具,这有助于实现灵活性和便携性,应用程序在任何地方都可以运行,无论是公用云端服务器私有云端服务器、单机等。”

基本描述


image:镜像	repository:镜像所属仓库 eg:docker.io/centos	tag:同一个基础镜像的不同的标签	image id:镜像的ID	created:镜像被创建出来距离现在的时间	size:镜像大小	container:一个镜像实例	container id:实例的id	image:实例所使用的镜像,image.repository:image.tag	commond:创建实例首次启动是附加的命名	created:实例被创建出来距离现在的时间	status:实例现在的运行状态	ports:	names:实例的别名
复制代码

安装、登录


# yum安装yum install docker# docker 基本命令docker `COMMAND`# 登录到dockerHub可以拉取开放公有镜像、私有自定义镜像docker login# 退出登录docker logout
复制代码

基本操作

创建运行实例

docker run


# 获得一个基本centos镜像docker pull centos# 根据centos镜像启动一个名字叫'newContainer'的实例 同时启动容器中的一个进程docker run -t -i -d --name newContanier centos:latest --privileged  centos /sbin/init# 进入刚才创建的容器  docker attach [容器id|name]  docker extc -it [id|name] /bin/bash# 查看所有的container 会发现刚才启动的实例docker container ls -a# 容器经过修改之后可以重新打包成镜像docker commit -m '提交说明' f377eda repository/imagename:tag# 查看所有的镜像  会发现刚刚生成的镜像docker image ls -a
复制代码

docker build

# version 1.0 基本版# 指令必须大写# FROM指令 指定基础容器,必须第一行FROM centos:latestMAINTAINER jin "jin@xxx.com"# ENV指令 设置环境变量 当需要忽略缓存重新构建镜像修改此参数 可多个ENV REFRESHED_AT 2019-12-28# 设置JAVA_HOMEENV JAVA_HOME /var/lib/jdk# 其他指令中调用  $JAVA_HOME
# VOLUME指令 指定共享卷集(映射容器与宿主机目录),该命令将会为所有基于本镜像创建的容器创建一个同名挂载点# run 命令启动的时候 使用 -v 选项 指定映射路径VOLUNE ["/opt/project", "/data"]
# RUN指令 镜像被构建时要执行的命令,可多个RUM yum update -yRUN yum insstall -y nginx
# ADD指令 将构建环境上下文的文件或者目录复制到镜像中。 eg: ADD 源路径 目标路径# 目标路径不存在则容器默认创建,原则上以文件对应文件 以目录对应目录# 源路径为文件 目标路径以"/"结尾 docker认为目标路径为目录会将源文件放入该目录下ADD software.lic /opt/application/# 源路径为文件 目标路径【非】"/"结尾 源文件内容覆盖,名称为目标名称ADD software.lic /opt/application/software_new.lic# 源路径为目录 目标路径以"/"结尾 源路径下文件拷贝到目标路径下(不包含/data/ 这一级别目录)ADD /data/ /data/
# WORKDIR指令 为容器中接下来的命令指定工作目录WORKDIR /opt/webapp/dbRUN bundle install# 切换目录,设置ENTRYPOINT指令来启动nginx命令WORKDIR /var/lib/nginx# ENTRYPOINT指令 容器启动的是要执行的程序,多配合CMD指令一起使用(会接受docker run的参数、或CMD指令的参数)ENTRYPOINT ["nginx"]# CMD指令 用法一:为ENTRYPOINT指令传递参数CMD ["-h"]# CMD指令 用法二:容器启动时要执行的命令,仅执行一个,当有多个的时候执行最后一个# docker run 命令最后的参数会覆盖CMD指令的参数CMD /sbin/init# !!!如果想要执行多条命令 可使用类似supervisor的管理工具
复制代码

镜像管理

私有仓库(推荐)


# 拉取官方镜像docker pull registry# 根据官方镜像创建容器docker run -itd --name my_repository -p 5000:5000 registry# 对镜像打标签 # 推至私用仓的镜像标签命名  docker tag 	source_image[:tag] host:port/[username]/repository[:tag]docker tag ubuntu localhost:5000/ubuntu# 推送至私有仓库docker push localhost:5000/ubuntu
复制代码

输出文件

save、load
# 针对镜像(image)操作。用作编排的多个镜像组合# 镜像输出为tar文件docker save -p /home/my_save_image_ubuntu.tar ubuntu:latest# tar载入为镜像docker load -i /home/my_save_image_ubuntu.tar
复制代码
export、import
# 针对容器(container)操作。用作创建基础镜像#容器输出为tar文件docker export 容器id|容器名称 > example.tar#tar文件导入为镜像 允许自定义镜像名称docker import example.tar > test/example:1.0
复制代码


发布于: 2020 年 11 月 10 日阅读数: 35
用户头像

关注

还未添加个人签名 2020.11.10 加入

还未添加个人简介

评论

发布
暂无评论
Docker