Docker学习笔记

什么是docker

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上。

docker能解决什么问题

高效有序利用资源,机器资源有限,单台机器得部署多个应用,应用之间互相隔离。

应用之间不能发生资源抢占,每个应用只能使用事先注册申请的资源。

一次编译,到处运行,类似于java代码,应用及依赖的环境构建一次,可以到处运行。


Docker基本概念


Docker镜像

Docker镜像(Image)类似于虚拟机的镜像,可以将他理解为一个面向Docker引擎的只读模板,包含了文件系统。

例如:一个镜像可以完全包含了Ubuntu操作系统环境,可以把它称作一个Ubuntu镜像。镜像也可以安装了Apache应用程序(或其他软件),可以把它称为一个Apache镜像。

镜像是创建Docker容器的基础,通过版本管理和增量的文件系统,Docker提供了一套十分简单的机制来创建和更新现有的镜像。用户可以从网上下载一个已经做好的应用镜像,并通过命令直接使用。总之,应用运行是需要环境的,而镜像就是来提供这种环境。

Docker容器

Docker容器(Container)类似于一个轻量级的沙箱子(因为Docker是基于Linux内核的虚拟技术,所以消耗资源十分少),Docker利用容器来运行和隔离应用。

容器是从镜像创建的应用运行实例,可以将其启动、开始、停止、删除,而这些容器都是相互隔离、互不可见的。

可以吧每个容器看作一个简易版的Linux系统环境(包括了root用户权限、进程空间、用户空间和网络空间),以及与运行在其中的应用程序打包而成的应用盒子。

镜像自身是只读的。容器从镜像启动的时候,Docker会在镜像的最上层创建一个可写层,镜像本身将保持不变。就像用ISO装系统之后,ISO并没有什么变化一样。

Docker仓库

Docker仓库(Repository)类似与代码仓库,是Docker集中存放镜像文件的场所。

有时候会看到有资料将Docker仓库和注册服务器(Registry)混为一谈,并不严格区分。实际上,注册服务器是存放仓库的地方,其上往往存放着多个仓库。每个仓库集中存放某一类镜像,往往包括多个镜像文件,通过不同的标签(tag)来进行区分。例如存放Ubuntu操作系统镜像的仓库,称为Ubuntu仓库,其中可能包括14.04,12.04等不同版本的镜像。

根据存储的镜像公开分享与否,Docker仓库分为公开仓库(Public)和私有仓库(Private)两种形式。

目前,最大的公开仓库是Docker Hub,存放了数量庞大的镜像供用户下载。国内的公开仓库包括Docker Pool等,可以提供稳定的国内访问。如果用户不希望公开分享自己的镜像文件,Docker也支持用户在本地网络内创建一个只能自己访问的私有仓库。

当用户创建了自己的镜像之后就可以使用push将它上传到指定的公有或则私有仓库。这样用户下次在另一台机器上使用该镜像时,只需将其从仓库pull下来就可以了。


Docker基本命令


拉取镜像

docker image pull 镜像名

查看镜像列表

docker images

或者

docker image ls

删除镜像

docker irm image_id

或者

docker image rm 镜像名或镜像id

镜像备份

docker save -o 保存的文件路径以及文件名 镜像名

镜像迁移/加载到本地

docker load -i 镜像路径

容器相关操作

创建容器

docker run -itd --restart always --name 容器名 镜像名  执行的命令


启动容器

docker container start container_name或container_id

停止容器

docker container stop container_name或container_id

kill容器

docker container kill container_name或container_id

查看容器列表

# 查看正在运行的容器

docker ps 或 docker container ls

# 查看所有容器

docker ps -a 或 docker container ls --all

向容器传入和执行命令

docker container exec container_id 命令

进入容器终端

docker attach container_id

docker container exec container_id /bin/bash

容器转入后台运行

Ctrl + p 然后 Ctrl + q

删除容器

docker rm container_id

docker container rm container_id

容器保存为镜像

docker commit 容器名 镜像名



DockerFile使用


保留字:


1、FROM

指定基础镜像,必须为第一个命令

2、MAINTAINER

维护者信息

3、RUN

构建镜像时执行的命令

4、ADD

将本地文件添加到容器中,tar类型文件会自动解压(网络压缩资源不会被解压),可以访问网络资源,类似wget

5、COPY

功能类似ADD,但是是不会自动解压文件,也不能访问网络资源

6、CMD

构建容器后调用,也就是在容器启动时才进行调用。

7、ENTRYPOINT

配置容器,使其可执行化。配合CMD可省去"application",只使用参数。

ENTRYPOINT与CMD非常类似,不同的是通过docker run执行的命令不会覆盖ENTRYPOINT,而docker run命令中指定的任何参数,都会被当做参数再次传递给ENTRYPOINT。Dockerfile中只允许有一个ENTRYPOINT命令,多指定时会覆盖前面的设置,而只执行最后的ENTRYPOINT指令。

8、LABEL

用于为镜像添加元数据

9、ENV

设置环境变量

10、EXPOSE

指定于外界交互的端口

EXPOSE并不会让容器的端口访问到主机。要使其可访问,需要在docker run运行容器时通过-p来发布这些端口,或通过-P参数来发布EXPOSE导出的所有端口

11、VOLUME

用于指定持久化目录

12、WORKDIR

工作目录,类似于cd命令

13、USER

指定运行容器时的用户名或 UID,后续的 RUN 也会使用指定用户。使用USER指定用户时,可以使用用户名、UID或GID,或是两者的组合。当服务不需要管理员权限时,可以通过该命令指定运行用户。并且可以在之前创建所需要的用户

使用USER指定用户后,Dockerfile中其后的命令RUN、CMD、ENTRYPOINT都将使用该用户。镜像构建完成后,通过dockerrun运行容器时,可以通过-u参数来覆盖所指定的用户。

14、ARG

用于指定传递给构建运行时的变量

15、ONBUILD

用于设置镜像触发器

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容