安装docker软件包 (注意:openEuler系统)
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
dnf install -y docker-ce-3:20.10.24-3.el8
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镜像
# 使用最新稳定版或指定具体版本
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 .

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

镜像导出方式
- 格式: 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
}
}
}
}
]