Docker基础

安装docker软件包 (注意:openEuler系统)

  • 华为云 docker-ce 仓库文件
   cat > /etc/yum.repos.d/docker-ce.repo <<EOF
    [docker-ce-stable]
    name=Docker CE Stable - \$basearch
    baseurl=https://mirrors.huaweicloud.com/docker-ce/linux/centos/8/\$basearch/stable
    enabled=1
    gpgcheck=1
    gpgkey=https://mirrors.huaweicloud.com/docker-ce/linux/centos/gpg
    EOF
  • 安装 docker-ce 软件包
  dnf install -y docker-ce-3:20.10.24-3.el8
  • 启动docker并设置随机自启
  systemctl enable docker --now

容器常用管理命令

命令 作用
docker run 选项... 创建容器
docker ps 查看所有容器(包含关闭的容器)
docker stop 容器名/容器id 停止容器
docker start 容器名/容器id 启动被停止的容器
docker restart 容器名/容器id 重新启动容器
docker exec -it 容器名/容器id bin/bash 进入容器(正在运行的状态)
--restart=always 创建容器时设置容器随 docker 自启
docker update 更新容器配置
docker stats 查看容器资源使用情况
docker logs 容器名/容器ID 查看容器日志信息
docker cp 容器名:路径 本机目录 拷贝容器中的数据到宿主机
docker cp 本机目录 容器名:路径 拷贝宿主机中的数据到容器中
docker rm 容器名/容器ID 删除容器(-f 用于强制删除,无需关闭容器)
docker kill 容器名/容器ID 强制停止正在运行的容器(一般不用,除非卡了)
docker inspect 容器名称 查看容器的元数据信息
docker info 查看docker信息

创建容器

  • 常用选项:
    • -d //创建容器并指定容器在后台运行
    • --name="名称" //为容器指定一个名称
    • -p //指定端口映射,格式为:宿主机端口:容器端口
  docker run -d --name=nginx -p 3306:3306 nginx:1.20.2

数据卷

  • 数据持久化:数据卷是通过将宿主机中的目录或文件挂载到容器中,来解决容器删除后,容器中的数据仍然持久化保存的作用。
  • 数据共享:一个数据卷可以挂载给多个容器来实现多容器间的数据共享
    # 主机创建数据卷目录
    mkdir -p /volumes-mysql/data
    # 拉取镜像
    docker pull mysql:8.0
    # 运行容器
    docker run -d --name=mysql \ 
      -p 3306:3306 \ # -p 端口映射
      -v /volumes-mysql/data:/var/lib/mysql/ \ # -v 宿主机目录/文件:容器中目录/文件
      -e MYSQL_ROOT_PASSWORD=123456\  # -e 指定环境变量 
      mysql:8.0

DockerFile定制镜像

指令 说明
FROM 定义基础镜像
LABEL 定义镜像元数据,例如:版本、作者、邮箱等信息
RUN 构建镜像时运行的命令
ADD 添加文件或目录到镜像中,可以是本地文件,也可以是url。如果添加.gz格式压缩包,会自动解压。
COPY 拷贝文件或目录到镜像中。只能拷贝当前路径下的文件,且不支持解压功能
EXPOSE 指定容器运行后监听的端口,协议默认TCP
ENV 设置容器内环境变量
CMD 启动容器时执行的Shell命令。在Dockerfile中只能有一条CMD指令。如果设置了多条CMD,只有最后一条会生效。
ENTRYPOINT 启动容器时执行的命令(通常用于执行脚本文件)
WORKDIR 为 RUN、CMD、COPY、AND 设置工作目录。

制作mysql镜像

  • 编写dockerfile文件
    # 使用最新稳定版或指定具体版本
    FROM mysql:8.0

    # 元数据
    LABEL maintainer="ze <haha@123.com>" \
          version="1.0" \
          description="MySQL for WordPress"

    # 设置时区
    ENV TZ=Asia/Shanghai

    # MySQL环境变量
    ENV MYSQL_ROOT_PASSWORD=Admin@123
    ENV MYSQL_DATABASE=wordpress
    ENV MYSQL_USER=wordpress
    ENV MYSQL_PASSWORD=wordpress@123

    # 针对MySQL 8.0.30+的配置调整
    # 复制自定义配置文件
    COPY config/my.cnf /etc/mysql/conf.d/

    # 复制初始化脚本(可选)
    #COPY sql/init.sql /docker-entrypoint-initdb.d/

    # 暴露端口
    EXPOSE 3306

    # 健康检查
    HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 \
      CMD mysqladmin ping -uroot -p${MYSQL_ROOT_PASSWORD} || exit 1
  • 编写my.cnf (最小化版本(适合Docker环境))
    [mysqld]
    # 基础设置
    bind-address = 0.0.0.0
    port = 3306

    # 字符集
    character-set-server = utf8mb4
    collation-server = utf8mb4_unicode_ci

    # InnoDB设置(MySQL 8.0.30+ 使用新的redo log参数)
    innodb_buffer_pool_size = 256M
    innodb_redo_log_capacity = 64M  # 替代旧的 innodb_log_file_size
    innodb_file_per_table = 1
    innodb_flush_method = O_DIRECT
    innodb_flush_log_at_trx_commit = 1

    # 连接设置
    max_connections = 200
    wait_timeout = 300

    # 时区
    default-time-zone = '+08:00'

    # 禁用已废弃的参数
    host_cache_size = 0  # 替代 --skip-host-cache

    [mysql]
    default-character-set = utf8mb4

    [client]
    default-character-set = utf8mb4
  • 构建镜像
    • -f :用于指定基于那个文件构建镜像,如果文件名就叫dockerfile,可以省略 -f。
    • -t:用于指定构建后的镜像名称,不可省略。
   docker build -f dockerfile -t ze-mysql:8.0 .

image

  • 启动容器
  docker run -d --name=ze-mysql --restart always \
  -v /volumes-mysql/data:/var/lib/mysql \
  -p 3306:3306 \
  ze-mysql:8.0

image

镜像导出方式

  • 格式: docker save -o 压缩文件名称 镜像名称:版本号
docker save -o wordpress-6.0.tar.gz wordpress:v6.0

镜像导入方式

  • 格式: docker load -i 压缩文件名称
docker load -i wordpress-6.0.tar.gz

容器导出为镜像

  • 格式: dockre commit 容器ID 新镜像:版本
docker commit fd084f8807fd mysql:ze-v8.0
[root@ap-161 ~]# docker inspect nginx
[
    {
        // 容器ID
        "Id": "944b76cdfa3bf343ccb6d9e70551e995e89a8a6adac0a76273241d066acb9dc7",
        // 容器创建时间
        "Created": "2025-12-20T14:55:46.04810334Z",
        // 容器启动时执行的命令
        "Path": "/docker-entrypoint.sh",
        // 容器启动时传递的参数 
        "Args": [
            "nginx",
            "-g",
            "daemon off;"
        ],
        //容器的状态
        "State": {
            // 当前状态是运行中
            "Status": "running",
            // true表示容器正在运行中
            "Running": true,
            // false容器没有被暂停
            "Paused": false,
            // false表示容器没有重启中
            "Restarting": false,
            // false表示容器没有因为内存溢出而被杀死
            "OOMKilled": false,
            // false表示容器没有死亡
            "Dead": false,
            // 容器id
            "Pid": 2814,
            // 上一次容器退出的状态码。0 表示成功退出
            "ExitCode": 0,
            // 容器运行中没有错误
            "Error": "",
            // 容器启动时间
            "StartedAt": "2025-12-20T14:55:46.251418701Z",
            // 容器尚未结束
            "FinishedAt": "0001-01-01T00:00:00Z"
        },
        //容器镜像的SHA256哈希值
        "Image": "sha256:34e04bb6b4bb37d45845842374be0cd181723daffb230849b1984aaeaa96faba",
        "ResolvConfPath": "/var/lib/docker/containers/944b76cdfa3bf343ccb6d9e70551e995e89a8a6adac0a76273241d066acb9dc7/resolv.conf",
        "HostnamePath": "/var/lib/docker/containers/944b76cdfa3bf343ccb6d9e70551e995e89a8a6adac0a76273241d066acb9dc7/hostname",
        "HostsPath": "/var/lib/docker/containers/944b76cdfa3bf343ccb6d9e70551e995e89a8a6adac0a76273241d066acb9dc7/hosts",
        "LogPath": "/var/lib/docker/containers/944b76cdfa3bf343ccb6d9e70551e995e89a8a6adac0a76273241d066acb9dc7/944b76cdfa3bf343ccb6d9e70551e995e89a8a6adac0a76273241d066acb9dc7-json.log",
        "Name": "/nginx",
        "RestartCount": 0,
        "Driver": "overlay2",
        "Platform": "linux",
        "MountLabel": "",
        "ProcessLabel": "",
        "AppArmorProfile": "",
        "ExecIDs": null,
        "HostConfig": {
            "Binds": null,
            "ContainerIDFile": "",
            "LogConfig": {
                "Type": "json-file",
                "Config": {}
            },
            "NetworkMode": "default",
            "PortBindings": {},
            "RestartPolicy": {
                "Name": "no",
                "MaximumRetryCount": 0
            },
            "AutoRemove": false,
            "VolumeDriver": "",
            "VolumesFrom": null,
            "CapAdd": null,
            "CapDrop": null,
            "CgroupnsMode": "host",
            "Dns": [],
            "DnsOptions": [],
            "DnsSearch": [],
            "ExtraHosts": null,
            "GroupAdd": null,
            "IpcMode": "private",
            "Cgroup": "",
            "Links": null,
            "OomScoreAdj": 0,
            "PidMode": "",
            "Privileged": false,
            "PublishAllPorts": false,
            "ReadonlyRootfs": false,
            "SecurityOpt": null,
            "UTSMode": "",
            "UsernsMode": "",
            "ShmSize": 67108864,
            "Runtime": "runc",
            "ConsoleSize": [
                24,
                134
            ],
            "Isolation": "",
            "CpuShares": 0,
            "Memory": 0,
            "NanoCpus": 0,
            "CgroupParent": "",
            "BlkioWeight": 0,
            "BlkioWeightDevice": [],
            "BlkioDeviceReadBps": [],
            "BlkioDeviceWriteBps": [],
            "BlkioDeviceReadIOps": [],
            "BlkioDeviceWriteIOps": [],
            "CpuPeriod": 0,
            "CpuQuota": 0,
            "CpuRealtimePeriod": 0,
            "CpuRealtimeRuntime": 0,
            "CpusetCpus": "",
            "CpusetMems": "",
            "Devices": [],
            "DeviceCgroupRules": null,
            "DeviceRequests": null,
            "KernelMemory": 0,
            "KernelMemoryTCP": 0,
            "MemoryReservation": 0,
            "MemorySwap": 0,
            "MemorySwappiness": null,
            "OomKillDisable": false,
            "PidsLimit": null,
            "Ulimits": [],
            "CpuCount": 0,
            "CpuPercent": 0,
            "IOMaximumIOps": 0,
            "IOMaximumBandwidth": 0,
            "MaskedPaths": [
                "/proc/asound",
                "/proc/acpi",
                "/proc/kcore",
                "/proc/keys",
                "/proc/latency_stats",
                "/proc/timer_list",
                "/proc/timer_stats",
                "/proc/sched_debug",
                "/proc/scsi",
                "/sys/firmware"
            ],
            "ReadonlyPaths": [
                "/proc/bus",
                "/proc/fs",
                "/proc/irq",
                "/proc/sys",
                "/proc/sysrq-trigger"
            ]
        },
        "GraphDriver": {
            "Data": {
                "LowerDir": "/var/lib/docker/overlay2/40d79fdd9f988a7a6ea2ca19952b4a77e87a5e66748f5c4ebd93aecdfb687556-init/diff:/var/lib/docker/overlay2/b6fd1f27f5cc0680d40c48220720e2422c57c50f0ee45c233b9d8b16bc490358/diff:/var/lib/docker/overlay2/7e331fc84d6d48b070688c04a025e24da5e4bbc057bf97697e4d4a233a62ede4/diff:/var/lib/docker/overlay2/50f13d1073c9a174d47c3c98bb8807456f7c5124f9f3287b022807f86859536a/diff:/var/lib/docker/overlay2/f567a1e94f76cc3aa0b817e8c73f8ccb82d4a919c62b44bb00c4ae8e0c8bbd93/diff:/var/lib/docker/overlay2/ace34c45d0bf80a8424af4d64fa26db54d8ea12e2a744275dc26646bce8ac95f/diff:/var/lib/docker/overlay2/d29cc4db071cf798cf5298e753ba974102efb72b9fe2fc15027063af2ca1fe1d/diff:/var/lib/docker/overlay2/aadf15f7386651b11288d360e6c9ed9ab9118915336502dcfb0dc4c6ca891845/diff",
                "MergedDir": "/var/lib/docker/overlay2/40d79fdd9f988a7a6ea2ca19952b4a77e87a5e66748f5c4ebd93aecdfb687556/merged",
                "UpperDir": "/var/lib/docker/overlay2/40d79fdd9f988a7a6ea2ca19952b4a77e87a5e66748f5c4ebd93aecdfb687556/diff",
                "WorkDir": "/var/lib/docker/overlay2/40d79fdd9f988a7a6ea2ca19952b4a77e87a5e66748f5c4ebd93aecdfb687556/work"
            },
            "Name": "overlay2"
        },
        "Mounts": [],
        "Config": {
            "Hostname": "944b76cdfa3b",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "ExposedPorts": {
                "80/tcp": {}
            },
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                "NGINX_VERSION=1.28.0",
                "NJS_VERSION=0.8.10",
                "NJS_RELEASE=1~bookworm",
                "PKG_RELEASE=1~bookworm",
                "DYNPKG_RELEASE=1~bookworm"
            ],
            "Cmd": [
                "nginx",
                "-g",
                "daemon off;"
            ],
            "Image": "nginx:1.28.0",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": [
                "/docker-entrypoint.sh"
            ],
            "OnBuild": null,
            "Labels": {
                "maintainer": "NGINX Docker Maintainers <docker-maint@nginx.com>"
            },
            "StopSignal": "SIGQUIT"
        },
        "NetworkSettings": {
            "Bridge": "",
            "SandboxID": "acec343640d6d198a11aa8b11b006bb71416a91d2ab40446be8a19cac7461cb7",
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "Ports": {
                "80/tcp": null
            },
            "SandboxKey": "/var/run/docker/netns/acec343640d6",
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "ed1e064d2c76ddb2720bd65d1c35ad3fba637d88e06aecc9035957b76bf269ce",
            "Gateway": "172.17.0.1",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "172.17.0.2",
            "IPPrefixLen": 16,
            "IPv6Gateway": "",
            "MacAddress": "02:42:ac:11:00:02",
            "Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "4524f73873ab2246a2e10b4cfcc30b12750fbe47e042f0ac0994c66b4885713b",
                    "EndpointID": "ed1e064d2c76ddb2720bd65d1c35ad3fba637d88e06aecc9035957b76bf269ce",
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.2",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:11:00:02",
                    "DriverOpts": null
                }
            }
        }
    }
]

posted @ 2025-12-22 22:31  是17阿哥呀  阅读(17)  评论(0)    收藏  举报