docker笔记

docker 笔记(基于ubuntu19.10)


安装

$ sudo apt install docker.io

docker 容器使用

  1. 安装 docker 之后,需要使用 root 权限才能使用 docker 命令,这显然不利于系统的安全性,可以将普通用户添加到 docker 组,之后普通用户才有权限使用 docker 命令:

    $ sudo usermod -aG docker [user]   # [] 中的user为普通用户名
    
  2. 查看所有的容器(包括已经停止的)

    $ docker ps -a
    
  3. 停止一个容器

    $ docker stop <容器 ID/NAME>
    
  4. 启动已停止的容器

    $ docker start <容器 ID/NAME>
    
  5. 进入容器

    docker run 使用 -d 参数时,容器启动会进入后台。此时想要进入容器,可通过以下命令:

    $ docker exec -it <容器ID/NAME> /bin/bash
    
  6. 查看指定 (ID 或者名字)容器的某个确定端口映射到宿主机的端口号

    $ docker port <容器ID/NAME>
    
  7. 查看 Docker 的底层信息。它会返回一个 JSON 文件记录着 Docker 容器的配置和状态信息。

    $ docker inspect <容器ID/NAME>
    
  8. 查询最后一次创建的容器:

    $ docker ps -l
    

docker 镜像使用

  1. 列出本地主机上的镜像

    $ docker images
    
  2. 查找镜像

    $ docker search <镜像名>
    
  3. 拉取镜像

    $ docker pull <镜像名:tag>
    

    镜像名后不加 tag 的话,会默认拉取 latest ,即最新的镜像。

  4. 删除镜像

    $ docker rmi <镜像名>
    

Dockerfile

  1. FROM 指令

  2. RUN 指令

    用于执行后面的命令行命令,有以下两种格式:

    • shell 格式

      RUN <命令行命令>  # <命令行>等同于在终端中的shell命令
      
    • exec 格式

      RUN ["可执行文件", "参数1", "参数2"] 
      # 例如:
      # RUN ["./test.py", "dev", "offline"] 等价于RUN ./test.py dev offline
      

    Dockerfile 的指令每执行一次都会在 docker 上新建一层

  3. 构建镜像

    在 Dockerfile 文件的存放目录下,执行构建动作。

    $ docker build -t nginx:test .
    

    上述指令最后一个. 表示上下文路径,若未说明最后一个参数,则默认上下文路径就是 Dockerfile 所在的位置。

  4. COPY 指令

    从上下文目录中复制文件或目录到容器中的指定路径。

    格式:

    COPY [--chown=<user>:<group>] <源路径1>...<目标路径>
    COPY [--chown=<user>:<group>] ["<源路径1>",... "<目标路径>"]
    # [--chown=<user>:<group>]:可选参数,用户改变复制到容器内文件的拥有者和属组。
    # <目标路径>:容器内的指定路径,该路径不用事先建好,路径不存在的话,会自动创建。
    
  5. ADD 指令

    ADD 指令和 COPY 的使用格式一致(同样需求下,官方推荐使用 COPY)。功能也类似,不同之处如下:

  6. CMD 指令

    类似于 RUN 指令,用于运行程序,但二者运行的时间点不同:

    • CMD 在 docker run 时运行
    • RUN 在 docker build

    注意:如果 Dockerfile 中存在多个 CMD 指令,仅最后一个生效。

    格式:

    CMD <shell 命令>
    CMD ["<可执行文件或命令>", "<param1>", "param2",...]  # 推荐使用
    CMD ["<param1>", "param2",...]  # 该写法是为 ENTRYPOINT 指令指定的程序提供默认参数
    
  7. ENTRYPOINT 指令

    类似于 CMD 指令,但其不会被 docker run 的命令行参数指定的指令所覆盖,而且这些命令行参数会被当作参数送给 ENTRYPOINT 指令指定的程序。

    注意:如果 Dockerfile 中存在多个 ENTRYPOINT 指令,仅最后一个生效。

    格式:

    ENTRYPOINT ["<executeable>", "<param1>", "<param2>",...]
    

    可以搭配 CMD 命令使用:一般是变参才会使用 CMD ,这里的 CMD 等于是在给 ENTRYPOINT 传参

  8. ENV

    设置环境变量,定义了环境变量,那么在后续的指令中,就可以使用这个环境变量。

    格式:

    ENV <key> <value>
    ENV <key1>=<value1> <key2>=<value2>...
    

    eg:

    ENV NODE_VERSION 7.2.0
    RUN curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-x64.tar.xz"
    # $NODE_VERSION引用环境变量
    
  9. ARG

    构建参数,与 ENV 作用一致。不过作用域不一样。ARG 设置的环境变量仅对 Dockerfile 内有效,也就是说只有 docker build 的过程中有效,构建好的镜像内不存在此环境变量。

    构建命令 docker build 中可以用 --build-arg <参数名>=<值> 来覆盖。

  10. VOLUME

    定义匿名数据卷。在启动容器时忘记挂载数据卷,会自动挂载到匿名卷。

    作用:

    • 避免重要的数据因容器重启而丢失;
    • 避免容器不断变大。

    格式:

    VOLUME ["<路径1>", "<路径2>"...]
    VOLUME <路径>
    

    在启动容器 docker run 的时候,我们可以通过 -v 参数修改挂载点。

  11. EXPOSE

    声明端口。

    作用:

    • 帮助镜像使用者理解这个镜像服务的守护端口,以方便配置映射。
    • 在运行时使用随机端口映射时,也就是 docker run -P 时,会自动随机映射 EXPOSE 的端口。

    格式:

    EXPOSE <端口1> [<端口2>...]
    
  12. WORKDIR

    指定工作目录(必须提前创建好)。用 WORKDIR 指定的工作目录,会在构建镜像的每一层中都存在。

    格式:

    WORKDIR <工作目录路径>
    
  13. USER

    用于指定执行后续命令的用户和用户组,这边只是切换后续命令执行的用户(用户和用户组必须提前已经存在)。

    格式:

    USER <用户名>[:<用户组>]
    
  14. HEALTHCHECK

    用于指定某个程序或者指令来监控 docker 容器服务的运行状态。

  15. ONBUILD

    用于延迟构建命令的执行。

以开源项目 Halo 为例,以下是其 Dockerfile 文件:

FROM adoptopenjdk/openjdk8-openj9
VOLUME /tmp

ARG JAR_FILE=build/libs/halo.jar
ARG PORT=8090
ARG TIME_ZONE=Asia/Shanghai

ENV TZ=${TIME_ZONE}
ENV JAVA_OPTS="-Xms256m -Xmx256m"

COPY ${JAR_FILE} halo.jar

EXPOSE ${PORT}

ENTRYPOINT java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -server -jar halo.jar

Docker Compose

安装:

$ sudo apt install docker-compose

Compose 使用的3个步骤:

  • 使用 Dockerfile 定义应用程序的环境;
  • 使用 docker-compose.yml 定义构成程序的服务,这样它们可以在隔离环境中一起运行;
  • 最后,执行 docker-compose up 命令来启动并运行整个应用程序。

以下是菜鸟教程的一个例子(链接):

  1. 创建测试目录和测试脚本:

    $ mkdir composetest
    $ cd composetest
    $ touch app.py
    

    app.py 文件中添加以下内容:

    import time
    import redis
    from flask import Flask
    
    app = Flask(__name__)
    cache = redis.Redis(host='redis', port=6379)
    
    def get_hit_count():
        retries = 5
        while True:
            try:
                return cache.incr('hits')
            except redis.exceptions.ConnectionError as exc:
                if retries == 0:
                    raise exc
                retries -= 1
                time.sleep(0.5)
    
    
    @app.route("/")
    def hello():
        count = get_hit_count()
        return "Hello World! I have been seen {} times.\n".format(count)
    

    之后创建 requirements.txt 文件

    $ touch requirements.txt
    

    内容如下:

    flask
    redis
    
  2. 创建 Dockerfile 文件

    $ touch Dockerfile
    

    内容如下:

    FROM python:3.7-alpine
    WORKDIR /code
    ENV FLASK_APP app.py
    ENV FLASK_RUN_HOST 0.0.0.0
    RUN apk add --no-cache gcc musl-dev linux-headers
    COPY requirements.txt requirements.txt
    RUN pip install -r requirements.txt
    COPY . .
    CMD ["flask", "run"]
    
  3. 创建 docker-compose.yml 文件

    $ touch docker-compose.yml    
    

    内容如下:

    version: '3'
    services:
      web:
        build: .
        ports:
         - "5000:5000"
      redis:
        image: "redis:alpine"
    

    该 Compose 文件定义了两个服务:Web 和 redis

    • web:该 web 服务使用从 Dockerfile 当前目录中构建的镜像。然后,它将容器和主机绑定到暴露的端口 5000。此示例服务使用 Flask Web 服务器的默认端口 5000 。
    • redis:该 redis 服务使用 Docker Hub 的公共 Redis 映像。
  4. 使用 Compose 命令构建和运行应用

    $ docker-compose up
    $ docker-compose up -d  # 后台执行
    
### 回答1: 要下载Docker笔记,首先需要了解Docker是什么以及其使用场景。 Docker是一种开源的容器化平台,可以帮助用户打包、部署和运行应用程序。通过使用容器化技术,用户无需担心运行环境的差异,可以将应用程序和其依赖项打包到一个可移植的容器中,随时在不同的环境中运行。 要下载Docker笔记,可以按照以下几个步骤进行操作: 1. 首先,需要在计算机上安装Docker。可以从Docker官方网站(https://www.docker.com/)上下载适合自己操作系统的Docker安装包,并按照安装指南进行安装。 2. 安装完成后,需要启动Docker服务。根据操作系统的不同,可以在启动菜单或终端中找到Docker应用程序,并点击打开。在Docker控制台中,可以查看、管理容器以及进行其他操作。 3. 接下来,需要搜索并下载Docker笔记的镜像。可以使用Docker Hub(https://hub.docker.com/)这个官方的镜像仓库,搜索关键词以找到合适的笔记镜像。在搜索结果中,会显示镜像的名称、描述、标签等信息,选择一个合适的镜像。 4. 找到想要下载的笔记镜像后,可以使用Docker命令行工具或Docker控制台中的图形界面来下载镜像。通过输入命令`docker pull 镜像名称:标签`,即可下载对应的笔记镜像到本地。 5. 下载完成后,可以使用`docker images`命令在本地查看已下载的镜像列表。根据下载的笔记镜像的名称和标签,可以使用`docker run`命令来创建并启动一个容器,从而运行笔记。 通过以上步骤,就可以成功下载Docker笔记并在本地运行。希望这些信息对您有帮助! ### 回答2: 要下载Docker笔记,首先需要知道从哪里获取这些笔记Docker有一个官方文档网站,其中包含了大量关于Docker的技术文档、教程和示例以及各种使用场景的说明。用户可以访问Docker官方网站,在文档部分进行浏览和搜索,找到所需的笔记。 在Docker官方文档网站上,用户可以按照主题、标签或关键字进行检索,以找到相关的笔记。网站还提供了各种文件格式的下载选项,包括PDF、EPUB和HTML版本,用户可以根据自己的使用习惯选择适合的格式进行下载。 此外,还有一些第三方资源库和网站提供了Docker相关的笔记下载。例如GitHub上有很多开源项目,其中包含了Docker的使用笔记和示例代码。用户可以通过在GitHub上搜索关键字"Docker笔记"或"Docker notes"来找到相关的项目,然后根据项目的说明进行下载。 总之,下载Docker笔记可以通过Docker官方文档网站或第三方资源库进行。用户可以根据自己的需求和偏好选择下载适合自己的格式和来源。 ### 回答3: 要下载 Docker 笔记,首先需要确保已经安装了 Docker 客户端工具。然后按照以下步骤进行下载: 1. 打开终端或命令提示符,输入以下命令来下载 Docker 笔记Docker 镜像: ``` docker pull [镜像名称] ``` 这里的 `[镜像名称]` 是 Docker Hub 上提供的 Docker 镜像名称,可以根据需要搜索并选择合适的镜像。 2. 等待镜像下载完成后,使用以下命令来创建和运行一个 Docker 容器,并将笔记下载到本地: ``` docker run -it --name [容器名称] [镜像名称] [下载命令] ``` 这里的 `[容器名称]` 是用于标识容器的名称,`[下载命令]` 是具体的下载命令,可以根据下载方式的不同进行相应的设置。 3. 等待下载完成后,可以使用以下命令来停止并删除容器: ``` docker stop [容器名称] docker rm [容器名称] ``` 这里的 `[容器名称]` 是之前创建容器时指定的名称。 通过以上步骤,你就可以成功下载 Docker 笔记到本地了。记得根据实际需求选择适合的 Docker 镜像和下载命令,同时也可以通过 Docker Hub 上的文档和社区提供的资源,了解更多有关 Docker 的使用方法和技巧。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值