Docker 运维 - 从零开始学习

Posted serendipity_cat

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker 运维 - 从零开始学习相关的知识,希望对你有一定的参考价值。

Docker 运维 - 从零开始学习


一、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"
  1. 卷可以容器间共享和重用
  2. 容器并不一定要和其它容器共享卷
  3. 修改卷后会立即生效
  4. 对卷的修改不会对镜像产生影响
  5. 卷会一直存在,直到没有任何容器在使用它

►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 | 容器管理

Rancher 运维 - 从零开始学习 | RKE部署K8S | 容器管理

OpenStack 运维 - 从零开始学习

OpenStack 运维 - 从零开始学习