当前位置 博文首页 > 文章内容

    yuyixiong的博客:docker 及docker compose笔记

    作者:shunshunshun18 栏目:未分类 时间:2021-12-02 22:47:57

    本站于2023年9月4日。收到“大连君*****咨询有限公司”通知
    说我们IIS7站长博客,有一篇博文用了他们的图片。
    要求我们给他们一张图片6000元。要不然法院告我们

    为避免不必要的麻烦,IIS7站长博客,全站内容图片下架、并积极应诉
    博文内容全部不再显示,请需要相关资讯的站长朋友到必应搜索。谢谢!

    另祝:版权碰瓷诈骗团伙,早日弃暗投明。

    相关新闻:借版权之名、行诈骗之实,周某因犯诈骗罪被判处有期徒刑十一年六个月

    叹!百花齐放的时代,渐行渐远!



    Docker hub:
    usr:yuyixiong
    pw: yuyixiong
    email: 900925.com
    hub 查看 :https://www.runoob.com/docker/docker-repository.html
    1:docker login
    2: docker search
    3: docker pull image_name:tag —> docker pull [OPTIONS] NAME[:TAG|@DIGEST]

    Docker:
    容器管理命令:
    docker container --help
    eg: top, ls, rename, rm ,etc。。。。

    后台运行
    在大部分的场景下,我们希望 docker 的服务是在后台运行的,我们可以过 -d 指定容器的运行模式。
    $ docker run -itd --name ubuntu-test(name) ubuntu(image) /bin/bash
    
    停止docker
    $ docker stop <容器 ID>
    
    重启docker
    $ docker restart <容器 ID>
    
    进入容器:
    docker exec eg:docker exec -it mynginx(容器ID) /bin/sh
    docker attach 容器id, 退出容器终端, 会导致容器停止(不推荐)
    
    删除容器:
    docker rm -f 1e560fca3906
    
    下载/拉取镜像:
    docker pull ubuntu(image name):13.10(version)
    
    查找镜像:
    docker search 镜像名称
    
    查看镜像:
    docker images 
    
    删除镜像
    docker rmi 镜像名称
    
    创建镜像:
    		当我们从 docker 镜像仓库中下载的镜像不能满足我们的需求时,我们可以通过以下两种方式对镜像进行更改。
    
    		1、从已经创建的容器中更新镜像,并且提交这个镜像
    		2、使用 Dockerfile 指令来创建一个新的镜像
    				a:创建Dockerfile 
    				b:docker build -t runoob/centos:6.7(image name) .(dockerfile dir)
    					参数说明:
    					-t :指定要创建的目标镜像名
    					. :Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径
    				c: docker run -t -i runoob/centos:6.7  /bin/bash   使用新的镜像来创建容器
    设置镜像标签:
    	docker tag 860c279d2fec(tag name) runoob/centos:dev(new tag)
    	docker tag 镜像ID,这里是 860c279d2fec ,用户名称、镜像源名(repository name)和新的标签名(tag)。
    	
    	
    查看docker实例:
    docker ps
    docker ps -a --no-trunc 可以查看完整的COMMAND
    
    export 和 import 导出的是一个容器的快照, 不是镜像本身, 也就是说没有 layer。
    你的 dockerfile 里的 workdir, entrypoint 之类的所有东西都会丢失,commit 过的话也会丢失。
    
    快照文件将丢弃所有的历史记录和元数据信息(即仅保存容器当时的快照状态),而镜像存储文件将保存完整记录,体积也更大。
    
     docker save 保存的是镜像(image),docker export 保存的是容器(container);
     docker load 用来载入镜像包,docker import 用来载入容器包,但两者都会恢复为镜像;
     docker load 不能对载入的镜像重命名,而 docker import 可以为镜像指定新名称。
     
     问题:
    	docker报错:Cannot connect to the Docker daemon. Is the docker daemon running on this host?
    	查看docker 服务是否启动:systemctl status docker.service 然后restar一下
    
    下载镜像:
    docker pull ubuntu
    docker pull ubuntu:18.04
    docker pull ubuntu@sha256:82becede498899ec668628e7cb0ad87b6e1c371cb8a1e597d83a47fac21d6af3
    
    docker pull 下来的镜像文件存放的位置: /var/lib/docker/containers/
    

    Docket Compose:
    Compose 使用的三个步骤:

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

    docker commit :从容器创建一个新的镜像
    docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
    OPTIONS说明:
    -a :提交的镜像作者;
    -c :使用Dockerfile指令来创建镜像;
    -m :提交时的说明文字;
    -p :在commit时,将容器暂停。
    例1
    docker commit -a “runoob.com” -m “my apache” a404c6c174a2 mymysql:v1
    例2

    		docker commit -m  ""   -a  ""   [CONTAINER ID]  [给新的镜像命名]
    		docker commit -m  ""   -a  "" aa myelasticsearch:1.0
    

    adc7d969aa15 registry.sensetime.com/viperlite/viper-lite:v2.3.0-dd32e2e-nolic-arm64-cuda10 “bash -c './bin/vide…” 22 hours ago Up 4 hours 0.0.0.0:8132->8132/tcp vps-worker-face

    be14290e6cdcfec0f42d89a908f69d3ab7fb3231a14ab579799de9e0211b8b34 mysql/mysql-server:8.0-aarch64 “/entrypoint.sh --default-authentication-plugin=mysql_native_password”

    mysqld --default-authentication-plugin=mysql_native_password --user=mysql

    /run/mysqld/
    /usr/sbin/mysqld

    /lib/libssl.so.1.1
    find: ‘/proc/1/task/5593/fdinfo/368’: No such file or directory
    /usr/lib/aarch64-linux-gnu/libssl.so.1.1

    Docker 网络:
    sensetime@sensetime-desktop:/$ docker network ls
    NETWORK ID NAME DRIVER SCOPE
    5a25ffa22446 bridge bridge local
    f47a015ec643 compose_default bridge local
    0afd801763ec host host local
    efda02e01096 none null local
    0c4b4c164320 shisy_default bridge local
    db37d9ee5bf7 viper-lite bridge local

    	查看某个网络的详细信息:
    	docker network inspect viper-lite
    	
    	创建网络:
    	docker network create -d bridge viper-lite
    	
    	sensetime@sensetime-desktop:/$ ip link show docker0  docker中默认网络的bridge
    	docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default 
    	link/ether 02:42:e3:77:cf:b4 brd ff:ff:ff:ff:ff:ff
    	
    	docker启动时, 可以通过--network来指定采用那个网络
    

    Docker 卷与数据持久化:docker卷数据在主机的/var/lib/docker/volume目录下,持久化, 卷的数据不会因为容器被删除, 数据就会删除, 与容器的生命周期是解耦的
    docker volume create
    docker volume ls
    docker volume insprect
    docker volume prune :谨慎使用,会删除未被容器或者服务副本使用的全部卷。
    docker volume rm
    docker load:
    docker load -i v3.0.1-20210919.all.M8.tar.gz
    docker load < v3.0.1-20210919.all.M8.tar.gz
    docker load : 导入使用 docker save 命令导出的镜像。

    	语法
    	docker load [OPTIONS]
    	OPTIONS 说明:
    
    	--input , -i : 指定导入的文件,代替 STDIN。
    
    	--quiet , -q : 精简输出信息。
    

    Dockerfile 编写:
    官网:https://docs.docker.com/develop/develop-images/dockerfile_best-practices/
    菜鸟教程:https://www.runoob.com/docker/docker-dockerfile.html

    ADD
    ADD 指令和 COPY 的使用格类似(同样需求下,官方推荐使用 COPY)。功能也类似,不同之处如下:
    
    ADD 的优点:在执行 <源文件> 为 tar 压缩文件的话,压缩格式为 gzip, bzip2 以及 xz 的情况下,会自动复制并解压到 <目标路径>。
    ADD 的缺点:在不解压的前提下,无法复制 tar 压缩文件。会令镜像构建缓存失效,从而可能会令镜像构建变得比较缓慢。具体是否使用,可以根据是否需要自动解压来决定。
    CMD
    类似于 RUN 指令,用于运行程序,但二者运行的时间点不同:
    
    CMD 在docker run 时运行。
    RUN 是在 docker build。
    ####注意:如果 Dockerfile 中如果存在多个 CMD 指令,仅最后一个生效。####
    
    
    1、创建一个文件夹 viper-lite,并解压到其中
    2、执行install.sh
    

    强制删除所有容器:
    docker container rm -f $(docker ps -a -q)
    删除所有镜像:
    docker image rm -f $(docker images)

    查看Docker 指定容器启动日志:
    docker logs nebula-mini

    license CA:
    :扩容信息, 路数的视频流信息。qutoa信息。

    nebula 笔记:
    创建目录:/home/yuyixiong/go/gopath/src/gitlab.sz.sensetime.com/senseNebula-m/nebula-mini
    make arm=1
    打镜像:
    1:web.zip rootfs.tar 拷贝到nebula-mini西瓜分支代码目录
    2:解压unzip web.zip
    3:在代码根目录(/home/yuyixiong/go/gopath/src/gitlab.sz.sensetime.com/senseNebula-m/nebula-mini)中执行:./pack.sh ./ ./web ./rootfs.tar

    安装docker-compose:
    https://docs.docker.com/compose/install/#install-using-pip

    主要是装Nginx的教程都是centOS的,Ubuntu的完全找不到...
    
    于是就抄着“yum -y install openssl openssl-devel”改成“apt-get install openssl openssl-devel”撸了一下...
    
    这个原因很简单,乌班图根本没这个软件,下载下面几个就行了
    
    sudo apt-get install libpcre3 libpcre3-dev
    //有可能用到
    
    
    On ubuntu 16.04 you can use official apt package without install any other ppa repository.
    
    sudo apt install rustc
    ... and don't forget cargo
    
    sudo apt install cargo
    
    
    standard_init_linux.go:211: exec user process caused "exec format error"
    
    
    sensetime@sensetime-desktop:/usr/local/bin$ sudo ln -s /home/sensetime/.local/bin/docker-compose /usr/local/bin/docker-compose
    ln: failed to create symbolic link '/usr/local/bin/docker-compose/docker-compose': File exists
    sensetime@sensetime-desktop:/usr/local/bin$ ls
    docker-compose  nsys
    sensetime@sensetime-desktop:/usr/local/bin$ sudo rm -rf docker-compose
    sensetime@sensetime-desktop:/usr/local/bin$ sudo ln -s /home/sensetime/.local/bin/docker-compose /usr/local/bin/docker-compose
    sensetime@sensetime-desktop:/usr/local/bin$ docker
    docker          docker-compose  dockerd         docker-init     docker-proxy    
    sensetime@sensetime-desktop:/usr/local/bin$ docker-compose --version
    docker-compose version 1.29.2, build unknown
    

    原理解释:

        您可以docker inspect <image-id>查看一下你所docker pull下来的镜像架构("Architecture"属性),一般出现这种问题,表示镜像架构与运行时架构不匹配导致的。
    

    单独启动一个容器 by yaml
    docker-compose -f infra.yaml -p dms up -d

    cs