《第一本Docker书》--读书笔记

无意中接触到 docker,知道 docker 可以在服务器上部署各种环境,从而解决无需在服务器上安装各种软件的问题,只需要在容器中安装即可,对搭建运行环境非常友好,于是自己就摸索着学习 docker

第三章 Docker 入门

3.2 运行容器

docker run -it ubuntu /bin/bash

docker ps 查看正在运行的容器
docker ps -a 查看当前系统中所有容器

3.4 容器命名

docker run --name bob_the_container -it ubuntu /bin/bash

3.5 重新启动已经停止的容器

docker restart <container_name>
docker restart <container_id>

ctrl+p+q 退出不关闭容器
exit 退出关闭容器

3.6 重新附着到容器的会话上

docker attach <container_name>
docker attach <container_id>

3.7 创建守护式容器

守护式容器没有交互式会话,非常适合运行程序和服务

docker run --name daemon_dave -d ubuntu

-d 参数 容器会在后台运行

3.8 容器内部都在干什么

用 docker logs 命令获取容器运行日志

docker logs daemon_dave
docker logs --tail  10 daemon_dave # 获取日志最后10条内容

3.9 查看容器内的进程

docker log daemon_dave

3.10 在容器内运行

docker exec -d daemon_dave touch /etc/new_config_file

3.11 停止守护式容器

docker stop daemon_dave

3.12 自动重启容器

设置开机自动重启容器

docker run --restart=always --name daemon-dave -d ubuntu

–restart=on-failure:5 重启 5 次

3.13 深入容器

docker inspect daemon-dave

第四章 使用 docker 镜像和仓库

4.2 列出镜像

docker images

Docker Hub 中有两种类型仓库 用户仓库和顶层仓库
用户仓库由用户名和仓库名两部分构成 如:jesse/monitor

4.4 查找镜像

docker search ubuntu

4.5 构建镜像

构建镜像的两种方式

  • 使用 docker commit 命令
  • 使用 docker build 命令和 Dockerfile 文件
4.5.2 使用 docker commit 命令创建镜像

先获取容器 id

docker ps -lq #8e1f4fcd97c6
docker commit -m="a new custom image" --author="jesse" 8e1f4fcd97c6 jesse/monitor:webserver

-m 新镜像的提交信息
-author 作者
webserver 镜像标签

4.5.4 基于 Dockerfile 构建新镜像

新建 Dockerfile 文件

# Version 0.1

# 基础镜像
FROM centos:7
# 镜像操作命令
RUN yum update -y
RUN yum install epel-release -y
RUN yum install nginx -y

编辑完成后

docker build -t static_web .

-t 参数设置仓库和镜像
. 是指运行当前目录下的 Dockfile 文件
也可以使用-f path/to/file 指明 dockerfile 文件
也可以使用远程仓库的 dockerfile

docker build -t "miror-study/ubuntu" git@github.com:jesse121/docker
4.5.10 Dockerfile 指令
  1. CMD
    用于指定一个容器启动时要运行的命令
CMD ["bin/bash","-l"]

docker run 命令参数可以覆盖 CMD 指令

  1. ENTRYPOINT
    ENTRYPOINT 指令提供的命令不容易在启动时被容器覆盖
    docker run 命令行中指定的任何参数都会被当作参数再次传递给 ENTRYPOINT 指令中的命令

  2. WORKDIR
    用来在从镜像创建一个新容器时,在容器内部设置一个工作目录
    可以通过-w 标志在运行时覆盖工作目录

docker run -it -w /var/log ubuntu pwd
  1. ENV
    用来在镜像构建过程中设置环境变量,这个新的环境变量可以在后续的任何 RUN 指令中使用
ENV TARGET_DIR /opt/app
WORKDIR $TARGET_DIR

也可以使用 docker run 命令行中的-e 标志来传递环境变量

  1. USER
    USER 指令用来指定该镜像会以什么样的用户去运行,默认用户是 root
    也可以在 docker run 命令中通过-u 选项来覆盖该指令指定的值

  2. VOLUME
    用来向基于镜像创建的容器添加卷
    卷功能让我们可以将数据,数据库或者其他内容添加到镜像中而不是将这些内容提交到镜像中,并且允许我们在多个容器间共享这些内容

VOLUME ["/opt/project"]
  1. ADD
    用来将构建环境下的文件和目录复制到镜像中
ADD software.lic /opt/application/software.lic

ADD 指令会使得构建目录缓存变得无效,如果通过 ADD 指令向镜像中添加一个文件或者目录,那么这将使得 dockerfile 中的后续指令都不能继续使用之前的构建缓存

  1. COPY
    copy 指令非常类似于 ADD,他们根本不同的是 COPY 只关心在构建上下文中复制本地文件,而不去做文件提取和解压工作
COPY conf.d/ /etc/apache2/
  1. ONBUILD
    ONBUILD 指令能为镜像添加触发器,当一个镜像被用作其他镜像的基础镜像时,该镜像中的触发器将会被执行

第 7 章 Docker 编配和服务发现

安装 Docker Compose

Mac 和 Windows 的 Docker 桌面版和 Docker Toolbox 已经包括 Compose 和其他 Docker 应用程序,因此 Mac 和 Windows 用户不需要单独安装 Compose。

docker-compose.yml 文件

version: "3"

services:
  app:
    build: . # 相当于 docker build .
    container_name: fed-monitor
    ports:
      - "3000:3000"
    depends_on:
      - mongo
  mongo:
    image: "mongo"

Docker Compose 常用命令

启动所有服务

docker-compose up [options] [--scale SERVICE=NUM...] [SERVICE...]

命令选项[options]

  • -d 指定在后台以守护进程方式运行服务容器
  • -no-color 设置不使用颜色来区分不同的服务器的控制输出
  • -no-deps 设置不启动服务所链接的容器
  • -force-recreate 设置强制重新创建容器,不能与–no-recreate 选项同时使用。
  • –no-create 若容器已经存在则不再重新创建,不能与–force-recreate 选项同时使用。
  • –no-build 设置不自动构建缺失的服务镜像
  • –build 设置在启动容器前构建服务镜像
  • –abort-on-container-exit 若任何一个容器被停止则停止所有容器,不能与选项-d 同时使用。
  • -t, --timeout TIMEOUT 设置停止容器时的超时秒数,默认为 10 秒。
  • –remove-orphans 设置删除服务中没有在 compose 文件中定义的容器
  • –scale SERVICE=NUM 设置服务运行容器的个数,此选项将会负载在 compose 中通过 scale 指定的参数。

列出项目中当前的所有容器

docker-compose ps [options] [SERVICE...]

停止服务

docker-compose stop [options] [SERVICE...]

重启项目中的服务

docker-compose restart [options] [SERVICE...]