前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Docker 小记 — Docker Engine

Docker 小记 — Docker Engine

作者头像
捷义
发布2018-05-14 14:27:41
1.2K0
发布2018-05-14 14:27:41
举报
文章被收录于专栏:有刻有刻

前言

用了 Docker 方才觉得生产环境终于有了他该有的样子,就像集装箱普及之后大型货轮的价值才逐渐体现出来,Docker 详细说明可查阅“官方文档”。本篇为 Docker Engine 的笔记,也就是我们通常说的 Docker,他包含了提供容器技术实现的 Docker daemon 及终端控制 Docker CLI 的应用程序。后续会继续发布 Docker Compose 和 Docker Swarm 的操作笔记,由于我的绝大部分应用案例都是云服务器,因此 Docker Machine 就略过了。

1. Docker 安装 & 配置镜像加速器

a:

代码语言:javascript
复制
# step 1:安装必要的一些系统工具
apt update
apt -y install apt-transport-https ca-certificates curl software-properties-common

# step 2:安装 GPG 证书
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | apt-key add -

# Step 3:写入软件源信息
add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"

# Step 4:更新并安装 Docker-CE
apt -y update
apt -y install docker-ce

b:

代码语言:javascript
复制
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://jrzzvzok.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker

2. Dockerfile 详解

Docker 的架构很有魅力,他拥有类似于虚拟机性质的隔离机制,但并不是严格意义上的虚拟机。我还是喜欢拿货轮举例,以前我们是一条小船运一个集装箱的货物,现在可以把 N 个集装箱扔到一条大货轮上。每个容器(集装箱)共用宿主机(货轮)的内核(运载力),Dockerfile 就像是每个集装箱中的货物清单和说明书,一般由以下五部分构成:

2.1 基础指令

  • FROM: 指定基础镜像,且必须位于第一行,使用格式如下: FROM <image> FROM <image>:<tag> FROM <image>@<digest> Docker 的原理基于 Linux 内核的隔离技术,且 Linux From Scratch,因此 FROM scratch 是 docker 中最基础的镜像,debian、ubuntu 和 centos 等都基于 scratch 之上。在实际的运用中,如果必须从零开始搭建镜像的一般都选择 FROM debian 作为基础镜像,不过大多数情况下一般都会以如下:FROM pythonFROM nginxFROM java 等为基础镜像。
  • MAINTAINER:指定维护者信息,例:MAINTAINER user user@mail.com

2.2 控制指令

  • RUN: 在构建的过程中指定需要被执行的命令,使用格式如下: RUN command param1 param2 # 更推荐 RUN ["executable","param1","param2"]
  • WORKDIR: 用于切换构建过程中的工作目录,例:WORKDIR project。可配合环境变量使用,例: ENV BASEDIR /project WORKDIR $BASEDIR/test
  • ONBUILD: 在当前镜像被当做基础镜像时,执行其携带指令,例: ONBUILD RUN echo "hello world" “hello world”会在子镜像被构建的过程中输出。

2.3 引入指令

  • COPY: 拷贝文件或目录,格式: COPY <src> <dest> COPY ["<src>","<dest>"]
  • ADD: 在COPY的基础之上,ADD可识别压缩文件,例:ADD rootfs.tar.xz /。理论上也可添加网络地址,但还是建议在 RUN 指令中执行 wget 或 curl 命令,感觉这样更加可控。实际应用中我喜欢将 COPY 用于文件,ADD 用于目录(仅我个人的使用习惯)。

2.4 执行指令

  • CMD: 容器启动时需要执行的命令,格式: CMD ["executable","param1","param2"] # 更推荐 CMD ["param1","param2"] CMD command param1 param2 若在 docker run 中指定启动命令,则 CMD 将被覆盖。
  • ENTRYPOINT:主程序启动前的准备指令,用于启动主程序所依赖的服务,格式同CMD(基本上没用过就不介绍了,而且容易出错,不推荐使用)。

2.5 配置指令

  • EXPOSE: 暴露容器端口,格式:EXPOSE <port> [<port>...],注意此处的暴露端口和docker run 中-p指定的映射端口是两个概念。
  • ENV: 声明环境变量,格式:ENV <key>=<value> ...
  • LABEL: 标记,格式:LABEL <key>=<value>...
  • USER: 设置启动容器的用户,格式:USER daemo
  • ARG: 设置变量,格式同ENV。
  • STOPSIGNAL: 容器停止时给应用程序发出的信号,例:STOPSIGNAL SIGKELL
  • SHELL: 指定shell,例:SHELL ["bash","-c"]

3. Docker 命令详解

为了避免喧宾夺主,此处仅摘录我个人操作中较为常用的命令。

3.1 生命周期管理

  • run: 创建并运行容器,格式:docker run [OPTIONS] IMAGE [COMMAND] [ARG...],参数说明: -d , --detach # 后台运行 -it, --interactive tty # 交互终端形式运行 -p , --publish list # 指定端口 -v , --volume list # 挂载存储卷 --name string # 定义名字 --rm # 容器终止后自动删除(不支持在后台运行的容器) --restart string # no、on-failure(非正常退出时重启,on-failure:3 最多重启三次)、always、unless-stopped docker run 的参数甚多,可通过 --help 查询,后续这些复杂的配置都会移交给 Docker Compose,以上几个足以应用70%~80%的场景,例: # 类似 ubuntu 这类容器必须以 -it 交互终端形式运行,否则无法在后台保留 docker run -it -d --name my-ubuntu ubuntu # 端口映射和挂载数据卷 docker run -d \ -p 8080:80 \ -v /data/www:/usr/share/nginx/html\ --name my-nginx nginx
  • start/stop/restart:docker start/stop/restart my-container
  • rm:移除容器,格式:docker rm [OPTIONS] CONTAINER [CONTAINER...],参数说明: -f, --force Force the removal of a running container -l, --link Remove the specified link -v, --volumes Remove the volumes associated with the container
  • exec:在运行的容器中执行命令,不过更常用的还是先进入容器再执行命令,例子:docker exec -it my-nginx bash

3.2 容器操作

  • ps: 列出容器,常用:docker ps -anq,参数说明:all、n last(最新 n 个容器)、quiet(只显示容器编号)。
  • top: 查看容器中的进程信息,例:docker top my-container
  • logs: 查看容器日志,常用:docker logs -f --tail,参数说明:follow、--tail n(最新条日志)。
  • port:查看端口映射情况,例:docker port my-container

3.3 镜像仓库

  • login/logout: 镜像仓库的登录和退出,格式: docker login [OPTIONS] [SERVER] docker logout [SERVER] 如果是Docker Hub,则示例如下: docker login -u username -p passward docker logout 在生产环境中,我们一般会选择使用云厂商的镜像仓库,例: docker login -u yo****@qq.com -p ****** registry-vpc.cn-hangzhou.aliyuncs.com docker logout registry-vpc.cn-hangzhou.aliyuncs.com
  • pull: 拉取镜像,最常用的命令之一,格式:docker pull [OPTIONS] NAME[:TAG|@DIGEST]
  • push: 上传镜像,格式:docker push [OPTIONS] NAME[:TAG]

3.4 本地镜像管理

  • images: 列出本地镜像,常用 docker images -q,参数说明:quiet(只显示image Id)。
  • rmi: 删除本地镜像,常用 docker rmi -f,参数说明:force。
  • tag: 标记镜像,归入仓库,格式:docker tag [OPTIONS] IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG],例:docker tag ubuntu youclk/my-ubuntu:v1
  • build: 使用Dockerfile创建镜像,格式:docker build [OPTIONS] PATH | URL | -,参数说明:-t tag 例:docker build -t youclk/my-ubuntu:v1 .

结语

静夜听钟却念念不安,举首相望,恐知者唯灯而~ 哀哉!整理至此,小弟拙笔盼君悦之。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-02-19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 1. Docker 安装 & 配置镜像加速器
    • a:
      • b:
      • 2. Dockerfile 详解
        • 2.1 基础指令
          • 2.2 控制指令
            • 2.3 引入指令
              • 2.4 执行指令
                • 2.5 配置指令
                • 3. Docker 命令详解
                  • 3.1 生命周期管理
                    • 3.2 容器操作
                      • 3.3 镜像仓库
                        • 3.4 本地镜像管理
                        • 结语
                        相关产品与服务
                        容器镜像服务
                        容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
                        领券
                        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档