写在前面
细数当前最流行的技术莫过于容器化和人工智能了,而容器化技术能有今天的热度,Docker可谓功不可没。
让我们一起来回顾一下Docker
是什么?
- 是一种虚拟化技术
- 能够将应用程序自动部署到容器
- 使用Go语言开源引擎
- 能够非常方便的将我们的应用程序以及运行所以来的环境部署到开发,测试及生产环境。一次编译,随处可用
有什么优势?
- 提供了简单轻量的建模方式
- 职责的逻辑分离
- 快速高效的开发生命周期
- 让应用部署具备了高可移植性
- 更方便的使用面向服务的架构
Docker的使用场景?
- 使用Docker容器开发,测试,部署服务
- 创建隔离的运行环境
- 搭建测试环境
- 构建多用户的平台即服务(PaaS)基础设施
- 提供软件即服务(SaaS)应用程序
- 高性能,超大规模的宿主机部署
常用命令
查看已安装的Docker版本
docker version
我们知道docker采用的是C/S架构的方式,所以我们可以看到一个是client端,一个是server端(守护进程)。
查看docker是否在运行以及所有状态的容器实例
docker ps // 列出目前正在运行的containers docker ps -a //列出所有的docker containers,包括没有运行的
我们用下面的命令来尝试运行一个容器化的web server
docker run -d -p 80:80 --name webserver nginx
如果nginx这个镜像在本地没有找到,docker就会自动从docker hub 上下载到本地并且运行在80端口,我们输入 http://localhost 就可以看到已经运行成功
如果我们不手动停止刚才的container的话,它就一直会运行。
docker stop webserver
docker start webserver
在docker安装成功之后会在机器上启动客户端,可以进行一些基础的设置
Docker命令从功能上来说分为下面几个部分:
容器生命周期管理
包含 run ,start/stop/restart , kill , rm , pause/unpause , create , exec ,以run命令举例,用它来创建并运行一个容器,语法如下:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
OPTIONS说明:
-a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
-d: 后台运行容器,并返回容器ID;
-i: 以交互模式运行容器,通常与 -t 同时使用;
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
--name="nginx-lb": 为容器指定一个名称;
--dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
--dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;
-h "mars": 指定容器的hostname;
-e username="ritchie": 设置环境变量;
--env-file=[]: 从指定文件读入环境变量;
--cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定CPU运行;
-m :设置容器使用内存最大值;
--net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container:<name|id> 四种类型;
--link=[]: 添加链接到另一个容器;
--expose=[]: 开放一个端口或一组端口;
容器操作
包含 ps , inspect ,top , attach , events , logs , wait , export , port
docker ps [OPTIONS]
OPTIONS说明:
-a :显示所有的容器,包括未运行的。
-f :根据条件过滤显示的内容
--format :指定返回值的模板文件。
-l :显示最近创建的容器。
-n :列出最近创建的n个容器。
--no-trunc :不截断输出。
-q :静默模式,只显示容器编号。
-s :显示总的文件大小。
容器rootfs命令
包含 commit ,cp , diff
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]] //从容器创建一个新的镜像。
OPTIONS说明:
-a :提交的镜像作者;
-c :使用Dockerfile指令来创建镜像;
-m :提交时的说明文字;
-p :在commit时,将容器暂停。
镜像仓库
包含 login , pull , push , search
docker login [OPTIONS] [SERVER] //登陆到一个Docker镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub
OPTIONS说明:
-u :登陆的用户名
-p :登陆的密码
本地镜像管理
包含 images , rmi , tag , build , history , save , import
docker images [OPTIONS] [REPOSITORY[:TAG]] //列出本地镜像
OPTIONS说明:
-a :列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层)
--digests :显示镜像的摘要信息
-f :显示满足条件的镜像;
--format :指定返回值的模板文件;
--no-trunc :显示完整的镜像信息;
-q :只显示镜像ID。
info|version
显示docker系统相关信息
以上列出的只是其中的几个命令,详细命令可参考官网或者 docker --help 来查看
https://docs.docker.com/edge/engine/reference/commandline/docker/
写在最后
docker官方提供了很好的文档支持,社区也非常的活跃,非常易于学习。
容器虚拟化技术已然是未来的主流,应该是每个coder都需要去了解和学习的。