Docker 运维 - 从零开始学习
Posted serendipity_cat
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker 运维 - 从零开始学习相关的知识,希望对你有一定的参考价值。
Docker 运维 - 从零开始学习
- 一、Docker概述
- 二、什么是容器?
- 三、Docker的特点
- 四、Docker与传统虚拟机的区别
- 五、Docker 核心概念
- 六、Docker 安装部署
- 七、容器镜像加速器
- 八、Docker 镜像操作
- 九、Docker 容器操作
- 十、DockerFile
一、Docker概述
更新时间:2021年5月19日
Docker是一个在Linux里运行的容器虚拟化软件,提供了轻量级的应用隔离方案,并且为我们提供了应用程序快速扩容、缩容的能力
Github开源项目地址:https://github.com/docker
Docker官方网站地址:https://www.docker.com/
二、什么是容器?
Package Software into Standardized Units for Development, Shipment and Deployment
将软件打包成标准化单元,以便开发、装运和部署
容器是一个软件的轻量级独立可执行软件包,包含运行它所需的一切:代码、运行时、系统工具、系统库、设置等。不管环境如何,集装箱化软件都可以运行相同的Linux和Windows应用程序。容器将软件与其周围环境隔离开来,例如开发环境和登台环境之间的差异,并有助于减少在同一基础架构上运行不同软件的团队之间的冲突
三、Docker的特点
轻便小巧,效率至上
① 轻量级
在一台机器上运行的Docker容器共享该机器的操作系统内核; 他们立即开始并使用更少的计算和内存。图像由文件系统层构建并共享公用文件。这最大限度地减少了磁盘使用量,图像下载速度更快
② 标准
Docker容器基于开放标准,可在所有主要Linux发行版,Microsoft Windows以及任何基础架构(包括虚拟机,裸机和云中)上运行
③ 安全
Docker容器将应用程序彼此隔离并从底层基础架构中分离出来。Docker提供了最强大的默认隔离功能,可以将应用程序问题限制在一个容器中,而不是整个机器上
四、Docker与传统虚拟机的区别
特性 | Docker 容器 | 虚拟机 |
---|---|---|
启动速度 | 秒级 | 分钟级 |
计算能力损耗 | 几乎无 | 损耗50%作用 |
性能 | 接近原生 | 弱于 |
系统支持量 | (单机) | 上千个 几十个 |
隔离性 | 资源限制 | 完全隔离 |
五、Docker 核心概念
① 镜像(Image)
Docker镜像是创建容器的基础,类似于快照
② 容器(Container)
容器即服务,每个服务相互隔离
③ 仓库(Repository)
可供随时调用的镜像仓库,分公共仓库和私有仓库
六、Docker 安装部署
#!/bin/bash
#设置Docker存储库
yum install -y yum-utils
#安装国内软件包
yum-config-manager \\
--add-repo \\
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#安装Docker Engine和容器
yum install -y docker-ce docker-ce-cli containerd.io
systemctl start docker && systemctl enable docker
查看版本
docker version
七、容器镜像加速器
类似与YUM源,使用国内源可加快镜像拉取的速度
① 打开阿里云控制台
搜索 容器镜像服务
② 选择镜像加速器
③ 更换容器镜像源
八、Docker 镜像操作
① 镜像搜索 | search
命令格式
docker search 镜像名:[标签] | 镜像ID
举例:docker search nginx
搜索内容默认会按照星级进行排序
举例:只搜索100星以上的目标
docker search -f stars=100 nginx
② 拉取(下载)镜像 | pull
命令格式
docker pull 镜像名:[标签] | 镜像ID
举例:docker pull nginx
如果不加标识则默认会选择官方最新的Nginx镜像进行获取
举例:下载指定版本的mysql
docker pull mysql:5.7
③ 查看镜像 | images/inspect
命令格式
docker images
查看镜像详细的信息
docker inspect 镜像名:[标签] | 镜像ID
举例:docker inspect nginx
④ 删除镜像 | rmi
命令格式
docker rmi 镜像名:[标签] | 镜像ID
举例:通过镜像名删除镜像
docker rmi nginx:laster
举例:通过镜像ID删除镜像
docker rmi f0b8a9a54136
⑤ 修改镜像名及标签 | tag
命令格式
docker tag 镜像名:[标签] 新镜像名:[新标签]
举例:docker tag nginx:latest new_nginx:1.12.0
⑥ 存储/载入镜像 | save/load
命令格式
docker save -o 存储文件名 存储镜像
常用参数
-o 写入数据
举例:docker save -o nginx nginx
命令格式
docker load <载入文件
举例:docker load <nginx
九、Docker 容器操作
① 创建容器 | create
命令格式
docker create [参数] 镜像名:[标签] | 镜像ID 运行程序
常用参数
- -d 开启守护进程,可在后台运行
- -i 交互式操作,保持连接状态
- -t 分配伪终端,一般与“i”一起使用
- -p 映射端口[目标端口:源端口]
举例:docker create -itd -p 80:80 nginx /bin/bash
② 启动容器 | run
命令格式
docker run [参数] 镜像名:[标签] | 镜像ID
常用参数
- -d 开启守护进程,可在后台运行
- -i 交互式操作,保持连接状态
- -t 分配伪终端,一般与“i”一起使用
- -p 映射端口[目标端口:源端口]
举例:docker run -it -d -p 80:80 nginx
③ 进程管理
►查看进程 | ps
命令格式
docker ps [参数]
常用参数
-a 显示所有容器,默认显示刚刚运行的
举例:docker ps -a
►运行状态 | start/stop/restart
命令格式
docker start/stop/restart 镜像名:[标签] | 镜像ID
举例:docker stop 6127d8cc1f3c
►删除进程 | rm -f
命令格式
docker rm -f 镜像名:[标签] | 镜像ID
举例:docker rm -f 6127d8cc1f3c
④ 进入容器 | exec
命令格式
docker [参数] exec 镜像名:[标签] | 镜像ID 运行程序
举例:docker exec -it 87d2da7b401b /bin/bash
⑤ 容器导入导出 | import/export
常用于将Docker容器迁移到另一个服务器中
命令格式
docker export 进程ID > 文件名
举例:docker export f0b8a9a54136 > nginx
命令格式
docker import 文件名 > 镜像名:[标签]
举例:cat Web | docker import - web:nginx
十、DockerFile
Dockerfile是一个包含用于组合映像的命令的文本文档。可以使用在命令行中调用任何命令。 Docker通过读取Dockerfile中的指令自动生成映像
docker build命令用于从Dockerfile构建映像。可以在docker build命令中使用-f标志指向文件系统中任何位置的Dockerfile
① Dockerfile的基本结构
Dockerfile 一般分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令,’#’ 为 Dockerfile 中的注释
② Dockerfile文件说明
Docker以从上到下的顺序运行Dockerfile的指令。为了指定基本映像,第一条指令必须是FROM。一个声明以#字符开头则被视为注释。可以在Docker文件中使用RUN,CMD,FROM,EXPOSE,ENV等指令
►FROM:指定基础镜像,必须为第一个命令
格式:
FROM <image>
FROM <image>:<tag>
FROM <image>@<digest>
示例:
FROM mysql:5.6
►MAINTAINER: 维护者信息
格式:
MAINTAINER <name>
示例:
MAINTAINER Ca
►RUN:用于在镜像容器中执行命令
格式:
RUN <command>
exec执行
格式:
RUN ["executable", "param1", "param2"]
示例:
RUN ["executable", "param1", "param2"]
RUN apk update
RUN ["/etc/execfile", "arg1", "arg1"]
►ADD:将本地文件添加到容器中
tar类型文件会自动解压(网络压缩资源不会被解压),可以访问网络资源,类似wget
格式:
ADD <src>... <dest>
ADD ["<src>",... "<dest>"] 用于支持包含空格的路径
示例:
ADD hom* /mydir/ # 添加所有以"hom"开头的文件
ADD hom?.txt /mydir/ # ? 替代一个单字符,例如:"home.txt"
ADD test relativeDir/ # 添加 "test" 到 `WORKDIR`/relativeDir/
ADD test /absoluteDir/ # 添加 "test" 到 /absoluteDir/
►COPY:功能类似ADD
不会自动解压文件,也不能访问网络资源
►CMD:构建容器后调用
在容器启动时才进行调用
格式:
CMD ["executable","param1","param2"] (执行可执行文件,优先)
CMD ["param1","param2"] (设置了ENTRYPOINT,则直接调用ENTRYPOINT添加参数)
CMD command param1 param2 (执行shell内部命令)
示例:
CMD echo "This is a test." | wc -
CMD ["/usr/bin/wc","--help"]
►ENTRYPOINT:配置容器
使其可执行化,配合CMD可省去"application",只使用参数
格式:
ENTRYPOINT ["executable", "param1", "param2"] (可执行文件, 优先)
ENTRYPOINT command param1 param2 (shell内部命令)
示例:
FROM ubuntu
ENTRYPOINT ["top", "-b"]
CMD ["-c"]
►LABEL:用于为镜像添加元数据
格式:
LABEL <key>=<value> <key>=<value> <key>=<value> ...
示例:
LABEL version="1.0" description="owo" by="qwq"
►ENV:设置环境变量
格式:
ENV <key> <value> #<key>之后的所有内容均会被视为其<value>的组成部分,因此,一次只能设置一个变量
ENV <key>=<value> ... #可以设置多个变量,每个变量为一个"<key>=<value>"的键值对,如果<key>中包含空格,可以使用\\来进行转义,也可以通过""来进行标示;另外,反斜线也可以用于续行
示例:
ENV ID 007
►EXPOSE:指定于外界交互的端口
格式:
EXPOSE <port> [<port>...]
示例:
EXPOSE 80 443
EXPOSE 8080
EXPOSE 11211/tcp 11211/udp
►VOLUME:用于指定持久化目录
格式:
VOLUME ["/path/to/dir"]
示例:
VOLUME ["/data"]
VOLUME ["/var/www", "/var/log/apache", "/etc/apache"
- 卷可以容器间共享和重用
- 容器并不一定要和其它容器共享卷
- 修改卷后会立即生效
- 对卷的修改不会对镜像产生影响
- 卷会一直存在,直到没有任何容器在使用它
►WORKDIR:工作目录,类似于cd命令
格式:
WORKDIR /path/to/workdir
示例:
WORKDIR /a (这时工作目录为/a)
WORKDIR b (这时工作目录为/a/b)
WORKDIR c (这时工作目录为/a/b/c)
►USER:指定运行容器时的用户名或 UID,后续的 RUN 也会使用指定用户
使用USER指定用户时,可以使用用户名、UID或GID,或是两者的组合。当服务不需要管理员权限时,可以通过该命令指定运行用户。并且可以在之前创建所需要的用户
格式:
USER user
USER user:group
USER uid
USER uid:gid
USER user:gid
USER uid:group
示例:
USER www
►ARG:用于指定传递给构建运行时的变量
格式:
ARG <name>[=<default value>]
示例:
ARG site
ARG build_user=www
►ONBUILD:用于设置镜像触发器
格式:
ONBUILD [INSTRUCTION]
示例:
ONBUILD ADD . /app/src
ONBUILD RUN /usr/local/bin/python-build --dir /app/src
以上是关于Docker 运维 - 从零开始学习的主要内容,如果未能解决你的问题,请参考以下文章
Rancher 运维 - 从零开始学习 | RKE部署K8S | 容器管理
Rancher 运维 - 从零开始学习 | RKE部署K8S | 容器管理
Rancher 运维 - 从零开始学习 | RKE部署K8S | 容器管理