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

    docker 杂记

    linux下的docker暂时不在这里写
    1 安装
    windows下的运行linux安装方式有很多。以windows2019为例。

    一 是直接使用虚拟机hy。然后下载执行文件。
    二 使用wsl的linux子系统
    三 使用vmware第三方的虚拟机
    四 使用docker,也用到了hy或者wsl,但是有不同

    直接使用wsl,要先开启wsl,然后下载对应的linux系统(如ubuntu)程序,安装后,运行Ubuntu程序,可以直接进入系统,执行相应的命令,比如安装程序,升级,安装docker等。注意,这个系统和真实的linux或者docker的系统有区别, 不建议生产环境用,测试或者练手还可以。参考
    https://blog.csdn.net/fx9590/article/details/101773861?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.control&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.control

    https://blog.csdn.net/chanjiaozhan5779/article/details/100969255?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.control

    https://www.cnblogs.com/yankliu-vip/p/Docker-on-Windows-Server-2019.html

    https://bcthomas.com/2019/02/getting-started-with-linux-containers-on-windows-server-2019/

    https://www.altaro.com/msp-dojo/linux-containers-windows-server-2019/

    使用hy,也要先开启hy,然后可以有2种操作,1直接创建虚拟机。这里不讲 2 通过docker来使用。

    2 使用docker

    1 先安装hv 和docker
    2 (1) 这时是不能用linux的镜像的。 使用包含linux内核文件的程序 。开启容器时, 要加变量 --platform=linux ,表示是在linux下运行的镜像。 参考https://www.cnblogs.com/yankliu-vip/p/Docker-on-Windows-Server-2019.html 效果好一些。但是仍然有部分镜像在里面运行会有问题。
    (2) 安装docker desktop。 这种方式可以在直接在docker desktop的配置里设置,使用何种内核(Linux 或者windows内核方式)运行。 注意,如果系统安装了wsl。docker desktop的linux镜像,默认使用wsl。

    docker管理软件Portainer

    linux安装 docker run -d --name portainerUI -p 9000:9000 -v .pipedocker_engine:.pipedocker_engine portainer/portainer
    windows安装docker run -d -p 8000:8000 -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce

    https://blog.csdn.net/chj_1224365967/article/details/109092351

    常用docker命令
    sudo docker run -i -t ubuntu /bin/bash  #进入容器 以ubuntu 为例
    docker volume create --name data_3 #创建数据卷
    docker ps -a #查询已有的实例
    docker rm -f a658 #(a658  容器名或者id)删除已经停止运行的实例
    docker stop ID/NAMES #停止容器实例
    docker images #查询已有的实例
    docker rmi -f  imageid #删除id为imageid的镜像(-f表示强制操作)
    docker rm -f `docker ps -a -q` #删除所有容器
    docker rmi -f `docker images -q`  #删除所有镜像
    #使用此命令加载完image后,其名字和tag均为none
    #可以使用下面命令修改或者设置其image对应的tag
    docker tag 镜像ID tomcat:8.5 #tomcat:8.5为修改后的镜像名称和标签,冒号前面为镜像名称,冒号后面为镜像版本
    
    #设置容器的重启策略
    docker update --restart always 3ec28be7254a #//容器ID   如果容器已经被创建,我们想要修改容器的重启策略
     --restart 多个参数值选择
    no  不自动重启容器. (默认值)
    on-failure  容器发生error而退出(容器退出状态不为0)重启容器,可以指定重启的最大次数,如:on-failure:10
    unless-stopped  在容器已经stop掉或Docker stoped/restarted的时候才重启容器,手动stop的不算
    always 在容器已经stop掉或Docker stoped/restarted的时候才重启容器
    
    docker维护
    docker container top lamp  #查看lamp容器内的进程列表和位置
    docker top lamp -aux       #查看lamp容器内的进程状态 比如cup 内存
    docker container stats     #查看各个容器的运行资源占用情况,默认会显示一个实时变化的列表,展示每个容器的CPU、MEM的使用率和可用量,还有网络和IO的情况。ps:容器启动时如果没有特别指定内存 limit 、stats命令会显示host的内存总量,但这并不意味着每个容器都能使用到这么多大的内存。
    docker container stats lamp admiring_bohr #查询容器lamp 和admiring_bohr运行状况。 
    
    容器的启动和停止
    #启动docker:
    systemctl start docker
    #停止docker:
    systemctl stop docker
    #重启docker:
    systemctl restart docker
    #查看docker状态:
    systemctl status docker
    #开机启动:
    systemctl enable docker
    #查看docker概要信息:
    docker info
    #查看docker帮助文档:
    docker --help
    进入Docker容器之后,如果想退出容器又不关闭容器,可以使用Ctrl+P+Q
    #配置环境变量 
    docker run --env-file    config.env  
    参考:https://yeasy.gitbook.io/docker_practice/image/dockerfile/env
    config.env文件
    # This is a comment
    VAR1=value1 
    VAR2=value2 
    USER # which takes the value from the local environment 
    
    参数说明

    --detach 保证容器一直运行

    查看容器日志
    #查看指定时间后的日志,只显示最后100行:
    docker logs -f -t --since="2019-06-08" --tail=100 CONTAINER_ID
    
    #查看某时间之后的日志:
    docker logs -t --since="2019-06-08" CONTAINER_ID
    
    #查看某时间段日志:
    docker logs -t --since="2019-06-08" --until "2019-06-09" CONTAINER_ID
    
    #查看最近30分钟的日志:
    docker logs --since 30m CONTAINER_ID
    
    进入容器
    docker run -itd ubuntu:14.04 /bin/bash   #容器本身的运行进程。开发的时候使用
    docker exec -it 775c7c9ee1e1 /bin/bash   # 新起一个进程,多用于生产环
    

    备注: 另有 nsenter(工具安装在宿主机上) 或ssh(容器内安装) 的方式

    保存为文件及从文件导入镜像的方法

    保存到本地 并导入镜像的方法

    docker save -o java8.tar lwieske/java-8  # java8.tar要保存的文件名, lwieske/java-8要保存的镜像
    docker save > nginx.tar nginx:latest  
    docker load --input 文件 #例如docker load < java8.tar
    docker load < 文件名     #或者docker load -i nginx.tar
    docker export -o nginx-test.tar nginx-test #导出文件
    docker import nginx-test.tar nginx:imp #导入文件
    

    区别
    1 export命令导出的tar文件略小于save命令导出的
    2 export命令是从容器(container)中导出tar文件,而save命令则是从镜像(images)中导出
    3 基于第二点,export导出的文件再import回去时,无法保留镜像所有历史(即每一层layer信息,不熟悉的可以去看Dockerfile),不能进行回滚操作;而save是依据镜像来的,所以导入时可以完整保留下每一层layer信息。如下图所示,nginx:latest是save导出load导入的,nginx:imp是export导出import导入的
    markdown
    建议
    可以依据具体使用场景来选择命令
    若是只想备份images,使用save、load即可
    若是在启动容器后,容器内容有变化,需要备份,则使用export、import

    windows对docker容器挂载卷

    在windows平台挂载docker的卷的时候,需要在桌面程序先进行指定挂载位置然后再运行。
    markdown

    docker run -d  --name sitetest  -p 8066:80   --restart=always  -v C:UsersAdministratorDocumentsdockershare:/app/wwwroot  -e SSCMS_SECURITY_KEY=e2a3d303-ac9b-41ff-9154-930710af0845   -e SSCMS_DATABASE_TYPE=SQLite   sscms/core
    

    上面的例子表示安装sscms/core镜像。端口映射8066到容器80端口。重启策略为总是。环境变量SSCMS_DATABASE_TYPE为SQLite SSCMS_SECURITY_KEY为e2a3d303-ac9b-41ff-9154-930710af0845
    重点来了: 把本地的文件夹C:UsersAdministratorDocumentsdockershare 映射到容器的/app/wwwroot 。 此时进入容器,在wwwroot文件夹下,创建文件或文件夹,在主机的dockershare下可见
    如果是linux 则C:UsersAdministratorDocumentsdockershare类似/home/tmp这样。如果不填写,则默认在"/var/lib/docker/volumes/89d6562b9c1fe10dd21707cb697a5d481b3c1b000a69b762f540fa826a16972a/_data", 89d6562b9c1fe10dd21707cb697a5d481b3c1b000a69b762f540fa826a16972a为随机生成。
    注意的是这种方式生成的卷,在portainer的卷里是看不到的,但是可以在容器详情的卷属性里可以见,并可以修改。

    数据卷和数据卷容器

    参考 https://www.cnblogs.com/sucretan2010/p/11014957.html
    Docker中的数据可以存储在类似于虚拟机磁盘的介质中,在Docker中称为数据卷(Data Volume)。数据卷可以用来存储Docker应用的数据,也可以用来在Docker容器间进行数据共享。数据卷呈现给Docker容器的形式就是一个目录,支持多个容器间共享,修改也不会影响镜像。使用Docker的数据卷,类似在系统中使用 mount 挂载一个文件系统。操作Docker数据卷,需要理解以下几点:
    1)一个数据卷是一个特别指定的目录,该目录利用容器的UFS文件系统可以为容器提供一些稳定的特性或者数据共享。数据卷可以在多个容器之间共享。
    2)创建数据卷,只要在docker run命令后面跟上-v参数即可创建一个数据卷,当然也可以跟多个-v参数来创建多个数据卷,当创建好带有数据卷的容器后,就可以在其他容器中通过--volumes-froms参数来挂载该数据卷了,而不管该容器是否运行。也可以在Dockerfile中通过VOLUME指令来增加一个或者多个数据卷。

    3)如果有一些数据想在多个容器间共享,或者想在一些临时性的容器中使用该数据,那么最好的方案就是你创建一个数据卷容器,然后从该临时性的容器中挂载该数据卷容器的数据。这样,即使删除了刚开始的第一个数据卷容器或者中间层的数据卷容器,只要有其他容器使用数据卷,数据卷都不会被删除的。

    4)不能使用docker export、save、cp等命令来备份数据卷的内容,因为数据卷是存在于镜像之外的。备份方法: 创建一个新容器,挂载数据卷容器,同时挂载一个本地目录,然后把远程数据卷容器的数据卷通过备份命令备份到映射的本地目录里面。如下:

    # docker run --rm --volumes-from DATA -v $(pwd):/backup busybox tar cvf /backup/backup.tar /data
    

    5)可以把一个本地主机的目录当做数据卷挂载在容器上,同样是在docker run后面跟-v参数,不过-v后面跟的不再是单独的目录了,它是[host-dir]:[container-dir]:[rw|ro]这样格式的,其中host-dir是一个绝对路径的地址,如果host-dir不存在,则docker会创建一个新的数据卷,如果host-dir存在,但是指向的是一个不存在的目录,则docker也会创建该目录,然后使用该目录做数据源。

    Docker Volume数据卷可以实现:
    1绕过“拷贝写”系统,以达到本地磁盘IO的性能,(比如运行一个容器,在容器中对数据卷修改内容,会直接改变宿主机上的数据卷中的内容,所以是本地磁盘IO的性能,而不是先在容器中写一份,最后还要将容器中的修改的内容拷贝出来进行同步。)
    2绕过“拷贝写”系统,有些文件不需要在docker commit打包进镜像文件。
    3数据卷可以在容器间共享和重用数据
    4数据卷可以在宿主和容器间共享数据
    5数据卷数据改变是直接修改的
    6数据卷是持续性的,直到没有容器使用它们。即便是初始的数据卷容器或中间层的数据卷容器删除了,只要还有其他的容器使用数据卷,那么里面的数据都不会丢失
    查看数据卷的详细信息

    docker volume inspect 数据卷名称

    docker volume ls (查看全部数据卷)

    删除数据卷

    docker volume rm 数据卷名称

    应用数据卷
    当你映射卷时,如果不存在,自动创建

    docker run -v 数据卷名称:容器内部路径 镜像id

    docker run -v 路径:容器内部的路径 镜像id

    具名挂载与匿名挂载
    具名挂载 -v 卷名:容器内路径 (如果以/开头表示指定路径挂载,就不是具名挂载了)
    匿名挂载 -v 容器内路径 (随机生成卷名) 指定路径挂载 -v /宿主机路径:容器内路径
    所有docker容器内的卷,没有指定目录的情况下都是在/var/lib/docker/volumes/卷名/_data下 数据卷读写权限
    通过 -v 容器内路径: ro
    rw 改变读写权限
    ro readonly #只读 rw
    readwrite #读写
    一旦设置了容器权限,容器对我们挂载出来的内容就有限定了

    docker run -d -P --name nginx -v juming-nginx:/etc/nginx:ro nginx ro

    只要看到ro就说明这个路径只能通过宿主机来操作,容器内部是无法操作


    作者:过错
    出处:http://www.cnblogs.com/wang2650/
    关于作者:net开发做的久而已。十余年时光虚度!
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。如有问题,可以邮件:wang2650@163.com  联系我,非常感谢。

  • 相关阅读:
    vue cli
    vue element-ui
    vue mint-ui
    vue富文本编辑器
    vue-单文件组件相关
    axios
    vue Router
    css 行内元素和块级元素的一些注意事项
    golang协程和变量
    Internet地址介绍
  • 原文地址:https://www.cnblogs.com/wang2650/p/14246451.html
Copyright © 2011-2022 走看看