• [技术干货] docker-compose restart 介绍使用
    在 docker-compose.yml 文件中,restart 选项用于指定 Docker 容器的重启策略,以便在容器退出或失败时自动重启它。这个选项非常有用,特别是在生产环境中,可以提高服务的可用性和可靠性。重启策略选项Docker 支持以下几种重启策略:no:默认值,不会自动重启容器。always:总是重启容器,无论退出状态如何。on-failure:仅当容器以非零退出代码停止时才重启。unless-stopped:总是重启容器,除非容器被手动停止或 Docker 服务被停止。基本语法在 docker-compose.yml 文件中,restart 选项位于服务定义下。例如:version: '3.8'services: web: image: nginx:latest ports: - "80:80" restart: always app: build: ./app ports: - "5000:5000" restart: on-failure db: image: postgres:13 volumes: - db-data:/var/lib/postgresql/data environment: - POSTGRES_DB=mydatabase - POSTGRES_USER=user - POSTGRES_PASSWORD=secret restart: unless-stoppedvolumes: db-data:示例使用restart: no这是默认设置,即使未显式设置 restart 选项,容器也不会自动重新启动。services: example-no-restart: image: someimage restart: norestart: always无论容器的退出状态如何,总是自动重启容器。services: example-always-restart: image: someimage restart: alwaysrestart: on-failure仅在容器因错误而退出时重新启动(退出代码不为 0)。services: example-on-failure: image: someimage restart: on-failure你还可以指定最大重启次数,例如最多重试 5 次:services: example-on-failure-with-max-retries: image: someimage restart: on-failure deploy: restart_policy: condition: on-failure max_attempts: 5restart: unless-stopped容器将始终重启,除非它们被手动停止或 Docker 服务被停止。services: example-unless-stopped: image: someimage restart: unless-stopped使用场景开发环境:在开发环境中,你可能希望手动控制容器的生命周期,因此可以使用 restart: no。测试/预生产环境:在这些环境中,当某些服务需要高可用性时,可以使用 restart: on-failure,以确保在服务崩溃后自动重启。生产环境:在生产环境中,通常会使用 restart: always 或 restart: unless-stopped 来确保服务的持续可用性。结合其他选项在一些复杂场景中,你可能希望与其他选项结合使用,例如健康检查和重启策略:services: app: image: myapp:latest restart: on-failure healthcheck: test: ["CMD", "curl", "-f", "http://localhost"] interval: 1m30s timeout: 10s retries: 3 deploy: restart_policy: condition: on-failure delay: 5s max_attempts: 3 window: 120s总结restart 选项用于设置 Docker 容器的重启策略,以提高服务的可用性和可靠性。常用的重启策略包括 no, always, on-failure, 和 unless-stopped。不同的策略适用于不同的环境和使用场景,如开发、测试、预生产、和生产环境。可以结合其他选项如健康检查和部署策略来实现更复杂的配置。通过正确配置重启策略,你可以显著提高应用的稳定性和可用性。
  • [问题求助] 服务器无法登录昇腾镜像仓库
    我的昇腾服务器无法登录昇腾镜像仓库,每次使用如下命令都会报错docker login -u xxxxxxx ascendhub.huawei.com错误信息:Error response from daemon: Get "https://ascendhub.huawei.cn/v2/": received unexpected HTTP status: 500 Internal Server Error我可以ping通ascendhub.huawei.cn
  • [技术干货] 使用docker搭建kms服务器-转载
    仅个人工作时对操作步骤进行记录,无任何安全、可行性保证,转载请标注出处!  配置IP地址,使其可正常上网。  2.配置yum源  #安装yum工具  yum -y install yum-utils  #下载配置阿里的yum源  wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo  #下载配置docker的yum源  yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo  3.安装docker  yum -y install docker-ce.x86_64 docker-ce-cli.x86_64 containerd.io.x86_64  会报错提示有安装包冲突,输入—allowerasing  yum -y install docker-ce.x86_64 docker-ce-cli.x86_64 containerd.io.x86_64 --allowerasing  4.docker安装完成后,配置docker镜像加速,使docker从国内网站下载镜像   sudo mkdir -p /etc/docker  sudo tee /etc/docker/daemon.json <<-'EOF'  {    "registry-mirrors": ["https://fw80gpy5.mirror.aliyuncs.com"]  }  EOF  sudo systemctl daemon-reload  sudo systemctl restart docker  5.下载网上已配置好的kms镜像  docker pull luodaoyi/kms-server   6.运行该镜像并配置开机自启,使本地1688端口对应镜像中1688端口,运行后docker ps -a 可看见镜像已正常拉起  docker run -itd -p 1688:1688 --name kms --restart always luodaoyi/kms-server   7.测试能否正常激活windows和office  7.1先添加DNS,或直接使用IP也可以   7.2测试1688端口已正常放通   7.3Windows已激活成功,注意当前只测试了server和win10企业版可激活   slmgr /skms 服务器IP  slmgr /ato  slmgr /ipk 输入序列号  7.4 激活office  激活office需进入office文件ospp.vbs的存放路径运行命令  cd C:\Program Files (x86)\Microsoft Office\Office16  cscript ospp.vbs /sethst:kms.botsing.com  cscript ospp.vbs /act  或者直接带路径进行激活,注意 每个office版本的ospp文件路径可能不一样  cscript "C:\Program Files (x86)\Microsoft Office\Office16\OSPP.VBS" /sethst:kms.botsing.com  cscript "C:\Program Files (x86)\Microsoft Office\Office16\OSPP.VBS" /act   此时office已提示激活成功  8.配置加域自动激活,在域控DNS服务器正向查找区域中中添加SRV    完成后,单击确定,然后单击完成。  在域内的电脑只要是批量版(VL)的系统或office即可自动激活 ————————————————                              版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。                          原文链接:https://blog.csdn.net/u011387552/article/details/133810235 
  • [技术干货] 本地Vmware快速安装docker以及docker-compose
    1. Vmware 虚拟机及网络配置参考指南:cid:link_12. Docker 安装2.1 下载资源包根据需要选择不同版本的docker:Index of linux/centos/7/x86_64/stable/Packages/ (docker.com)wget cid:link_0containerd.io-1.2.6-3.3.el7.x86_64.rpm wget cid:link_0docker-ce-cli-19.03.8-3.el7.x86_64.rpm wget cid:link_0docker-ce-19.03.8-3.el7.x86_64.rpm2.1 安装包[root@localhost ~]# rpm -Uvh *.rpm --nodeps --force 警告:containerd.io-1.2.6-3.3.el7.x86_64.rpm: 头V4 RSA/SHA512 Signature, 密钥 ID 621e9f35: NOKEY 准备中... ################################# [100%] 正在升级/安装... 1:docker-ce-cli-1:19.03.8-3.el7 ################################# [ 33%] 2:containerd.io-1.2.6-3.3.el7 ################################# [ 67%] 3:docker-ce-3:19.03.8-3.el7 ################################# [100%] ## 4. 查看版本 [root@localhost ~]# docker -v Docker version 19.03.8, build afacb8bdocker 常见命令## 1. 启动 systemctl start docker ## 2. 停止 systemctl stop docker ## 3. 状态 systemctl status docker ## 4. 开机自启动 systemctl enable docker关闭 SELinux 以及防火墙SELinux默认安装在Fedora和Red Hat Enterprise Linux上如果不关闭会遇到的错误:Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?## 1. 查看报错 [root@localhost ~]# docker ps Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running? ## 2.临时关闭,重启后失效 [root@localhost ~]# setenforce 0 ## 3.重启服务 [root@localhost ~]# systemctl restart docker ## 4.正常展示 [root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 如果不关闭防火墙会遇到的错误:Error response from daemon: Failed to Setup IP tables:## 1. 查看防火墙状态 [root@localhost ~]# systemctl status firewalld ## 2. 关闭防火墙 [root@localhost ~]# systemctl stop firewalld ## 3.重启服务 [root@localhost ~]# systemctl disable firewalld ## 4.重启docker [root@localhost ~]# systemctl restart dockerDocker-Compose 安装Docker-Compose 的执行和系统的 PATH 环境变量## 1.查看环境,例子展示 docker-compose 都可以正常运行 [root@localhost bin]# echo "$PATH" /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin ## 2.并下载资源 [root@localhost ~]# curl -L https://github.com/docker/compose/releases/download/v2.6.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose ## 3.赋予执行权限 [root@localhost bin]# chmod +x docker-compose ## 4.查看版本 [root@localhost bin]# docker-compose -v Docker Compose version v2.6.0
  • [容器专区] build_sdk_base.sh运行报错
    运行环境为VMvare下的Ubuntu18.04,执行build_sdk_base.sh文件后报错,试了好多办法也没解决成
  • [容器类] acl.rt.set_device报507033错误
    """[EVENT] PROFILING(78,python):2024-03-11-02:22:20.914.096 [msprof_callback_impl.cpp:199] >>> (tid:78) Started to register profiling ctrl callback.[EVENT] PROFILING(78,python):2024-03-11-02:22:25.859.341 [msprof_callback_impl.cpp:78] >>> (tid:78) MsprofCtrlCallback called, type: 255[EVENT] PROFILING(78,python):2024-03-11-02:22:25.859.666 [prof_acl_mgr.cpp:1190] >>> (tid:78) Init profiling for dynamic profiling[ERROR] DRV(78,python):2024-03-11-02:22:34.958.504 [ascend][curpid: 78, 78][drv][tsdrv][drvDeviceOpen 360]open devdrv_device(0) failed, fd(-1), errno(14), error(Bad address).[ERROR] DRV(78,python):2024-03-11-02:22:34.958.716 [ascend][curpid: 78, 78][drv][tsdrv][share_log_read 569]invalid para, vdevid(0), devid(0), fid(0) invalid mode(1) or ctx is null.[ERROR] RUNTIME(78,python):2024-03-11-02:22:34.958.800 [npu_driver.cc:2012]78 DeviceOpen:[drv api] drvDeviceOpen failed: deviceId=0, drvRetCode=4![ERROR] RUNTIME(78,python):2024-03-11-02:22:34.958.809 [device.cc:227]78 Init:report error module_type=0, module_name=EE9999[ERROR] RUNTIME(78,python):2024-03-11-02:22:34.958.814 [device.cc:227]78 Init:Failed to open device, retCode=0x7020014, deviceId=0.[ERROR] RUNTIME(78,python):2024-03-11-02:22:34.958.833 [runtime.cc:2109]78 DeviceRetain:Failed to init device.[ERROR] RUNTIME(78,python):2024-03-11-02:22:35.725.754 [runtime.cc:2133]78 DeviceRetain:report error module_type=0, module_name=EE9999[ERROR] RUNTIME(78,python):2024-03-11-02:22:35.725.935 [runtime.cc:2133]78 DeviceRetain:Check param failed, dev can not be NULL![ERROR] RUNTIME(78,python):2024-03-11-02:22:35.725.988 [runtime.cc:1946]78 PrimaryContextRetain:report error module_type=0, module_name=EE9999[ERROR] RUNTIME(78,python):2024-03-11-02:22:35.725.992 [runtime.cc:1946]78 PrimaryContextRetain:Check param failed, dev can not be NULL![ERROR] RUNTIME(78,python):2024-03-11-02:22:35.726.001 [runtime.cc:1973]78 PrimaryContextRetain:report error module_type=0, module_name=EE9999[ERROR] RUNTIME(78,python):2024-03-11-02:22:35.726.005 [runtime.cc:1973]78 PrimaryContextRetain:Check param failed, ctx can not be NULL![ERROR] RUNTIME(78,python):2024-03-11-02:22:35.726.013 [api_impl.cc:1315]78 NewDevice:report error module_type=0, module_name=EE9999[ERROR] RUNTIME(78,python):2024-03-11-02:22:35.726.017 [api_impl.cc:1315]78 NewDevice:Check param failed, context can not be null.[ERROR] RUNTIME(78,python):2024-03-11-02:22:35.726.025 [api_impl.cc:1336]78 SetDevice:report error module_type=0, module_name=EE9999[ERROR] RUNTIME(78,python):2024-03-11-02:22:35.726.029 [api_impl.cc:1336]78 SetDevice:new device failed, retCode=0x7010006[ERROR] RUNTIME(78,python):2024-03-11-02:22:35.726.037 [logger.cc:615]78 SetDevice:Set device failed, device_id=0, deviceMode=0.[ERROR] RUNTIME(78,python):2024-03-11-02:22:35.726.067 [api_c.cc:1469]78 rtSetDevice:ErrCode=507033, desc=[device retain error], InnerCode=0x7010006[ERROR] RUNTIME(78,python):2024-03-11-02:22:35.726.071 [error_message_manage.cc:49]78 FuncErrorReason:report error module_type=3, module_name=EE8888[ERROR] RUNTIME(78,python):2024-03-11-02:22:35.726.079 [error_message_manage.cc:49]78 FuncErrorReason:rtSetDevice execute failed, reason=[device retain error][ERROR] ASCENDCL(78,python):2024-03-11-02:22:35.726.091 [device.cpp:66]78 aclrtSetDevice: open device 0 failed, runtime result = 507033.[EVENT] IDEDH(78,python):2024-03-11-02:22:39.586.549 [adx_server_manager.cpp:27][tid:78]>>> start to deconstruct adx server manager"""
  • [技术干货] Docker常用语法--新建&启动
    新建并启动容器:第一步,在指定镜像上创建一个可写的容器层第二步,使用指定的命令(COMMAND)启动它简而言之,docker run 相当于执行了两个使用docker run命令即可新建并启动一个容器,该命令是我们最常用的命令之一,它有很多选项,下面列举一些常见的选项,通过run命令创建的容器,默认是会运行的。docker run [OPTIONS] IMAGE [COMMAND] [ARG...]上面的命令就是Docker创建新容器的基本命令,其中:OPTIONS:可以指定容器的各种选项,如端口映射、数据卷等。IMAGE:指定容器所使用的镜像。COMMAND:可以覆盖镜像中默认的启动命令。ARG:传递给启动命令的参数。如表:Name,shorthand    Default    Description--detach , -d                           后台运行容器,并打印容器ID--publish-all , -p                   随机映射所有端口--publish , -p                           指定端口映射,该选项有以下四种格式:                                                ip:hostPort:containerPort                                                ip::containerPort                                                hostPort:containerPort                                                containerPort--net owrk                               指定网络模式,该选项有以下四种可选参数                                                --network=bridge:默认选项,表示连接到默认的网桥                                                --network=host:容器使用宿主机的网络                                                --network=container:NAme_or_ID:告诉docker让新建的容器使用已有的网络配置                                                --network=none:不配置该容器的网络,用户可自定义网络配置示例1:docker run java /bin/echo 'hello world'这样终端会打印helloworld的字样 跟在本地直接执行/bin/echo  hello world一样。示例2:docker run -d -p 91:80  nginx这样就可启动一个nginx容器,访问http://docker宿主机 IP:91/.除了使用命令行的方式创建容器,还可以使用Dockerfile创建。FROM ubuntu RUN apt-get update && \ apt-get install -y nginx CMD ["nginx", "-g", "daemon off;"]上面的Dockerfile中指定了基础镜像为ubuntu,然后安装了nginx,并设置了启动命令。使用以下命令在当前目录下构建镜像:docker build -t myimage .使用以下命令创建新容器:docker run -d --name mycontainer -p 80:80 myimage上面的命令将创建一个名为mycontainer的容器,将主机的80端口映射到容器的80端口,并以myimage镜像为基础启动容器。
  • Docker语法——构建&加载
    加载镜像:         Docker是一款用于快速部署应用程序的开源容器引擎。在使用Docker时,镜像是重要的概念之一。镜像是Docker容器的基础组成部分,它包含了一个完整的文件系统,以及运行该文件系统的所有依赖项。这里我们介绍一下使用docer load 命令即可加载镜像 。让我们来看看具体步骤。docker load --input /path/to/image.tar命令格式: docker load [OPTIONS] docker load命令参数Name, shorthand     Default    Description--input,-i                                从文件加载而非标准输入--quiet,-q              false         静默加载示例: #从busybox.tar文件中加载镜像:docker load < busybox.tardocker load --input busybox.tar如果您已将Docker镜像文件上传到云端,您可以通过下面的命令从云端加载镜像。docker pull your-username/your-image-name:version该命令将从Docker Hub上拉取指定Docker镜像。其中,your-username代表你的Docker Hub账户名,your-image-name代表你上传到Docker Hub的镜像名称,version代表你需要拉取的镜像版本。构建镜像:通过 Dockerfle 构建镜像 命令格式: docker build[OPTIONS] PATH] URL|-Name, shorthand     Default    Description--add-host                              添加自定义从host到IP的映射,格式为(hostip--cache-from                          作为缓存源的镜像-cpuset-mems                        指定允许执行的内存(0-3,0,1)OPTIONS 中的一些常用选项如下: -f:指定 Dockerfile 的文件名,默认为当前目录下的 Dockerfile; -t:指定构建出的镜像的名称及 tag,格式为 name:version; –no-cache:在构建镜像时不使用缓存; –force-rm:在构建结束后删除中间容器。 这些命令和指令基本能够满足绝大多数 Docker 镜像的构建需求,如果需要更复杂的构建过程,您可以查看 Docker 官方文档找到更多有用的命令和指令。 
  • [技术干货] Docker语法-删除&保存
    ​ 删除本地镜像:docker rmi是Docker中删除镜像的主要命令之一。它的基本语法如下:    docker rmi [OPTIONS] IMAGE [IMAGE...]    其中,OPTIONS代表可选的参数,IMAGE代表要删除的镜像名称或者镜像ID。我们可以通过指定多个镜像名称或镜像ID来同时删除多个镜像。该命令会删除指定的镜像及其所有相关的容器。如果要删除的镜像被其他容器所依赖,那么在删除之前需要先停止并删除这些容器。下面是一个实际的例子,演示了如何使用docker rmi命令删除一个镜像:$ docker rmi myimage:1.0这个命令将删除名称为myimage:1.0的镜像。命令格式:docker rmi [OPTIONS] IMAGE [IMAGE...]docker rmi命令参数Name,shorthand    Default    Description--force,-f              false        强制删除--no-prune             false        不移除该镜像的过程镜像,默认移除示例1:删除指定名称的镜像。 docker rmi hello-world 表示删除 hello-world这个镜像 示例2:删除所有镜像。 docker rmi -f $(docker images)保存镜像:在Docker中,我们可以使用docker save命令将镜像保存到本地文件系统中。下面是使用docker save命令保存镜像的示例:docker save -o my_image.tar my_image:tag上述命令将my_image镜像和它的tag保存到my_image.tar文件中。让我们来一步一步地解释这个命令:docker save是Docker命令行界面中用来保存镜像的命令。-o参数可以指定保存镜像的文件名。在这个例子中,我们使用my_image.tar作为输出文件名。保存镜像的过程可能需要一些时间,具体取决于您要保存的镜像的大小和网络速度。最后,您可以使用docker load命令来加载您保存在本地的镜像:docker load -i my_image.tar上述命令将my_image.tar文件加载到Docker镜像的库中,并让您可以使用该镜像来构建和运行Docker容器。总之,docker save和docker load是两个非常有用的Docker命令,它们可以帮助您轻松地保存和加载Docker镜像。使用docker save 即可保存镜像 命令格式: docker save [OPTIONS] IMAGE [IMAGE...]docker save命令参数:Name,shorthand    Default    Description--output,-0                          输出到文件,而非标准输出示例: #将busybox保存为busybox.tar docker save busybox > busybox.tar docker save --output busybox.tar busybox​
  • [技术干货] Docker语法—下载&列出
    下载镜像:使用命令docker pull命令即可从Docker Registry上下载镜像。命令格式:docker pull [options]NAME[:TAG]@DIGEST}参数:Name.shorthand              Default       Description--all tags -a                       false         下载所有标签的镜像--disable -content -trust   true          忽略镜像的校验示例1:        docker pull java执行该命令后,docker会从dockershub中的java仓库下载最新版本的java镜像   ,若镜像下载缓慢,可配置镜像加速器示例2:该命令还可指定想要下载的镜像标签以及docker registry地址,例如docker pull reg.itmuch.com/java:7这样就可以指定docker registry中下载标签为7的java镜像列出镜像:使用docker images命令即可列出已下载的镜像。命令格式:docker images [options][repository[:TAG]]参数:Name.shorthand              Default       Description--all -a                              false           列出本地所有镜像(包括中间镜像层,false默认情况下,过滤中间映像层 )--digests                          false          显示摘要信息--filter,-f                                         显示满足条件的镜像Name.shorthand              Default       Description--format                                              通过Go语育模板文件展示镜像--no-trunc                       false            不截断输出,显示完整的镜像信息--quiet,-q                      false           只显示镜像ID     使用私有镜像仓库    除了默认的公共镜像仓库外,还可以使用私有镜像仓库来下载镜像。要从私有镜像仓库下载镜像,需要在镜像名称前添加私有仓库的地址。例如,要从私有仓库private-registry.example.com下载私有镜像my-image,可以执行以下命令:docker pull private-registry.example.com/my-image示例:docker images docker images java docker images java:8 docker images --digests docker images --filter "dangling=true"# 展示虚悬镜像执行该命令后,会看到类似如下的表格:REPOSITORYTAGIMAGE ID CREATED      TAG     TAGIMAGE ID     CREATED        SIZE java              latest   861e95c114d6  4 weeks ago   643.1 MB hello-world latest   c54a2cc56cbb   5 months ago 1.848 kB该表格包含了5列,含义如下 REPOSITORY:镜像所属仓库名称 TAG:镜像标签。默认是 latest,表示最新 ·IMAGEID:镜像ID,表示镜像唯一标识 ·CREATED:镜像创建时间。 ·SIZE:镜像大小。
  • [技术干货] Docker常用命令—search
    Docker 常用命令,Docker有很多命令,这些命令有助于控制Docker的行为。本次将详细探讨Docker常用命令。首先来讨论 Docker镜像的常用命令。搜索镜像:      可使用docker search命令搜索存放在Docker Hub 中的镜像。         命令格式: docker search [OPTIONS] TERM      Registry       表示使用的 Registry,通常意义上的远程仓库,可以使用私有的 Registry,如果不写,默认为 docker hub 仓库。因为仓库地址在国外,国内有一些大厂提供镜像加速    器,可以加速镜像的下载速度。除了公共的 Registry,也可以搭建私有的 Registry,一般不对外公开,内部进行镜像的共享。私有的 Registry 可以使用 Docker Registry 搭建,也可以使用 Harbor 和 Sonatype Nexus 等。   Docker ID用户在 docker hub 上的用户名,这个相当于命名空间的概念。如果不写,默认是 docker hub 的 library 命名空间下。  Repository仓库名称,相当于一个项目的概念,不能省略。  tag类似于版本的概念,如果不写,默认为 lastest,即最新。docker search命令参数 --automated    false    (已废弃)只列出自动构建的镜像              --filter, -f 根据指定条件过滤结果          --limit    25    搜索结果的最大条数     --no-trunc    false    不截断输出,显示完整的输出     --stars,-s    0    [已废弃]只展示Star 不低于该数值的示例: docker search java 执行该命令后,会在DockerHub中搜索含有java这个关键词的镜像仓库。包含5列,含义如下:·NAME:镜像仓库名称。 ·DESCRIPTION:镜像仓库描述。 ·STARS:镜像仓库收藏数,表示该镜像仓库的受欢迎程度,类似于GitHub的Stars。.OFFICAL:表示是否为官方仓库,该列标记为的镜像均由各软件的官方项目组创建和维护。由结果可知,java这个镜像仓库是官方仓库、而其他仓库都不是官方镜像仓库。 AUTOMATED:表示是否是自动构建的镜像仓库。
  • [技术干货] 下一代Docker来了,会让部署更加丝滑吗?
    在生成式AI应用中,Docker容器逐渐成为了最主流的部署方式,它可以屏蔽环境差异,使程序在任何环境上都有一致的表现,实现“build once,run everywhere”。近日,Dockercon大会发布了Docker与AI结合的新型产品,据悉1小时构建可缩短至1.5分钟,那么开发者们你们觉得Docker与AI结合,会让变成更加丝滑吗?在大家眼中,Docker有怎样通俗易懂的理解方式?都在夸Docker的优点,那它有什么缺点吗?Docker与AI结合,会让部署更加丝滑吗?
  • [技术干货] docker-compose 的语法
    语法格式Docker Compose的语法主要基于YAML(YAML Ain't Markup Language)文件格式来定义多容器应用程序的配置。YAML是一种易于阅读和编写的数据序列化语言,常用于配置文件。在Docker Compose中,您可以使用YAML文件(通常命名为docker-compose.yml)来描述应用程序的服务、网络和卷。下面是一些Docker Compose的语法示例:定义服务:services: web: image: nginx:latest ports: - "8080:80" environment: - NGINX_HOST=example.com在上述示例中,我们定义了一个名为"web"的服务,使用最新的Nginx镜像,并将容器端口80映射到主机端口8080。同时,我们还设置了一个环境变量NGINX_HOST。定义网络:networks: mynetwork: driver: bridge在上述示例中,我们定义了一个名为"mynetwork"的自定义网络,使用桥接驱动程序。定义卷:volumes: myvolume:在上述示例中,我们定义了一个名为"myvolume"的卷,可以在服务中使用它来持久化数据。引用其他Compose文件:include: - ./other-compose.yml在上述示例中,我们可以使用include字段引用其他Compose文件,以便将多个Compose文件合并为一个。这只是Docker Compose语法的一小部分示例,您可以根据需要在YAML文件中定义更多的服务、网络和卷。要了解更详细的语法和配置选项,请参阅Docker Compose的官方文档。请注意,上述示例中的语法可能会因Docker Compose的版本而有所不同。建议查阅官方文档以获取最新和完整的语法信息。docker-compose案例实战让我们来看一个简单的Docker Compose案例,以便更好地理解它的配置语法。假设我们要构建一个简单的Web应用程序,包含一个Web服务器和一个数据库。我们可以使用Docker Compose来定义和管理这两个服务。首先,我们需要创建一个名为docker-compose.yml的配置文件,指定我们的服务和相关配置。以下是一个示例配置:version: '3' services: web: build: . ports: - "5000:5000" depends_on: - db db: image: postgres:latest environment: - POSTGRES_DB=mydatabase - POSTGRES_USER=myuser - POSTGRES_PASSWORD=mypassword这个配置文件定义了两个服务:web和db。每个服务都有自己的配置选项。版本(version):指定了Docker Compose文件的版本,这里使用版本3。服务(services):定义了应用程序中的各个服务。在这个例子中,我们定义了两个服务:web和db。web服务:使用当前目录下的Dockerfile进行构建(build: .),并将容器端口5000映射到主机端口5000(ports: - "5000:5000")。该服务依赖于db服务(depends_on: - db),确保在启动web服务之前先启动db服务。db服务:使用最新的Postgres镜像(image: postgres:latest),并设置了一些环境变量(environment)来初始化数据库。这个配置文件定义了应用程序的基本结构和依赖关系。要运行这个应用程序,我们只需要在包含docker-compose.yml文件的目录中执行以下命令:docker-compose upDocker Compose将根据配置文件创建和启动所需的容器,并自动处理依赖关系。它将构建web服务的镜像,并拉取最新的Postgres镜像来创建db服务。然后,它将启动这两个服务,并将它们连接在一起。这只是一个简单的示例,演示了Docker Compose的基本配置语法和用法。您可以根据自己的需求扩展和定制这个配置文件,添加更多的服务、网络和卷等配置选项。
  • [技术干货] docker-compose 的常用命令
    什么是 docker-composeDocker-compose是一个命令行工具,用于定义和运行多容器Docker应用程序。它允许用户使用YAML文件来配置应用程序所需的多个服务,然后通过一条指令来安装这些服务的所有依赖,完成构建。如何安装docker-compose在Linux中安装Docker,可以按照以下步骤进行:首先,确保你的Linux系统满足Docker的最低要求。Docker支持多种Linux发行版,如Ubuntu、CentOS、Debian等。更新你的Linux系统。使用包管理器(如apt、yum等)更新已安装的软件包和系统补丁。安装Docker的依赖包。这些依赖包包括一些必要的内核模块和工具。具体的依赖包取决于你的Linux发行版。从Docker官方网站下载适用于Linux的安装包。选择一个与你的Linux发行版相对应的版本。安装Docker软件包。使用包管理器(如dpkg、rpm等)安装下载好的Docker软件包。启动Docker服务。安装完成后,使用适当的命令启动Docker服务。具体的命令取决于你的Linux发行版和使用的初始化系统(如systemd、init.d等)。验证Docker是否成功安装。运行一些简单的Docker命令(如docker version、docker info等),确保Docker已经正确安装并运行。具体安装步骤如下#下载docker-compose文件 curl -L https://github.com/docker/compose/releases/download/1.21.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose #将文件复制到/usr/local/bin环境变量下面 mv docker-compose /usr/local/bin #给他一个执行权限 chmod +x /usr/local/bin/docker-compose #查看是否安装成功 docker-compose -version卸载命令是# 卸载docker-compose rm /usr/local/bin/docker-compose为什么要用docker-composeDocker Compose是一个用于定义和运行多容器Docker应用程序的工具,使用它可以更轻松地管理多个容器的应用程序。以下是为什么要使用Docker Compose的一些原因:简化复杂的应用部署:如果有一个复杂的应用程序,由多个服务(如Web服务器、数据库、缓存等)组成,手动部署和管理这些服务可能会非常困难。Docker Compose允许您在一个配置文件中定义所有的服务及其依赖关系,然后使用一条命令来启动整个应用程序,大大简化了部署流程。提高开发效率:在开发环境中,开发人员需要经常构建、测试和调试应用程序。使用Docker Compose,开发人员可以轻松地在本地环境中创建与生产环境相同的容器配置,从而提高开发效率和代码质量。轻松扩展和管理:随着应用程序的增长,可能需要添加更多的服务或扩展现有的服务。使用Docker Compose,可以轻松地修改配置文件来添加或删除服务,然后使用一条命令重新部署整个应用程序。此外,还可以使用Docker Compose来管理容器的运行状态和日志,以便及时发现和解决问题。与CI/CD系统集成:Docker Compose可以与CI/CD系统集成,实现自动化构建、测试和部署。这可以进一步提高开发效率和质量,减少手动操作的风险。跨平台兼容性:Docker Compose支持多种操作系统和云平台,因此可以轻松地在不同的环境中部署和管理应用程序。这使得在不同的环境中保持一致的应用程序配置和部署流程变得更加容易。docker-compose的常用命令Docker Compose的常用命令包括:docker-compose up:启动并运行整个应用程序。docker-compose down:停止并删除整个应用程序的容器、网络和卷。docker-compose start:启动已经存在的应用程序容器。docker-compose stop:停止正在运行的应用程序容器,但不删除它们。docker-compose ps:列出当前运行的应用程序容器。docker-compose logs:查看应用程序容器的日志输出。docker-compose build:重新构建应用程序的服务容器。docker-compose scale:扩展或缩减应用程序的服务容器数量。docker-compose exec:在正在运行的服务容器中执行命令。这些命令可以帮助您管理Docker Compose定义的多容器应用程序的生命周期,包括启动、停止、构建、扩展和执行等操作。运行这些命令需要结合docker-compose一起使用。且必须要在含有docker-compose.yml文件的目录中才可以使用,不然报错
  • [问题求助] 镜像拉取问题
    1. 第三方的服务是部署在园区平台的K8S上还是自建K8S,如果是园区的K8S,镜像怎么推送到仓库?2. 我们自建的harbor仓库在园区的K8S上支持不支持, 自建harbor通过host别名访问,K8S上是否能配置主机hosts