docker全家桶(基本命令、dockerhub、docker-compose)

概念

应用场景:

  • Web 应用的自动化打包和发布。
  • 自动化测试和持续集成、发布。
  • 在服务型环境中部署和调整数据库或其他的后台应用。
  • 从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。

作用:Docker 使您能够将应用程序与基础架构分开,从而可以快速交付软件

Docker 包括三个基本概念:

  • 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
  • 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
  • 仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。

什么是 Dockerfile?

Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。

Docker Compose

Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。

命令

docker容器

docker   查看docker客户端的所有命令选项
docker command --help  查看指定的docker命令使用方法docker run  启动容器  -i 交互式操作  -t 终端  /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash    退出exit
-P :是容器内部端口随机映射到主机的端口。
-p : 是容器内部端口绑定到指定的主机端口。
--name 标识来命名容器docker ps -a  查看所有的容器   -l  查看最后一次创建的容器
docker ps   查看正在运行的容器
docker start [ID或者名字]
docker stop  [ID或者名字]
docker restart [ID或者名字]
docker exec -it [ID或者名字] /bin/bash
docker rm -f  [ID或者名字]
docker logs [ID或者名字] 可以查看容器内部的标准输出
docker inspect [ID或者名字] 查看 Docker 的底层信息。它会返回一个 JSON 文件记录着 Docker 容器的配置和状态信息。
docker top [ID或者名字] 来查看容器内部运行的进程
docker port 命令可以让我们快捷地查看端口的绑定情况

docker 镜像

docker images 列出本地主机上的镜像
docker pull 镜像名
docker search 镜像名
docker rmi [ID或者名字] docker build  -t :指定要创建的目标镜像名
. :Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径docker tag 命令,为镜像添加一个新的标签。

场景

容器连接

新建网络

下面先创建一个新的 Docker 网络。

$ docker network create -d bridge test-net

运行一个容器并连接到新建的 test-net 网络:

$ docker run -itd --name test1 --network test-net ubuntu /bin/bash

打开新的终端,再运行一个容器并加入到 test-net 网络:

$ docker run -itd --name test2 --network test-net ubuntu /bin/bash

github

docker login
docker logoutdocker tag centos_go:7.9.2009 dockerhubwtj/centos_go:7.9.2009
docker push dockerhubwtj/centos_go:7.9.2009

dockerfile

FROM 指定基础镜像,用于后续的指令构建。
//FROM centos:7.9.2009
MAINTAINER 指定Dockerfile的作者/维护者。(已弃用,推荐使用LABEL指令)
//MAINTAINER John Doe <johndoe@example.com>
LABEL 添加镜像的元数据,使用键值对的形式。
//LABEL version="1.0" description="My Docker Image"
RUN 在构建过程中在镜像中执行命令。
//RUN yum -y install curl
CMD 指定容器创建时的默认命令。(可以被覆盖)
//CMD ["npm", "start"]
ENTRYPOINT 设置容器创建时的主要命令。(不可被覆盖)
//ENTRYPOINT ["python", "app.py"]
EXPOSE 声明容器运行时监听的特定网络端口。
//EXPOSE 8080
ENV 在容器内部设置环境变量。
//ENV MY_VAR=myvalue
ADD 将文件、目录或远程URL复制到镜像中。
//ADD app.tar.gz /usr/src/app
COPY 将文件或目录复制到镜像中。
//COPY index.html /var/www/html
VOLUME 为容器创建挂载点或声明卷。
//VOLUME /data
WORKDIR 设置后续指令的工作目录。
//WORKDIR /app
USER 指定后续指令的用户上下文。
//USER appuser
ARG 定义在构建过程中传递给构建器的变量,可使用 "docker build" 命令设置。
//ARG ENVIRONMENT=production
ONBUILD 当该镜像被用作另一个构建过程的基础时,添加触发器。
//ONBUILD COPY . /app
STOPSIGNAL 设置发送给容器以退出的系统调用信号。
//STOPSIGNAL SIGINT
HEALTHCHECK 定义周期性检查容器健康状态的命令。
//HEALTHCHECK CMD curl -f http://localhost/ || exit 1
SHELL 覆盖Docker中默认的shell,用于RUN、CMD和ENTRYPOINT指令。
//SHELL ["/bin/bash", "-c"]
docker build -t [镜像名字] .
docker run -d -it --name [容器名字] -p 9999:9999 [镜像id或名字] 

docker-compose

安装

手动安装
直接去github上找到稳定版本2.20.3
然后下载到服务器/usr/local/bin/路径下然后改名docker-compose之后
sudo chmod +x /usr/local/bin/docker-compose给权限
然后测试 docker-compose version  
坑就是现在官网确实有v2版本但是我下载的不是然后命令不需要不加-的 还是加上-

在这里插入图片描述

命令

# 默认使用docker-compose.yml构建镜像$ docker-compose build$ docker-compose build --no-cache # 不带缓存的构建# 指定不同yml文件模板用于构建镜像$ docker-compose build -f docker-compose1.yml# 列出Compose文件构建的镜像$ docker-compose images                          # 启动所有编排容器服务$ docker-compose up -d# 查看正在运行中的容器$ docker-compose ps # 查看所有编排容器,包括已停止的容器$ docker-compose ps -a# 进入指定容器执行命令$ docker-compose exec nginx bash $ docker-compose exec web python manage.py migrate --noinput# 查看web容器的实时日志$ docker-compose logs -f web# 停止所有up命令启动的容器$ docker-compose down # 停止所有up命令启动的容器,并移除数据卷$ docker-compose down -v# 重新启动停止服务的容器$ docker-compose restart web# 暂停web容器$ docker-compose pause web# 恢复web容器$ docker-compose unpause web# 删除web容器,删除前必需停止stop web容器服务$ docker-compose rm web  # 查看各个服务容器内运行的进程 $ docker-compose top

练习

1.写一个main的小案例

package mainimport ("context""encoding/json""flag""fmt""github.com/go-redis/redis/v8""io""log""net/http""os""time"
)var (redisClient *redis.Clientcfg         Config
)type Config struct {RedisAddr string `json:"redisAddr"`Password  string `json:"Auth"`
}func readCfg(cfgpath string) {bytes, err := os.ReadFile(cfgpath)if err != nil {log.Fatal("Failed to read config file:", err)}c := Config{}err = json.Unmarshal(bytes, &c)if err != nil {log.Fatal("Failed to parse config file:", err)}cfg = c//fmt.Println(cfg)
}func main() {cfgpath := flag.String("cfg", "./config.json", "configuration file path")flag.Parse()readCfg(*cfgpath)redisClient = redis.NewClient(&redis.Options{Addr:     cfg.RedisAddr,Password: cfg.Password,DB:       0,})http.HandleFunc("/", func(writer http.ResponseWriter, request *http.Request) {ctx, cancel := context.WithTimeout(context.Background(), 500*time.Second)defer cancel()num, err := redisClient.Incr(ctx, "num").Result()if err != nil {log.Println("Failed to increment value in Redis:", err)http.Error(writer, "Internal Server Error", http.StatusInternalServerError)return}io.WriteString(writer, fmt.Sprintf("Number of visits: %d", num))})err := http.ListenAndServe(":9999", nil)if err != nil {log.Fatal("HTTP server error:", err)}
}

2.命令行读取配置文件,所以写一个配置文件

{"redisAddr": "XXX:6379","Auth": "XXX"
}

3.上传到服务器编写docker-compose.yml文件

version: '1'
services:redis:image: "redis"websvr:
#    build: . #编译方式image: "gowebservice" # 通过已经有的影像方式volumes:- .:/goDemo # 挂在目录ports:- "9999:9999"command: -cfg ./test.json # 指定配置文件depends_on:- redis

两者的区别,就是image方式直接引用,build方式需要每次生成影像

如果是开发调试,可以采用build方式,如果是测试、演示,可以采用image方式

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/111393.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2023年信息院学生科协第二次硬件培训

2023年信息院学生科协第二次硬件培训 前言一、51单片机简介1、什么是单片机2、主流单片机及其编程语言3、单片机的应用4、单片机开发软件 二、GPIO&#xff08;点亮LED&#xff09;1、GPIO简介2、LED简介3、硬件设计4、软件设计 三、GPIO&#xff08;独立按键&#xff09;1、按…

2023.10(u盘刻录iso)主机,vmware,virtualbox安装linux/ubuntu/kali/centos stream9/arch

download 1 kali官网 2 ubuntu官网 3vmware workstation pro(最新版17pro) 4 virtualbox for linux sudo apt install virtualbox-ext-pack 5 win32 disk imger linux dd 刻录iso到u盘 #查看U盘路径 fdisk -l #图形界面 以kali为例会在桌面出现挂载图标 点开之后输入pwd寻…

CVPR 2018 基于累积注意力的视觉定位 Visual Grounding via Accumulated Attention 详解

Abstract&#xff1a; VG面临的主要挑战有3个&#xff1a;1 )查询的主要焦点是什么&#xff1b;2 )如何理解图像&#xff1b;3 )如何定位物体。 在本文中&#xff0c;我们将这些挑战形式化为三个注意力问题&#xff0c;并提出了一个累积注意力( A-ATT )机制来共同推理其中的挑战…

【微信小程序】6天精准入门(第3天:小程序flex布局、轮播图组件及mock运用以及综合案例)附源码

一、flex布局 布局的传统解决方案&#xff0c;基于[盒状模型]&#xff0c;依赖display属性 position属性 float属性 1、什么是flex布局&#xff1f; Flex是Flexible Box的缩写&#xff0c;意为”弹性布局”&#xff0c;用来为盒状模型提供最大的灵活性。任何一个容器都可以…

智能变电站自动化系统的应用与产品选型

摘要&#xff1a;现如今&#xff0c;智能变电站发展已经成为了电力系统发展过程中的内容&#xff0c;如何提高智能变电站的运行效率也成为电力系统发展的一个重要目标&#xff0c;为了能够更好地促进电力系统安全稳定运行&#xff0c;本文则就智能变电站自动化系统的实现进行了…

airflow报ModuleNotFoundError: No module named ‘dags‘原因和解决方法

ModuleNotFoundError: No module named ‘dags’ 原因&#xff1a;airflow默认是从dags目录下开始搜所有模块&#xff0c;如果你加上dags目录名&#xff0c;就相当于在dags目录下找dags包。 解决方法&#xff1a;导入的时候&#xff0c;去掉dags&#xff0c;详细可以参考下面案…

ABS算法开发与测试(基于ModelBase实现)

ModelBase是经纬恒润开发的车辆仿真软件&#xff0c;包含两个大版本&#xff1a;动力学版本、智能驾驶版本。动力学版包含高精度动力学模型&#xff0c;能很好地复现车辆在实际道路中运行的各种状态变化&#xff0c;可用于乘用车、商用车动力底盘系统算法开发、控制器仿真测试&…

【Java 进阶篇】HTML DOM样式控制详解

当我们讨论网页设计时&#xff0c;样式是一个至关重要的方面。它使我们能够改变文本、图像和其他页面元素的外观&#xff0c;从而创造出吸引人的网页。在HTML DOM&#xff08;文档对象模型&#xff09;中&#xff0c;我们可以使用JavaScript来操作和控制样式。这篇博客将详细介…

和鲸ModelWhale与中科可控X系列异构加速服务器完成适配认证,搭载海光芯片,构筑AI算力底座

AIGC 时代&#xff0c;算力作为新型生产力&#xff0c;是国家和企业构建竞争优势的关键。而随着传统计算方式无法满足新时代激增的算力需求&#xff0c;计算场景的多元化和计算应用的复杂化推动了 CPUGPU 异构平台的加速组建。在此全球激烈角逐的大趋势下&#xff0c;我国信创产…

11. 机器学习 - 评价指标2

文章目录 混淆矩阵F-scoreAUC-ROC 更多内容&#xff1a; 茶桁的AI秘籍 Hi, 你好。我是茶桁。 上一节课&#xff0c;咱们讲到了评测指标&#xff0c;并且在文章的最后提到了一个矩阵&#xff0c;我们就从这里开始。 混淆矩阵 在我们实际的工作中&#xff0c;会有一个矩阵&am…

IDEA中明明导入jar包了,依旧报ClassNotFoundException

解决办法&#xff1a; 1.点击IDEA右上角的设置 2.点击Project Structure... 3.点击Artifacts,点击号把包添加下就可以了

苹果ipa文件签过名之后,不用分发可以直接下载安装到苹果手机上吗?安装原理与解决方案。

为什么我的苹果IPA文件不能安装到手机&#xff1f;我来说说&#xff0c;我们时常使用各种各样的应用程序来完成各类任务&#xff0c;获取信息和娱乐。但是&#xff0c;在众多的应用程序背后&#xff0c;有很多我们可能从未涉及的知识领域。其中&#xff0c;对于苹果设备上的ipa…

nodejs+vue衣服穿搭推荐系统-计算机毕业设计

模块包括主界面&#xff0c;系统首页、个人中心、用户管理、风格标签管理、衣服分类管理、衣服穿搭管理、服装信息管理、我的搭配管理、用户反馈、系统管理等进行相应的操作。无论是日常生活&#xff0c;还是特定场景&#xff0c;诸如面试、约会等&#xff0c;人们都有展现自我…

GEE:绘制土地利用类型面积分布柱状图

作者:CSDN @ _养乐多_ 本文记录了,在 Google Earth Engine (GEE)中进行随机森林分类后绘制不同类型面积分布柱状图的代码片段。 完整代码请看博客《GEE:随机森林分类教程(样本制作、特征添加、训练、精度、参数优化、贡献度、统计面积)》 柱状图效果如下所示, 文章目…

Deno 快速入门

目录 1、简介 2、安装Deno MacOS下安装 Windows下安装 Linux 下安装 3、创建并运行TypeScript程序 4、内置Web API和Deno命名空间 5、运行时安全 6、导入JavaScript模块 7、远程模块和Deno标准库 8、使用deno.json配置您的项目 9、Node.js API和npm包 10、配置IDE…

ELK 单机安装

一丶软件下载 elasticsearch: https://www.elastic.co/downloads/past-releases kibana: https://www.elastic.co/downloads/past-releases 选择对应的版本的下载即可 二、es 安装es比较简单 rpm -ivh elasticsearch-2.4.2.rpm 修改配置文件 /etc/elasticsearch/elas…

将输入对象转换为数组数组的维度大于等于1numpy.atleast_1d()

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 将输入对象转换为数组 数组的维度大于等于1 numpy.atleast_1d() 选择题 使用numpy.atleast_1d()函数,下列正确的是&#xff1f; import numpy as np a1 1 a2 ((1,2,3),(4,5,6)) print("…

Mac电脑版交互式原型设计软件 Axure RP 8汉化 for mac

Axure RP 8是一款专业快速原型设计软件&#xff0c;它主要用于定义需求、设计功能和界面等&#xff0c;适用于商业分析师、信息架构师、产品经理、IT咨询师、用户体验设计师、交互设计师和UI设计师等用户。 该软件可以快速、高效地创建原型&#xff0c;并支持多人协作设计和版…

Leetcode 第 365 场周赛题解

Leetcode 第 365 场周赛题解 Leetcode 第 365 场周赛题解题目1&#xff1a;2873. 有序三元组中的最大值 I思路代码复杂度分析 题目2&#xff1a;2874. 有序三元组中的最大值 II思路代码复杂度分析思路2 题目3&#xff1a;2875. 无限数组的最短子数组思路代码复杂度分析 题目4&a…

AST反混淆实战|某国外混淆框架一小段混淆js还原分析

关注它&#xff0c;不迷路。 本文章中所有内容仅供学习交流&#xff0c;不可用于任何商业用途和非法用途&#xff0c;否则后果自负&#xff0c;如有侵权&#xff0c;请联系作者立即删除&#xff01; 1. 需求 我相信做币圈爬虫的兄弟&#xff0c;或多或少的见过类似下面的…