zoukankan      html  css  js  c++  java
  • docker笔记

    容器的特点:

    1. 通过image创建
    2. 在image layer之上建立一个container layer, 这个容器层可以read/write操作
    3. image负责app的存储和分发, container负责运行app

    image和container的关系:

      类->image,对象->container, container相当于image的实例对象,可以对container进行创建,运行,停止,删除

    docker基本命令:

      ①查看系统有哪些image

        docker images

        docker image ls

      ②删除镜像

        docker rmi image_name

      ③创建/启动容器(-d 后台运行)

        docker create [contrainer_name]

        docker run (-d) [contrainer_name]

        eg: docker run -d --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:latest

      docker run和docker create的区别:create只是创建容器,不启动容器,而docker run是创建并且启动容器,如果用docker create,还需要用docker start启动容器

      ④列举容器list

        docker container ls  #查看当前运行的container

        docker container ls -a   #查看全部container

      ⑤交互式容器

        docker run -it [container_name]   #exit退出

        eg: docker exec -it mysql bash

      ⑥停止运行中的容器

        docker stop/pause/kill container_id

      ⑦删除容器

        docker rm [container_id]  #删除前必须先stop

        docker rm $(docker ps -aq)  #一次性删除所有已经exit的容器

      ⑧查看所有容器的状态

        docker ps -a

      ⑨构建dockerfile

        docker build

          忽略文件:.dockerignore

          指定文件:docker build -f

          添加标签:docker build -t

          不使用缓存:docker build --no-cache

          构建时变量:docker build -build

        docker commit [container_name] [new_image_name]:tag

      区别:docker commit一般用做从一个运行状态的容器来创建一个新的镜像,定制镜像应该使用dockerfile来完成,默认commit镜像,对外不可解释,不方便排查问题,可维护性差

      ⑩拉取/推送/搜索镜像

        docker pull images_name

        docker push images_name #需登录docker login然后docker push

        docker search images_name

     

    dockerfile

    dockerfile是有一系列指令和参数构成的脚本,一个dockerfile里面包含了构建整个镜像的完整指令,通过docker build 执行dockerfile中的一系列指令自动构建镜像。

    常用指令:

      FROM:基础镜像,FROM命令必须是dockerfile的首个命令,定义从哪一层镜像开始

      LABEL:为镜像生成元数据标签信息,用来表明这个Image的作者,版本,描述等信息,当然LABEL也可以不写,这个关键字不是必须的

      USER:指定运行容器时的用户名或UID,后续RUN也会使用指定用户

      RUN:RUN命令时dockerfile执行命令的核心部分,它接受命令作为参数并用于创建镜像,每条RUN命令子啊当前基础镜像上执行,并且会提交一个新镜像层 

        (RUN需要注意的一点,每次运行RUN一次都会产生新的layer(层), 我们知道一个image是有很多层的,所以,最佳的实践是一个RUN 里面写多个命令,用&&连接多个命令,为了可读性和美观,使用换行符,多行显示RUN里面要执行的命令。)

      WORKDIR:设置CMD指明的命令的运行目录,为后续的RUN,CMD,ENTRYPOINT,ADD指令配置工作目录(写工作目录的时候尽量写绝对路径,不要写相对目录)

      ENV:容器启动的环境变量

      ARG:构建环境的环境变量

      COPY,ADD: 作用都是把本地的文件添加到Docker image里面。两者唯一的区别是,ADD的功能更强大一些,ADD会拷贝文件并且解压文件,COPY只能拷贝文件。

      CMD:容器运行时执行的默认命令

      ENTRYPOINT:指定容器的入口

      HEALTHCHECK:容器健康状态检查

    #基于nginx:1.17.9镜像构建
    FROM nginx:1.17.9
    
    #指定信息
    LABEL maintainer="abc@qq.com"
    
    #设置环境变量
    ENV NGINX_VERSION 1.17.9
    ARG work_pwd=/data/html/
    
    #切换root用户
    USER root
    
    #执行命令,安装curl软件,设置软链接把nginx服务的日志显示到终端
    RUN apt-get -yq update && apt-get install -y curl && 
    ln -sf /dev/stdout /var/log/nginx/access.log && 
    ln -sf /dec/stderr /var/log/nginx/error.log
    
    #挂载卷
    VOLUME ["/data"]
    
    #设置工作目录
    WORKDIR $work_pwd
    
    #复制index.html 文件到 WORKDIR 目录下
    COPY index.html .

    #映射80端口
    EXPOSE 80

    #此处 CMD 作为 ENTRYPOINT 的参数
    CMD ["nginx","-g","daemon off;"]
    #CMD ["-g","daemon off;"]
    #CMD nginx -g daemon off
    #设置容器启动的命令
    #ENTRYPOINT ["nginx","-g","daemon off;"]

    STOPSIGNAL STGRTMAX

    #检查容器健康,通过访问Nignx服务80端口,来判断容器服务是否运行正常
    HEALTHCHECK --interval=5s --timeout=3s
    CMD curl -fs http://localhost/ || exit 1

    发布一个镜像到私有docker仓库

      0. 安装docker,并启动docker服务

      1. 拉取docker registry镜像

        docker pull registry

      2. 启动registry

        docker run -d -p 5000:5000 --restart always --name registry registry:2

        #第一个5000是这个虚拟机本身的端口,第二个是5000是这个registry容器里的端口是5000.

      3. 测试registry这台机器的5000端口是否可用

        telnet  IP 5000

      4. 发布镜像到私有registry

        docker build -t IP:5000/hello-docker .

        docker push IP:5000/hello-docker

      5. 验证发布是否成功

      浏览器访问

          IP:5000/v2/hello-docker/tags/list #发送请求

          IP:5000/v2/_catalog  #查询全部pushed的镜像

      

          

  • 相关阅读:
    e:可以解包多种存档花样的小工具
    Envy-便当的显卡驱动装置脚本
    用 Timer Applet 做 GTD 经管
    Sabayon:治理 GNOME 用户的设置
    网管的心得体会
    WinAPI: WindowFromPoint 获取指定点所在窗口的句柄
    WinAPI: SetLayeredWindowAttributes 设置窗口的透明
    谈谈 Delphi 的类型与指针[1]
    全局探色器
    说到"计算器", 建议大家用它进行"进制转换"
  • 原文地址:https://www.cnblogs.com/jaigejiayou/p/12721667.html
Copyright © 2011-2022 走看看