• 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  下载镜像

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


    3.1.2  新建和启动容器   run


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

    1. [root@localhost ~]# docker run --help
    2. Usage:  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提供的端口

    直接运行

    1. [root@localhost ~]# docker run ubuntu
    2. #没有任何返回值,使用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部署

    1. [root@localhost bin]# pwd
    2. /usr/local/bin
    3. [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
    4. % Total % Received % Xferd Average Speed Time Time Time Current
    5. Dload Upload Total Spent Left Speed
    6. 0 0 0 0 0 0 0 0 --:--:-- 0:00:01 --:--:-- 0
    7. 100 12.1M 100 12.1M 0 0 5094 0 0:41:40 0:41:40 --:--:-- 5509
    8. [root@localhost bin]# ll
    9. total 12440
    10. -rw-r--r--. 1 root root 12737304 Mar 10 02:25 docker-compose
    11. [root@localhost bin]# chmod 777 docker-compose
    12. [root@localhost bin]# docker-compose --version
    13. docker-compose version 1.29.2, build 5becea4c

    查看帮助

    1. [root@localhost ~]# docker-compose --help
    2. Define and run multi-container applications with Docker.
    3. Usage:
    4. docker-compose [-f ...] [options] [COMMAND] [ARGS...]
    5. docker-compose -h|--help
    6. Options:
    7. -f, --file FILE Specify an alternate compose file (default: docker-compose.yml)
    8. -p, --project-name NAME Specify an alternate project name (default: directory name)
    9. --verbose Show more output
    10. --no-ansi Do not print ANSI control characters
    11. -v, --version Print version and exit
    12. -H, --host HOST Daemon socket to connect to
    13. --tls Use TLS; implied by --tlsverify
    14. --tlscacert CA_PATH Trust certs signed only by this CA
    15. --tlscert CLIENT_CERT_PATH Path to TLS certificate file
    16. --tlskey TLS_KEY_PATH Path to TLS key file
    17. --tlsverify Use TLS and verify the remote
    18. --skip-hostname-check Don't check the daemon's hostname against the name specified
    19. in the client certificate (for example if your docker host
    20. is an IP address)
    21. --project-directory PATH Specify an alternate working directory
    22. (default: the path of the Compose file)
    23. Commands:
    24. build Build or rebuild services
    25. bundle Generate a Docker bundle from the Compose file
    26. config Validate and view the Compose file
    27. create Create services
    28. down Stop and remove containers, networks, images, and volumes
    29. events Receive real time events from containers
    30. exec Execute a command in a running container
    31. help Get help on a command
    32. images List images
    33. kill Kill containers
    34. logs View output from containers
    35. pause Pause services
    36. port Print the public port for a port binding
    37. ps List containers
    38. pull Pull service images
    39. push Push service images
    40. restart Restart services
    41. rm Remove stopped containers
    42. run Run a one-off command
    43. scale Set number of containers for a service
    44. start Start services
    45. stop Stop services
    46. top Display the running processes
    47. unpause Unpause services
    48. up Create and start containers
    49. version 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

    1. [root@localhost ~]# cd /home/
    2. [root@localhost home]# ll
    3. total 0
    4. # 创建项目目录
    5. [root@localhost home]# mkdir wordpress
    6. [root@localhost home]# vi docker-compose.yml
    7. [root@localhost home]# cat docker-compose.yml
    8. version: "3"
    9. services:
    10. db:
    11. image: mysql:8.0
    12. command:
    13. - --default_authentication_plugin=mysql_native_password
    14. - --character-set-server=utf8mb4
    15. - --collation-server=utf8mb4_unicode_ci
    16. volumes:
    17. - db_data:/var/lib/mysql
    18. restart: always
    19. environment:
    20. MYSQL_ROOT_PASSWORD: 123456
    21. MYSQL_DATABASE: wordpress
    22. MYSQL_USER: wordpress
    23. MYSQL_PASSWORD: wordpress
    24. wordpress:
    25. depends_on:
    26. - db
    27. image: wordpress:latest
    28. ports:
    29. - "8000:80"
    30. restart: always
    31. environment:
    32. WORDPRESS_DB_HOST: db:3306
    33. WORDPRESS_DB_USER: wordpress
    34. WORDPRESS_DB_PASSWORD: wordpress
    35. volumes:
    36. db_data:

    启动项目

    1. [root@localhost home]# docker-compose up
    2. [root@localhost home]# docker ps
    3. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    4. 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
    5. ebaa335a1d47 mysql:8.0 "docker-entrypoint.s…" 7 minutes ago Up 7 minutes 3306/tcp, 33060/tcp home_db_1
    6. #必须在项目目录中才能使用这个命令
    7. [root@localhost home]# docker-compose ps
    8. Name Command State Ports
    9. ------------------------------------------------------------------------------------------------
    10. home_db_1 docker-entrypoint.sh --def ... Up 3306/tcp, 33060/tcp
    11. home_wordpress_1 docker-entrypoint.sh apach ... Up 0.0.0.0:8000->80/tcp,:::8000->80/tcp

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

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

    小结

  • 相关阅读:
    运筹系列77:开源线性规划软件clp使用简介
    如何安装和使用three.js
    RUST与Python对比分析
    AttributeError: ‘NoneType‘ object has no attribute ‘shape‘
    【深入浅出Java并发编程指南】「原理分析篇」360度全方位的教你认识网络IO模型
    Multi-Graph Fusion Networks for Urban Region Embedding
    P2824 [HEOI2016/TJOI2016] 排序
    Ubuntu1804 安装后无法使用root登录解决方法
    在 Ubuntu 新装系统中安装 ruby 的几点注意
    浅析资源调度框架YARN
  • 原文地址:https://blog.csdn.net/qq_61785413/article/details/136482459