docker容器镜像管理+compose容器编排(持续更新中)

目录

一、  Docker的基本组成

二、  容器和镜像的关系

2.1  面向对象角度

2.2  从镜像容器角度

三、  容器命令

3.1  使用Ubuntu

3.1.1  下载镜像

3.1.2  新建和启动容器   run

3.1.3交互式

compose编排与部署

1.  docker-compose部署

2.  docker-compose.yml模板

3.  使用compose搭建WordPress

小结


一、  Docker的基本组成

Docker 是一种轻量级的虚拟化容器解决方案,它利用容器来打包应用程序和其依赖项,提供了一种快速部署和运行应用程序的方式。下面是 Docker 的基本组成部分:

镜像(Image):

镜像是 Docker 容器的基础。它包含了应用程序运行所需的所有文件系统内容、库、环境变量和配置等信息。镜像可以用于创建容器实例。
容器(Container):

容器是 Docker 镜像的运行实例。每个容器都是相互隔离的,可以在其中运行一个或多个应用程序。容器具有自己的文件系统、网络和进程空间,并且可以被快速创建、启动、停止和删除。
仓库(Repository):

仓库是存储 Docker 镜像的地方,可以是本地主机上的仓库,也可以是远程仓库(如 Docker Hub)。用户可以从仓库中拉取镜像到本地使用,也可以将自己创建的镜像推送到仓库中供他人使用。
Docker 守护进程(Docker Daemon):

Docker 守护进程是在主机上运行的后台服务,负责管理 Docker 对象,如镜像、容器、网络等。它接收来自 Docker 客户端的请求,并处理这些请求。
Docker 客户端(Docker Client):

Docker 客户端是与 Docker 守护进程通信的命令行工具。用户可以通过 Docker 客户端执行各种操作,如构建镜像、运行容器、管理网络等。
网络(Network):

Docker 提供了各种网络驱动程序,用于连接 Docker 容器,使它们可以相互通信。用户可以创建自定义网络并将容器连接到这些网络中,实现灵活的网络配置。
数据卷(Volume):

数据卷是用于在容器之间共享数据的一种方法。它允许容器访问宿主机上的特定目录或文件,以持久化存储数据或共享文件。
以上是 Docker 的基本组成部分,它们共同构成了 Docker 的核心功能和架构。通过合理使用这些组件,可以更高效地管理和运行应用程序容器。

二、  容器和镜像的关系

2.1  面向对象角度

docker利用容器(container)独立运行的一个和一组应用,应用程序或服务运行在容器里面,容器类似于一个虚拟化的运行环境,容器是用镜像创建的运行实例

镜像是一个静态的定义,容器是镜像运行时的实体
容器为镜像提供了一个标准的隔离的运行环境,它可以被启动、开始、停止、删除
每个容器都是相互隔离的、保证安全的平台

2.2  从镜像容器角度

可以把容器看作是一个简易版的Linux环境(包括root用户权限,进程空间,用户空间和网络空间等)和运行在其中的应用程序

三、  容器命令


docker必须部署在Linux内核上,如果其他系统想部署docker就必须安装一个虚拟的Linux环境
因此,docker自带一个迷你的、微小版的Linux环境
实际的环境中,必须有镜像才能创建容器,这是根本前提

从上到下的层次关系
centos7镜像 => 
docker容器 =>
centos7.9 => 
VMware => 
Windows =>
台式机/笔记本电脑

如果是Ubuntu镜像
Ubuntu镜像 =>
 docker容器 =>
centos7.9 => 
VMware => 
Windows =>
台式机/笔记本电脑

3.1  使用Ubuntu


3.1.1  下载镜像

[root@localhost ~]# docker pull ubuntu
Using default tag: latest
latest: Pulling from library/ubuntu
7b1a6ab2e44d: Pull complete
Digest: sha256:626ffe58f6e7566e00254b638eb7e0f3b11d4da9675088f4781a50ae288f3322
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest[root@localhost ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
hello-world   latest    d2c94e258dcb   10 months ago   13.3kB
ubuntu        latest    ba6acccedd29   2 years ago     72.8MB


3.1.2  新建和启动容器   run


使用run按照镜像,生成一个个的容器实例(相当于安装的一个个的虚拟机实例),也就是鲸鱼背上的集装箱

[root@localhost ~]# docker run --helpUsage:  docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

 [OPTIONS] 说明
--name   容器名字 =>为容器指定一个名称,若不指定则随机分配
-d           后台运行模式,并返回容器ID,也称启动守护式容器(后台运行)

-i             以交互式模式运行容器,通常与 -t  一起使用
-t    为容器重新分配一个伪输入终端,通常与  -i  一起使用
也即 启动交互式容器(前台有伪终端,等待交互)

-P    随机端口映射(系统随机分配),大写P
-p    指定端口映射,小写p

-p hostPort:containerPort =>主机端口号:容器内端口号   例  -p 80:8080
容器实例是运行在docker上,访问容器实例
以redis为例,首先要指定宿主机(docker)暴露的6379端口,在docker内部找6379端口的Redis容器,即为-p 6379s:6379;左边是访问宿主机暴露的端口,右边是docker访问Redis提供的端口

直接运行

[root@localhost ~]# docker run ubuntu
#没有任何返回值,使用docker ps 也没有正在运行的

3.1.3交互式


使用镜像centos:latest以交互式启动一个容器,在容器内执行/bin/bash命令(表示在载入容器后运行bash,docker中必须保持一个进程的运行,否则整个容器就会退出,这个就表示启动容器之后启动bash)
(Bash,Unix,shell的一种,Bash是一个命令处理器,通常运行于文本窗口,并能够执行用户直接输入的命令,Bash还能从文件中读取命令,这样的文件称为脚本)

docker run -it centos /bin/bash
-i          交互式
-t          终端
centos  镜像,没加latest,默认是最新版,否则需要加TAG
/bin/bash  放在镜像后的命令,希望以一个交互式的shell,因此使用/bin/bash

需要退出终端,直接输入exit

如果镜像关闭,使用以下命令,重新进入docker容器
docekr exec -it 容器名称(或ID) bash

[root@localhost ~]# docker ps --help

Usage:  docker ps [OPTIONS]

 [OPTIONS]
-a  显示全部容器,正在运行的+历史运行过的
-l   显示最近创建
-n  显示最近n个创建的容器
-q  只显示容器ID,静默模式


 


compose编排与部署

Docker Compose是一个用于定义和运行多个Docker容器的工具。它使用YAML文件来配置应用程序的服务、网络和卷等方面,使得在单个主机上进行部署更加简单。通过定义一个Compose文件,你可以一次性启动、停止和管理整个应用程序的多个容器。

Compose文件包含了应用程序的各种服务的配置选项,如镜像、端口映射、环境变量、卷挂载等。你只需在Compose文件中定义所需的服务和其配置,然后使用docker-compose up命令即可启动整个应用程序。此外,你还可以使用docker-compose down命令来停止和删除所有相关的容器。

1.  docker-compose部署

[root@localhost bin]#  pwd
/usr/local/bin
[root@localhost bin]# curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose% Total    % Received % Xferd  Average Speed   Time    Time     Time  CurrentDload  Upload   Total   Spent    Left  Speed0     0    0     0    0     0      0      0 --:--:--  0:00:01 --:--:--     0
100 12.1M  100 12.1M    0     0   5094      0  0:41:40  0:41:40 --:--:--  5509[root@localhost bin]# ll
total 12440
-rw-r--r--. 1 root root 12737304 Mar 10 02:25 docker-compose
[root@localhost bin]# chmod 777 docker-compose[root@localhost bin]# docker-compose --version
docker-compose version 1.29.2, build 5becea4c

查看帮助

[root@localhost ~]# docker-compose --help
Define and run multi-container applications with Docker.Usage:docker-compose [-f <arg>...] [options] [COMMAND] [ARGS...]docker-compose -h|--helpOptions:-f, --file FILE             Specify an alternate compose file (default: docker-compose.yml)-p, --project-name NAME     Specify an alternate project name (default: directory name)--verbose                   Show more output--no-ansi                   Do not print ANSI control characters-v, --version               Print version and exit-H, --host HOST             Daemon socket to connect to--tls                       Use TLS; implied by --tlsverify--tlscacert CA_PATH         Trust certs signed only by this CA--tlscert CLIENT_CERT_PATH  Path to TLS certificate file--tlskey TLS_KEY_PATH       Path to TLS key file--tlsverify                 Use TLS and verify the remote--skip-hostname-check       Don't check the daemon's hostname against the name specifiedin the client certificate (for example if your docker hostis an IP address)--project-directory PATH    Specify an alternate working directory(default: the path of the Compose file)Commands:build              Build or rebuild servicesbundle             Generate a Docker bundle from the Compose fileconfig             Validate and view the Compose filecreate             Create servicesdown               Stop and remove containers, networks, images, and volumesevents             Receive real time events from containersexec               Execute a command in a running containerhelp               Get help on a commandimages             List imageskill               Kill containerslogs               View output from containerspause              Pause servicesport               Print the public port for a port bindingps                 List containerspull               Pull service imagespush               Push service imagesrestart            Restart servicesrm                 Remove stopped containersrun                Run a one-off commandscale              Set number of containers for a servicestart              Start servicesstop               Stop servicestop                Display the running processesunpause            Unpause servicesup                 Create and start containersversion            Show the Docker-Compose version information

2.  docker-compose.yml模板

version: '3.8'
services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"
  db:
    image: mysql:latest
    environment:
      MYSQL_ROOT_PASSWORD: example
      MYSQL_DATABASE: mydatabase
      MYSQL_USER: user
      MYSQL_PASSWORD: password
包含了两个服务:web 和 db。web 服务使用 Nginx 镜像并将容器的 80 端口映射到宿主机的 8080 端口;db 服务使用 MySQL 镜像,并设置了一些环境变量用于配置 MySQL 实例。

解析:

version: 指定了 Docker Compose 文件的版本。
services: 定义了各个服务。
web 和 db 是服务的名称,可以根据实际情况自行命名。
image: 指定了服务所使用的镜像。
ports: 定义了端口映射关系,格式为 "宿主机端口:容器端口"。
environment: 设置了该服务运行时需要的环境变量,这里设置了 MySQL 的 root 密码、数据库名、用户名和密码。

3.  使用compose搭建WordPress

[root@localhost ~]# cd /home/
[root@localhost home]# ll
total 0# 创建项目目录
[root@localhost home]# mkdir wordpress
[root@localhost home]# vi docker-compose.yml
[root@localhost home]# cat docker-compose.yml
version: "3"
services:db:image: mysql:8.0command:- --default_authentication_plugin=mysql_native_password- --character-set-server=utf8mb4- --collation-server=utf8mb4_unicode_civolumes:- db_data:/var/lib/mysqlrestart: alwaysenvironment:MYSQL_ROOT_PASSWORD: 123456MYSQL_DATABASE: wordpressMYSQL_USER: wordpressMYSQL_PASSWORD: wordpresswordpress:depends_on:- dbimage: wordpress:latestports:- "8000:80"restart: alwaysenvironment:WORDPRESS_DB_HOST: db:3306WORDPRESS_DB_USER: wordpressWORDPRESS_DB_PASSWORD: wordpress
volumes:db_data:

启动项目

[root@localhost home]# docker-compose up[root@localhost home]# docker ps
CONTAINER ID   IMAGE              COMMAND                  CREATED         STATUS         PORTS                                   NAMES
edeae04f9543   wordpress:latest   "docker-entrypoint.s…"   7 minutes ago   Up 7 minutes   0.0.0.0:8000->80/tcp, :::8000->80/tcp   home_wordpress_1
ebaa335a1d47   mysql:8.0          "docker-entrypoint.s…"   7 minutes ago   Up 7 minutes   3306/tcp, 33060/tcp                     home_db_1#必须在项目目录中才能使用这个命令
[root@localhost home]# docker-compose psName                    Command               State                  Ports
------------------------------------------------------------------------------------------------
home_db_1          docker-entrypoint.sh --def ...   Up      3306/tcp, 33060/tcp
home_wordpress_1   docker-entrypoint.sh apach ...   Up      0.0.0.0:8000->80/tcp,:::8000->80/tcp

关闭防火墙,通过浏览器进行访问

[root@localhost home]# systemctl stop firewalld
[root@localhost home]# setenforce 0

小结

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

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

相关文章

力扣刷题Days16(js)-67二进制求和

目录 1,题目 2&#xff0c;代码 2.1转换进制数 2.2模拟加法 3&#xff0c;学习与总结 Math.floor() 模拟加法思路回顾 重点复习巩固 模拟加法的思路和学习位运算&#xff1b; 今天没精力了&#xff0c;先休息 1,题目 给你两个二进制字符串 a 和 b &#xff0c;以二进制…

软考高级:统计过程阶段和工作流概念和例题

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;大厂高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

滑窗五题【Leetcode3最长子串/76最小覆盖子串/239滑动窗口最大值/438找出所有异位词/567异位子串】

文章目录 关于滑窗3. 无重复字符的最长子串438. 找到字符串中所有字母异位词567. 字符串的排列76. 最小覆盖子串239. 滑动窗口最大值方法一&#xff1a;优先队列延迟删除 O(nlogn)方法二&#xff1a;单调队列 O(n) 关于滑窗 滑窗是通过两个指针&#xff08;数组下标&#xff0…

【Mysql】事务与索引

目录 MySQL事务 事务的特性 并发事务的问题&#xff1f; 事务隔离级别&#xff1f; MySQL索引 数据结构 索引类型 聚簇索引与非聚簇索引 聚集索引的优点 聚集索引的缺点 非聚集索引的优点 非聚集索引的缺点 非聚集索引一定回表查询吗(覆盖索引)? 覆盖索引 联合索…

uView NoNetwork 无网络提示

该组件无需任何配置&#xff0c;引入即可&#xff0c;内部自动处理所有功能和事件&#xff0c;有如下特点&#xff1a; 如果没有网络&#xff0c;该组件会以fixed定位&#xff0c;并且以很大的z-index值覆盖原来的内容。一旦有网络了&#xff0c;会自动隐藏该组件&#xff0c;…

关 于 早 起

这篇文章我想谈谈关于早起这个问题。 其实我的作息并不是十分的规律&#xff0c;特别是在家&#xff0c;我基本上就是晚上睡得很晚&#xff0c;早上起的也晚&#xff0c;一天吃不了三顿饭那种。我现在还有印象&#xff0c;那时候我差点废了。身体也不好&#xff0c;睡眠质量也…

【ollama】(4):在autodl中安装ollama工具,配置环境变量,修改端口,使用RTX 3080 Ti显卡,测试coder代码生成大模型

1&#xff0c;ollama项目 Ollama 是一个强大的框架&#xff0c;设计用于在 Docker 容器中部署 LLM。Ollama 的主要功能是在 Docker 容器内部署和管理 LLM 的促进者&#xff0c;它使该过程变得非常简单。它帮助用户快速在本地运行大模型&#xff0c;通过简单的安装指令&#xf…

数据结构与算法第五套大题

1.图的最小生成树&#xff0c;各边权值之和&#xff1a; E{(1,5),(5,2),(5,3),(3,4)},W10 2.平均查找长度&#xff1a; 方法论&#xff1a; 直接将其变成一颗二叉树&#xff0c;然后计算每个节点的数学期望*比较次数之和/7 比如&#xff1a; 15为1/7&#xff0c;只需要比较一次…

Java后端八股文之Redis

文章目录 1. Redis是什么&#xff1f;2. Redis为什么这么快&#xff1f;3. 为什么要使用缓存&#xff1f;4. Redis几种使用场景&#xff1a;5. Redis的Zset底层为什么要使用跳表而不是平衡树、红黑树或者B树&#xff1f;6.Redis持久化6.1 什么是RDB持久化6.1.1RDB创建快照会阻塞…

OGNL表达式

文章目录 一、简介二、快速入门三、详细使用3.1 基本数据类型3.2 对象类型3.3 List集合3.4 Set集合3.5 Map集合3.6 数组3.7 静态调用3.8 算术运算3.9 逻辑运算3.10 同时执行多个表达式3.11 位运算 Ognl使用总结 - 源链接在此 >> 一、简介 OGNL&#xff08;Object-Graph…

华为OD机试2024年最新题库(Python、JAVA、C++合集)

我是一名软件开发培训机构老师&#xff0c;我的学生已经有上百人通过了华为OD机试&#xff0c;学生们每次考完试&#xff0c;会把题目拿出来一起交流分享。 重要&#xff1a;2023年11月份开始&#xff0c;考的都是OD统一考试&#xff08;C卷&#xff09;&#xff0c;题库已经整…

python3:No module named ‘pandas‘

一、背景 电脑里下载了python3&#xff0c;vscode使用的是python 书接上条博文&#xff0c;在我设置了vscode的默认地址后&#xff0c;下载pandas运行还是找不到 这里看到我已经成功的安装了pandas-2.2.1 二、发现问题 在设置vscode默认的python环境中寻找pandas&#xff08;…

入门了解使用huggingface实现ALBERT模型相关任务--文本分类相关任务

目录 引言 使用技巧 使用ALBERT进行文本分类 class transformers.AlbertForSequenceClassification 主要参数 主要方法 输入参数 返回值 使用示例 class transformers.TFAlbertForSequenceClassification 主要参数 特点和使用 输入格式支持 call方法参数 返回值…

Android Gradle 开发与应用 (六) : 创建buildSrc插件和使用命令行创建Gradle插件

1. 前言 前文中&#xff0c;我们介绍了在Android中&#xff0c;如何基于Gradle 8.2&#xff0c;创建Gradle插件。这篇文章&#xff0c;我们以buildSrc的方式来创建Gradle插件。此外&#xff0c;还介绍一种用Cmd命令行的方式&#xff0c;来创建独立的Gradle插件的方式。 1.1 本…

遍历与复制数组

&#xff08;1&#xff09;遍历数组 Arrays类调用public static String toString(int[]a)方法&#xff0c;可以得到参数指定的一维数组a的如下格式的字符串表示:a[0],a[1]~a[a.length-1] (2)复制数组 Arrays类调用public static double[]copyOf(double[]original,int newLen…

项目搭建常用镜像

Android项目 Gradle腾讯镜像&#xff1a; https://mirrors.cloud.tencent.com/gradle/****&#xff08;如&#xff1a;gradle-6.9.3-bin.zip&#xff09; 阿里云谷歌镜像&#xff1a; http://maven.aliyun.com/nexus/content/repositories/google 阿里云jcenter镜像 http://ma…

Sklearn交叉验证

scikit-learn提供了多种交叉验证的方法&#xff0c;主要包括以下几种类型&#xff1a; K折交叉验证&#xff08;K-Fold Cross Validation&#xff09;: 这种方法将数据集分成K个大小相等的互斥子集。每次选择一个子集作为验证集&#xff0c;剩余的K-1个子集作为训练集。这个过…

Django中的ajax细节

原代码 <script>$(function () {// 根据id获取展示框var viewer $3Dmol.createViewer("gldiv");var pdbModel, sdfModel;var colorpdb 700080, colorsdf 000F00;// 这里两个src表示文件路径var sdf ../resources/sdf/99.sdf;var pdb ../resources/pdb/4i…

idea:忽略不要搜索unpackage文件夹

开发vue时搜索关键字&#xff0c;会搜索到编译后的文件&#xff0c;如unpackage。&#xff08;注意这个是idea工具&#xff0c;和Git忽略是有区别的&#xff09; File->Settings->Editor->File Types

c 语言中指针注意事项

看看下面两个 #include<iostream> using namespace std;int main() {int a 10;char p[6];*((int *)p) *(& a); // 正确写法*p *(&a); // 错误写法cout << *(int*)p; } 把原因写在评论区