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

news2024/11/25 21:22:43

概念

应用场景:

  • 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 logout

docker 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 main

import (
	"context"
	"encoding/json"
	"flag"
	"fmt"
	"github.com/go-redis/redis/v8"
	"io"
	"log"
	"net/http"
	"os"
	"time"
)

var (
	redisClient *redis.Client
	cfg         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.coloradmin.cn/o/1101324.html

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

相关文章

算法通关村第19关【青铜】| 动态规划

动态规划&#xff08;Dynamic Programming&#xff0c;简称DP&#xff09;是一种解决多阶段决策过程最优化问题的数学方法。它通常用于解决那些具有重叠子问题和最优子结构性质的问题&#xff0c;这些问题可以分解为多个相互关联的子问题。 动态规划的核心思想是将原问题分解为…

Android查看签名信息系列 · 使用逆向分析工具JadxGUI获取签名

前言 Android查看签名信息系列之使用逆向分析工具JadxGUI获取签名&#xff0c;通过这种方式&#xff0c;可以获取到的签名信息包括&#xff1a;MD5、SHA1、SHA-256、公钥(模数)等信息 实现方法 1、进入JadxGUI目录下的lib文件夹内&#xff0c;找到jadx-gui-1.4.7.jar文件 2、…

医疗制药行业数字化创新实践

本文将为大家分享3个制药行业的创新案例吧&#xff0c;都是在不同智能制造落地场景下的典型案例&#xff0c;希望对大家有所启发。 01 医疗设备企业零代码搭建集成式信息化管理平台&#xff0c;年节省150余万元 医疗制药行业数字化实现工具>>>>https://www.jianda…

LLVM(6)ORC实例分析:Transform in cpp

Transform用例总结 该用例调用JIT的setTransform接口&#xff0c;传入pass对IR代码做了一系列优化。优化一&#xff1a;fac函数的调用者能直接拿到返回值&#xff0c;不在需要进入fac计算了。 正常函数调用a fac(5)需要进入fac函数后才能拿到结果120。transform后&#xff0c…

java部署教程

关闭防火墙 不管是windows还是linux&#xff0c;首先必须关闭防火墙。 # linux添加8080端口 firewall-cmd --zonepublic --add-port8080/tcp --permanent#删除80端口 firewall-cmd --zonepublic --remove-port8080/tcp --permanent# 刷新使端口立即生效 firewall-cmd --reloa…

AI大模型下一步怎么走?百度携AI原生应用抢先作答

前言 10月17日&#xff0c;百度世界2023在北京首钢园召开&#xff0c;这是百度近四年来首次恢复线下举办世界大会&#xff0c;会上发布了文心大模型4.0以及基于大模型的AI原生应用的最新进展。 文章目录 前言我眼里的百度世界大会文心大模型4.0正式发布&#xff0c;与GPT4相比毫…

解决spring项目中无法加载resources下文件

解决spring项目中无法加载resources下文件 问题发现问题解决步骤一&#xff1a;检查文件名步骤二&#xff1a;确保测试资源目录步骤三&#xff1a;检查文件路径是否正确 问题发现 在学习Spring过程中&#xff0c;TestContext框架试图检测一个默认的XML资源位置。如果您的类被命…

数字孪生的多领域应用:塑造未来的可能性

数字孪生技术正迅速改变着我们与世界互动的方式&#xff0c;为各个领域带来了前所未有的机会。从制造业到医疗保健&#xff0c;再到城市规划和交通系统&#xff0c;数字孪生正在成为创新和效率提升的引擎。本文带大家分析数字孪生的一些应用场景和其潜在影响的更多细节&#xf…

QT中使用QVTKOpenGLNativeWidget的简单教程以及案例

先添加一个带有ui的QT应用程序。 一、在ui界面中添加QVTKOpenGLNativeWidget控件 先拖出来一个QOpenGLWidget控件 修改布局如下&#xff1a; 然后将QOpenGLWidget控件提升为QVTKOpenGLNativeWidget控件&#xff0c;步骤如下&#xff1a; 右击QOpenGLWidget窗口&#xff0c;选…

知识蒸馏(Knowledge Distillation)简述

知识蒸馏&#xff08;Knowledge Distillation&#xff09;简述 结论 Reference&#xff1a; Distilling the Knowledge in a Neural Network知识蒸馏&#xff08;Knowledge Distillation&#xff09;简述&#xff08;一&#xff09; 知识蒸馏被广泛用于模型压缩和迁移学习当中…

【STM32】--基础了解

一、STM32来历背景 1.从51到STM32 &#xff08;1&#xff09;单片机有很多种 &#xff08;2&#xff09;STM32内核使用ARM&#xff0c;但是ARM不一定是STM32 &#xff08;3&#xff09;ATM32是当前主流的32位高性能单片机 &#xff08;4&#xff09;STM32的特点&#xff1a;高…

数据发现工具

数据发现是从非结构化和结构化数据源中查找特定数据子集的过程&#xff0c;必须查明业务存储库中有哪些数据以及位置&#xff0c;数据发现与数据分类&#xff0c;这是根据其敏感性和脆弱性对不同类型的数据进行排序的过程&#xff0c;敏感数据发现和分类本身就是不同的过程&…

测试网线的仪器叫什么?

测试网线的仪器有哪些&#xff1f;测试网线的仪器叫什么&#xff1f;很多小伙伴对此有疑问。咱们逐一分析&#xff0c;并做出简单的讨论。 测试网线的仪器大概几类&#xff0c;从携带是否方便上来说&#xff0c;手持式和台式。从测试功能上来说&#xff0c;分为物理常量、电气…

利用在线培训系统提升员工技能,助力企业发展

近年来&#xff0c;随着互联网技术的发展&#xff0c;在线培训系统逐渐成为企业提升员工技能的利器。这种新型的培训方式打破了时间和空间的限制&#xff0c;为企业提供了更加灵活和高效的培训解决方案。下面&#xff0c;我们将详细介绍如何利用在线培训系统提升员工技能&#…

驱动数字化转型,Doris Summit Asia 2023 智慧金融与政企论坛精彩预告!

峰会官网已上线&#xff0c;最新议程请关注&#xff1a;doris-summit.org.cn 即刻报名 Doris Summit 是 Apache Doris 社区一年一度的技术盛会&#xff0c;由飞轮科技联合 Apache Doris 社区的众多开发者、企业用户和合作伙伴共同发起&#xff0c;专注于传播推广开源 OLAP 与…

一图看懂CodeArts Governance 三大特性,带你玩转开源治理服务

华为云开源治理服务CodeArts Governance是针对软件研发提供的一站式开源软件治理服务&#xff0c;凝聚华为在开源治理上的优秀实践经验&#xff0c;提供开源软件元数据及软件成分分析、恶意代码检测等能力&#xff0c;从合法合规、网络安全、供应安全等维度消减开源软件使用风险…

金媒人提问:为何还有男生觉得精致女人不顾家?

广东金媒人小编分析&#xff1a;大部分男生会觉得越精致漂亮的女生&#xff0c;不适合做老婆&#xff0c;认为找老婆还是朴实的女生好&#xff0c;起码是顾家、实在的。 为什么还会有这么多男生觉得&#xff1f;如果每天追求精致的生活和自己&#xff0c;很容易沉浸在化妆打扮上…

【分享Python代码】图片转化为素描画

哈喽&#xff0c;大家好&#xff0c;我是木易巷~ 代码生成效果图 原图&#xff1a; 生成图&#xff1a; 原图&#xff1a; 生成图&#xff1a; 准备工作 Python编程首先需要安装环境&#xff0c;下面是详细步骤&#xff1a; 会的小伙伴可自行跳过&#xff0c;代码在最后 1…

泊车功能专题介绍 ———— AVP系统定义应用场景

文章目录 介绍术语 系统定义系统架构系统类型 应用场景安全场景简介安全场景定义介绍安全场景外部环境 安全场景定义开启场景结束场景车位被占用搜索车位无空闲车位路口/出入口/跨层通道减速障碍物阻挡发生碰撞车辆离线光线变化天气变化环境变化常见障碍物类型 行人安全场景车辆…

USART使用

USART软件配置 具体步骤如下&#xff1a;&#xff08;USART 相关库函数在 stm32f10x_usart.c 和 stm32f10x_usart.h 文件中&#xff09; &#xff08;1&#xff09;使能串口时钟及 GPIO 端口时钟 前面说过 STM32F103C8T6 芯片具有 3 个串口&#xff0c;对应不同的引脚&#…