第九十八篇 docker总结

一、docker介绍

1. docker是什么

Docker 是一个用于开发、发布和运行应用程序的开放平台。Docker 使您能够将应用程序与基础架构分离,以便您可以快速交付软件。使用 Docker,您可以像管理应用程序一样管理基础设施。通过利用 Docker 快速交付、测试和部署代码的方法,您可以显着减少编写代码和在生产环境中运行之间的延迟。

2. docker平台

Docker 提供了在称为容器的松散隔离环境中打包和运行应用程序的能力。隔离和安全性允许您在给定主机上同时运行多个容器。容器是轻量级的,包含运行应用程序所需的一切,因此您不需要依赖主机上当前安装的内容。您可以在工作时轻松共享容器,并确保与您共享的每个人都获得以相同方式工作的同一个容器。

3. docker能做什么

  • 您的开发人员在本地编写代码并使用 Docker 容器与同事分享他们的工作。
  • 他们使用 Docker 将他们的应用程序推送到测试环境中并执行自动化和手动测试。
  • 当开发者发现bug时,可以在开发环境中修复,重新部署到测试环境中进行测试和验证。
  • 测试完成后,将修复程序提供给客户就像将更新的映像推送到生产环境一样简单。

二、docker基本命令和用法

1. 新建并运行一个容器

 docker run -d -p 80:80 docker/getting-started

docker/getting-started- 要使用的图像

1.–name=‘[容器别名]’:为容器指定一个别名
2.-i:以交互模式运行容器,通常与-t一起使用
3.-t:为容器重新分配一个伪输入终端,通常与-i一起使用
4.-p:指定端口映射 -p 2222:22(宿主机:容器内),80:80- 将主机的 80 端口映射到容器中的 80 端口
5.-d:创建自动式守护容器,以分离模式运行容器(在后台)

2.列出容器

1.列出当前正在运行的容器:docker ps
2.列出当前的+之前运行过的容器:docker ps -a
3.显示最近创建的容器:docker ps -l

3.容器启停:

  1. docker start [容器名/容器id] 启动容器
  2. docker stop [容器名] 停止容器
  3. docker restart [容器名] 重启容器
  4. docker rm [容器名] 删除容器

一次删除多个容器

docker rm -f ${docker ps -aq} 2.docker ps -aq | xargs docker rm

4. 容器文件复制

一般在linux下复制文件夹需要增加-r 参数,docker cp 指令不需要加-r,如果是文件夹直接复制

将宿主机hello.py文件复制到容器内

docker cp /data/hello.py my_container:/data/projects

将docker内的文件复制到宿主机

docker cp my_container:/data/projects/hello.py /data

5. 命令行交互

  1. 进入真正运行的容器
docker exec -it my_container bash 
#docker exec -it my_container /bin/bash
  1. 创建一个临时容器并以命令行方式提交,推出命令行后自动删除
docker run --rm -it my_images bash

6. 容器日志查看

docker log -f -t --tail [行数] 容器id

-t:在日志中加入时间戳
-f:跟随最新的日志打印
–tail:显示最后多少条日志

7. 容器提交修改

  1. docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
    从容器创建一个新的镜像

将当前容器创建一成一个新的镜像,如果此镜像存在则替换

docker commit 6edgasb2 my_images:latest
  1. docker push [OPTIONS] NAME[:TAG]
    docker push 命令用于将本地的镜像上传到镜像仓库。
    docker push 命令使用之前需要要先登陆到镜像仓库。docker push 命令推送镜像的规范是:注册用户名/镜像名。

三、docker镜像

1. 镜像相关基本命令

  1. 本地镜像信息查询:docker images
➜  ~ docker images
REPOSITORY                                    TAG                 IMAGE ID            CREATED             SIZE
upai/builder-rosetta                          latest              19a1a1d7b72a        7 days ago          6.39GB
upai/builder-rosetta                          v2                  07f2e3c6ef7d        10 days ago         5.13GB

Repository:表示镜像的仓库源
TAG:镜像的标签,同一个仓库源可以有多个TAG,代表不同的版本
IMAGE ID:镜像id
CREATED:镜像创建时间
SIZE:镜像大小

  1. 仓库镜像信息查询:docker search [镜像名称]
➜  ~ docker search ubuntu
NAME                             DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
ubuntu                           Ubuntu is a Debian-based Linux operating sys…   14163               [OK]
websphere-liberty                WebSphere Liberty multi-architecture images …   283                 [OK]
ubuntu-upstart                   DEPRECATED, as is Upstart (find other proces…   112                 [OK]
neurodebian                      NeuroDebian provides neuroscience research s…
  1. 拉取镜像:docker pull [镜像名]:[TAG]
    功能:从远程仓库中拉取镜像,如果没有指定TAG,默认为latest

  2. 移除本地镜像:docker rmi [镜像id…]

  3. docker远程仓库登录
    docker login : 登陆到一个Docker镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub

docker logout : 登出一个Docker镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub

2. 构建镜像Dockerfile

Docker 可以通过读取来自 Dockerfile, Dockerfile是一个文本文档,其中包含用户可以在命令行上调用以组装图像的所有命令。使用docker build 用户可以创建一个连续执行多个命令行指令的自动构建。

Dockerfile例子:

# Nginx
#
# VERSION               0.0.1

FROM      ubuntu
MAINTAINER Victor Vieux <victor@docker.com>

RUN apt-get update && apt-get install -y inotify-tools nginx apache2 openssh-server

# Firefox over VNC
#
# VERSION               0.3

FROM ubuntu

# Install vnc, xvfb in order to create a 'fake' display and firefox
RUN apt-get update && apt-get install -y x11vnc xvfb firefox
RUN mkdir /.vnc
# Setup a password
RUN x11vnc -storepasswd 1234 ~/.vnc/passwd
# Autostart firefox (might not be the best way, but it does the trick)
RUN bash -c 'echo "firefox" >> /.bashrc'

EXPOSE 5900
CMD    ["x11vnc", "-forever", "-usepw", "-create"]

# Multiple images example
#
# VERSION               0.1

FROM ubuntu
RUN echo foo > bar
# Will output something like ===> 907ad6c2736f

FROM ubuntu
RUN echo moo > oink
# Will output something like ===> 695d7793cbe4

# You᾿ll now have two images, 907ad6c2736f with /bar, and 695d7793cbe4 with
# /oink.
  1. FROM
    格式为 FROM 或FROM :。

    第一条指令必须为 FROM 指令。并且,如果在同一个Dockerfile中创建多个镜像时,可以使用多个 FROM 指令(每个镜像一次)

  2. RUN
    格式为 RUN 或 RUN [“executable”, “param1”, “param2”]。

    前者将在 shell 终端中运行命令,即 /bin/sh -c;后者则使用 exec 执行。指定使用其它终端可以通过第二种方式实现,例如 RUN [“/bin/bash”, “-c”, “echo hello”]。

    每条 RUN 指令将在当前镜像基础上执行指定命令,并提交为新的镜像。当命令较长时可以使用 \ 来换行。

  3. CMD
    支持三种格式

    CMD [“executable”,“param1”,“param2”] 使用 exec 执行,推荐方式;
    CMD command param1 param2 在 /bin/sh 中执行,提供给需要交互的应用;
    CMD [“param1”,“param2”] 提供给 ENTRYPOINT 的默认参数;
    指定启动容器时执行的命令,每个 Dockerfile 只能有一条 CMD 命令。如果指定了多条命令,只有最后一条会被执行。

    如果用户启动容器时候指定了运行的命令,则会覆盖掉 CMD 指定的命令。

  4. EXPOSE
    格式为 EXPOSE […]。

    告诉 Docker 服务端容器暴露的端口号,供互联系统使用。在启动容器时需要通过 -P,Docker 主机会自动分配一个端口转发到指定的端口。

  5. ENV
    格式为 ENV 。 指定一个环境变量,会被后续 RUN 指令使用,并在容器运行时保持。

    ENV PG_MAJOR 9.3
    ENV PG_VERSION 9.3.4
    RUN curl -SL http://example.com/postgres-$PG_VERSION.tar.xz | tar -xJC /usr/src/postgress && …
    ENV PATH /usr/local/postgres-$PG_MAJOR/bin:$PATH
    
  6. ADD
    格式为 ADD 。

    该命令将复制指定的 到容器中的 。 其中 可以是Dockerfile所在目录的一个相对路径;也可以是一个 URL;还可以是一个 tar 文件(自动解压为目录)

  7. COPY
    格式为 COPY 。

    复制本地主机的 (为 Dockerfile 所在目录的相对路径)到容器中的 。

    当使用本地目录为源目录时,推荐使用 COPY。

  8. ENTRYPOINT
    两种格式:

    ENTRYPOINT [“executable”, “param1”, “param2”]
    ENTRYPOINT command param1 param2(shell中执行)。
    配置容器启动后执行的命令,并且不可被 docker run 提供的参数覆盖。

    每个 Dockerfile 中只能有一个 ENTRYPOINT,当指定多个时,只有最后一个起效。

  9. VOLUME
    格式为 VOLUME [“/data”]。

    创建一个可以从本地主机或其他容器挂载的挂载点,一般用来存放数据库和需要保持的数据等。

  10. WORKDIR
    格式为 WORKDIR /path/to/workdir。

    为后续的 RUN、CMD、ENTRYPOINT 指令配置工作目录。

3. 创建镜像

编写完成 Dockerfile 之后,可以通过 docker build 命令来创建镜像。
基本的格式为 docker build [选项] 路径,该命令将读取指定路径下(包括子目录)的 Dockerfile,并将该路径下所有内容发送给 Docker 服务端,由服务端来创建镜像

  1. 使用当前目录的 Dockerfile 创建镜像,标签为 runoob/ubuntu:v1。
docker build -t runoob/ubuntu:v1 . 
  1. 通过 -f Dockerfile 文件的位置
docker build -t runoob/ubuntu:v1 -f /path/to/a/Dockerfile 
  1. 增加 --cache-from参数
    默认情况下,在构建Docker镜像时,Docker使用它的构建缓存来检查它是否可以跳过Dockerfile中的任何步骤。该–cache-from参数告诉docker,可用缓存的镜像是什么。如果提供的镜像和当前版本具有相同的图层,则可以获得与在同一台计算机上构建镜像时以相同层构建出更快的速度。
    例如,简单地想象我们没有使用多阶段构建,因此推送到远程存储库的最终镜像包含所有构建层。不使用–cache-from我们的构建脚本总是必须执行Dockerfile中的每个命令,因为构建缓存将为空
    通过 cache-from 这种方式来构建镜像,依据 cache 的场景不同,往往能达到两倍甚至三倍的时间效率提升。

四、docker-compose

Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。

Compose 使用的三个步骤:

1.使用 Dockerfile 定义应用程序的环境。

2.使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。

3. 最后,执行 docker-compose up 命令来启动并运行整个应用程序。

docker-compose.yaml配置指令参考

  1. build
    build 可以指定包含构建上下文的路径:

    version: '2'
    services:
      webapp:
        build: ./dir
    
  2. args

    添加构建镜像的参数,环境变量只能在构建过程中访问。
    首先,在Dockerfile中指定要使用的参数:

    ARG buildno
    ARG password
     
    RUN echo "Build number: $buildno"
    RUN script-requiring-password.sh "$password"
    

    然后在args键下指定参数。 你可以传递映射或列表:

    build:
      context: .
      args:
        buildno: 1
        password: secret
     
    build:
      context: .
      args:
        - buildno=1
        - password=secret
    
  3. image
    指定启动容器的镜像,可以是镜像仓库/标签或者镜像id(或者id的前一部分)

    image: ubuntu:14.04
    
  4. volumes
    卷挂载路径设置。可以设置宿主机路径 (HOST:CONTAINER) 或加上访问模式 (HOST:CONTAINER:ro),挂载数据卷的默认权限是读写(rw),可以通过ro指定为只读。
    你可以在主机上挂载相对路径,该路径将相对于当前正在使用的Compose配置文件的目录进行扩展。 相对路径应始终以 . 或者 … 开始。

    volumes:
      # 只需指定一个路径,让引擎创建一个卷
      - /var/lib/mysql
     
      # 指定绝对路径映射
      - /opt/data:/var/lib/mysql
     
      # 相对于当前compose文件的相对路径
      - ./cache:/tmp/cache
     
      # 用户家目录相对路径
      - ~/configs:/etc/configs/:ro
     
      # 命名卷
      - datavolume:/var/lib/mysql
    
  5. expose
    暴露端口,但不映射到宿主机,只被连接的服务访问。
    仅可以指定内部端口为参数

    expose:
     - "3000"
     - "8000"
    
  6. ports
    暴露端口信息。
    常用的简单格式:使用宿主:容器 (HOST:CONTAINER)格式或者仅仅指定容器的端口(宿主将会随机选择端口)都可以

    ports:
     - "3000"
     - "3000-3005"
     - "8000:8000"
     - "9090-9091:8080-8081"
     - "49100:22"
     - "127.0.0.1:8001:8001"
     - "127.0.0.1:5000-5010:5000-5010"
     - "6060:6060/udp"
    
  7. security_opt
    ssh 连接root用户debug时,docker的配置文件

security_opt:
      - seccomp:unconfined
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值