写点什么

docker 入个门

用户头像
书旅
关注
发布于: 2020 年 08 月 15 日
docker入个门

Docker中三个基础概念:镜像、容器、仓库

镜像(Image)

操作系统分为内核和用户空间。对于 Linux 而言,内核启动后,会挂载 root 文件系统为其提供用户空间支持。而 Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:18.04 就包含了完整的一套 Ubuntu 18.04 最小系统的 root 文件系统。Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变



分层存储

因为镜像包含了操作系统完整的 root 文件系统,其体积还是很巨大的,所以引入了 Unios FS 技术,将其设计为分层存储的架构。所以镜像不是那种 ISO 打包文件,镜像是一个虚拟的概念,它是由一组文件系统构成,或者说多层文件系统联合构成



镜像在构建时,是一层层构建,上一层是下一层的基础,每一层构建结束就不会在被修改,后一层任何修改只会作用在当前层。例如删除上一层文件,不会真的删除该文件,而是会标记删除然后隐藏起来,最终运行容器的时候不会被看见,但是会一直跟随镜像。因此构建镜像时需要小心,不要添加不需要的东西,任何额外的东西都要在本层构建完之前清除



分层存储使镜像的定制和复用变得容易,可以用之前做好的镜像作为基础层,然后添加新的层,定制自己所需要的东西,构建新的镜像



容器(Container)

镜像和容器的关系,就像是面向对象程序中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建,启动,停止,删除,暂停等



每一个容器运行时,是以镜像为基础层,在其上创建一个当前容器的存储层,我们可以称这个为容器运行时读写而准备的存储层为容器存储层



容器存储层的生存周期和容器一样,容易消亡时,容器存储层也随之消亡,因此,任何保存于容器存储层的信息都会随容器的删除而丢失



按照docker最佳实践的要求,容器不应该向其存储层内写入任何数据,容器存储层要保持无状态化。所有的文件写入操作,都应该使用数据卷,或者绑定宿主目录,在这些位置的读写会跳过容器存储层,直接对宿主(或网络存储)发生读写,其性能和稳定性更高



数据卷的生存周期独立于容器,容器消亡,数据卷不会消失。因此,使用数据卷后,容器可以随意删除,重新run,数却不会丢失



仓库(Repository)

镜像构建完成后,可以很容易的在当前宿主机上运行,但是,如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry 就是这样的服务



一个 Docker Registry 可以有多个 仓库(Repository),每个仓库可以含多个标签(Tag),每个标签都是一个镜像



最初我没有搞懂 Docker Registry 和 仓库(Repository),简单来说就是 Docker Registry 是注册服务器,用于管理镜像仓库,起到服务器的作用,仓库(Repository)就是存储镜像,起到存储镜像的作用。默认的 Docker Registry 就是 Docker Hub,其中拥有很多高质量的镜像



Docker中常用命令

镜像相关命令

#查看本地所有镜像
docker images = docker image ls
#拉取一个镜像(理解成下载)
docker pull image-name 例:docker pull registry.hub.docker.com/object:default 即从服务器registry.hub.docker.com中的object仓库下载标记为default的镜像
#从Docker Hub查找镜像
docker search [OPTIONS] TERM
OPTIONS说明:
--automated :只列出 automated build类型的镜像;
--no-trunc :显示完整的镜像描述;
-s :列出收藏数不小于指定值的镜像;
例:docker search -s 10 php 从Docker Hub查找所有镜像名包含php,并且收藏数大于10的镜像
#删除镜像
docker rmi 镜像名/镜像ID = docker image rm 镜像名/镜像ID
#查看镜像的创建历史
docker history 镜像ID
#根据一个 Dockerfile 构建一个镜像
docker build [OPTIONS] PATH | URL | -
OPTIONS说明:
--build-arg=[] :设置镜像创建时的变量;
--cpu-shares :设置 cpu 使用权重;
--cpuset-cpus :指定使用的CPU id;
--cpuset-mems :指定使用的内存 id;
-f :指定要使用的Dockerfile路径;
--force-rm :设置镜像过程中删除中间容器;
--isolation :使用容器隔离技术;
-m :设置内存最大值;
--no-cache :创建镜像的过程不使用缓存;
实例:
使用当前目录的 Dockerfile 创建镜像,标签为 runoob/ubuntu:v1。
docker build -t runoob/ubuntu:v1 .
使用URL github.com/creack/docker-firefox 的 Dockerfile 创建镜像。
docker build github.com/creack/docker-firefox
也可以通过 -f Dockerfile 文件的位置:
$ docker build -f /path/to/a/Dockerfile .

容器相关命令

#查看所有正在运行的容器
docker ps = docker container ls
#显示所有容器(包括推出的容器)
docker ps -a
#停止运行的容器
docker stop = docker container stop
e.g docker stop container-ID/container-name
#启动容器
docker start container-ID/container-name
#重启容器
docker restart container-ID/container-name
#单个单个删除容器 - 容器必须是退出状态
docker rm = docker container rm
e.g docker rm container-ID/container-name
#显示已经退出的容器 ID
docker ps -f "status=exited" -q
#查看容器详细信息
docker inspect = docker contaienr inspect
e.g docker inspect container-ID
#查看容器运行时产生的日志
docker logs = docker container logs
e.g docker logs container-ID
#进入容器
docker exec -it container-ID bash

仓库相关命令

#登陆到一个Docker镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub
docker login [OPTIONS] [SERVER]
OPTIONS说明:
-u :登陆的用户名
-p :登陆的密码
例;docker login -u 用户名 -p 密码
#登出一个Docker镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub
docker logout
#从镜像仓库中拉取或者更新指定镜像
docker pull image-name 例:docker pull registry.hub.docker.com/object:default 即从服务器registry.hub.docker.com中的object仓库下载标记为default的镜像
#将本地的镜像上传到镜像仓库,要先登陆到镜像仓库
docker push image-name:[tag]
例:docker push myapache:v1

Docker run相关命令

#交互式运行一个 image
docker run -it image-name
#后台执行一个image
docker run -d image-name
#将容器的 80 端口映射到 docker 主机的 80 端口
docker run -p 80:80 image-name
#使用docker镜像ubuntu:myubuntu以后台模式启动一个容器,并将容器命名为mynginx。
docker run --name mydocker -d ubuntu:myubuntu
#使用镜像ubuntu:myubuntu以后台模式启动一个容器,并将容器的80端口映射到主机随机端口。
docker run -P -d ubuntu:myubuntu
#使用镜像 ubuntu:myubuntu,以后台模式启动一个容器,将容器的 80 端口映射到主机的 80 端口,主机的目录 /data 映射到容器的 /data。
docker run -p 80:80 -v /data:/data -d ubuntu:myubuntu
#使用镜像ubuntu:myubuntu以交互模式启动一个容器,在容器内执行/bin/bash命令
docker run -it ubuntu:myubuntu /bin/bash

Docker exec相关操作

可以进入在运行中或停止运行的容器中操作相关的命令
#交互式进入后执行 /bin/bash 进行命令操作
docker exec -it container-ID /bin/bash

Docker commit相关操作

#从容器创建一个新的镜像
docker commit
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
-a :提交的镜像作者;
-c :使用Dockerfile指令来创建镜像;
-m :提交时的说明文字;
-p :在commit时,将容器暂停。
例:docker commit -m "提交信息" --a "作者" 镜像id 新镜像名





发布于: 2020 年 08 月 15 日阅读数: 94
用户头像

书旅

关注

公众号:IT猿圈 2019.04.11 加入

还未添加个人简介

评论 (2 条评论)

发布
用户头像
容器(Conatiner)英文写错了吧,大侠
2020 年 10 月 12 日 11:42
回复
已修改,谢谢~
2020 年 10 月 12 日 15:04
回复
没有更多了
docker入个门