Docker环境部署,镜像,容器管理快速入门

Docker 概述

1. 什么是 Docker

所谓的 Docker 本质上是一款容器管理工具,是一种打包文件的技术。

因为 Linux 一切皆文件,容器技术本质上是将一个程序及其依赖的库文件打包管理的技术。

2. Docker 架构

属于典型的 C/S 架构,服务端由进程 “dockerd” 启动,客户端由 docker 命令进行管理。

对于 dockerd 而言,能够提供如下典型服务:

  • 镜像管理
  • 官方站点镜像
  • 第三方镜像
  • 自制镜像
  • 容器管理
  • 存储卷管理
  • 网络管理

3. Docker 的相关站点

  • 官网:
    https://www.docker.com/
  • 官方文档:
    https://docs.docker.com/
  • 官方镜像站点:
    https://hub.docker.com/
  • GitHub 站点:
  • https://github.com/docker-archive/docker-ce # 老的弃用的,ce表示社区版,ee表示企业版
  • https://github.com/moby/moby # 新docker合并到了moby项目,这是新地址

手动部署和卸载 Docker

二进制 Docker 环境部署

推荐阅读:

  • https://docs.docker.com/engine/install/ubuntu/
  • https://docs.docker.com/engine/install/centos/
  • https://docs.docker.com/engine/install/binaries/
1. 下载 Docker
[root@elk91 ~]# wget https://download.docker.com/linux/static/stable/x86_64/docker-28.0.1.tgz

若使用内部源:

[root@elk91 ~]# wget http://192.168.16.253/Resources/Docker/softwares/binary/docker-28.0.1.tgz
2. 解压软件包
[root@elk91 ~]# tar xf docker-28.0.1.tgz 
[root@elk91 ~]# 
[root@elk91 ~]# tree docker
docker
├── containerd
├── containerd-shim-runc-v2
├── ctr
├── docker
├── dockerd
├── docker-init
├── docker-proxy
└── runc

0 directories, 8 files
[root@elk91 ~]# 
3. 将二进制文件拷贝到环境变量中

拷贝脚本到$PATH随便一个路径中即可

[root@elk91 ~]# cp docker/* /usr/local/bin/
[root@elk91 ~]# 
[root@elk91 ~]# ll /usr/local/bin/
total 206896
drwxr-xr-x  2 root root     4096 Mar 19 10:30 ./
drwxr-xr-x 17 root root     4096 Mar 18 17:10 ../
-rwxr-xr-x  1 root root 40415384 Mar 19 10:30 containerd*
-rwxr-xr-x  1 root root 13299864 Mar 19 10:30 containerd-shim-runc-v2*
-rwxr-xr-x  1 root root 20394136 Mar 19 10:30 ctr*
-rwxr-xr-x  1 root root 41552248 Mar 19 10:30 docker*
-rwxr-xr-x  1 root root 76659456 Mar 19 10:30 dockerd*
-rwxr-xr-x  1 root root   708448 Mar 19 10:30 docker-init*
-rwxr-xr-x  1 root root  2377328 Mar 19 10:30 docker-proxy*
-rwxr-xr-x  1 root root 16426200 Mar 19 10:30 runc*
[root@elk91 ~]# 
4. 启动 Docker 服务端
[root@elk91 ~]# dockerd     # 前台启动
[root@elk91 ~]# dockerd  &  # 或者后台启动
5. 客户端测试

查看docker版本

[root@elk91 ~]# docker version
Client:
 Version:           28.0.1
 API version:       1.48
 Go version:        go1.23.6
 Git commit:        068a01e
 Built:             Wed Feb 26 10:40:04 2025
 OS/Arch:           linux/amd64
 Context:           default

Server: Docker Engine - Community
 Engine:
  Version:          28.0.1
  API version:      1.48 (minimum version 1.24)
  Go version:       go1.23.6
  Git commit:       bbd0a17
  Built:            Wed Feb 26 10:41:19 2025
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          v1.7.25
  GitCommit:        bcc810d6b9066471b0b6fa75f557a15a1cbf31bb
 runc:
  Version:          1.2.5
  GitCommit:        v1.2.5-0-g59923ef
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0
[root@elk91 ~]# 
6. 镜像仓库访问问题

由于不可抗因素,目前国内无法访问 Docker 官方镜像仓库,无法拉取镜像,需要借助 “梯子”。

下面配置,虚拟机映射到win系统上的代理梯子端口即可拉取

[root@elk91 ~]# docker run hello-world
Unable to find image 'hello-world:latest' locally
docker: Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)

Run 'docker run --help' for more information
[root@elk91 ~]# 

卸载二进制 Docker 环境

1. 停止 Docker 服务
[root@elk91 ~]# ps -ef | grep  dockerd
root       79359   24572  1 10:34 pts/0    00:00:00 dockerd
root       79587   66495  0 10:34 pts/2    00:00:00 grep --color=auto dockerd
[root@elk91 ~]# 
[root@elk91 ~]# kill 79359
[root@elk91 ~]# 
[root@elk91 ~]# docker version
Client:
 Version:           28.0.1
 API version:       1.48
 Go version:        go1.23.6
 Git commit:        068a01e
 Built:             Wed Feb 26 10:40:04 2025
 OS/Arch:           linux/amd64
 Context:           default
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
[root@elk91 ~]# 
2. 卸载 Docker 环境
[root@elk91 ~]# ll /usr/local/bin/
total 206908
drwxr-xr-x  2 root root     4096 Mar 19 10:30 ./
drwxr-xr-x 17 root root     4096 Mar 18 17:10 ../
-rwxr-xr-x  1 root root 40415384 Mar 19 10:30 containerd*
-rwxr-xr-x  1 root root 13299864 Mar 19 10:30 containerd-shim-runc-v2*
-rwxr-xr-x  1 root root 20394136 Mar 19 10:30 ctr*
-rwxr-xr-x  1 root root 41552248 Mar 19 10:30 docker*
-rwxr-xr-x  1 root root 76659456 Mar 19 10:30 dockerd*
-rwxr-xr-x  1 root root   708448 Mar 19 10:30 docker-init*
-rwxr-xr-x  1 root root  2377328 Mar 19 10:30 docker-proxy*
-rwxr-xr-x  1 root root 16426200 Mar 19 10:30 runc*
[root@elk91 ~]# 
[root@elk91 ~]# rm -f /usr/local/bin/*
[root@elk91 ~]# 
[root@elk91 ~]# ll /usr/local/bin/
total 8
drwxr-xr-x  2 root root 4096 Mar 19 10:35 ./
drwxr-xr-x 17 root root 4096 Mar 18 17:10 ../
[root@elk91 ~]#               

一键部署 Docker 脚本

1. 下载脚本

[root@elk91 ~]# wget http://192.168.16.253/Resources/Docker/softwares/haoshuaicongedu-autoinstall-docker-docker-compose.tar.gz

2. 解压软件包

[root@elk91 ~]# tar xf haoshuaicongedu-autoinstall-docker-docker-compose.tar.gz 

3. 安装 Docker 环境

[root@elk91 ~]# ./install-docker.sh i

4. 测试及网络问题

此命令依旧无法翻墙。

[root@elk91 ~]# which docker
/usr/bin/docker
[root@elk91 ~]# 
[root@elk91 ~]# docker run hello-world
Unable to find image 'hello-world:latest' locally
docker: Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers).
See 'docker run --help'.
[root@elk91 ~]# 

5. 卸载 Docker 环境

[root@elk91 ~]# ./install-docker.sh 

启动镜像。如果本地没有该镜像会去公网拉取镜像。官方仓库,第三方仓库

image-20250319113802048
应用部署容器化演进之路

docker 获取境外的官方镜像

1. 下载软件包

[root@elk92 ~]# wget http://192.168.16.253/Resources/Docker/softwares/yinzhengjie-autoinstall-docker-docker-compose.tar.gz

# 此脚本为自己编写,可以安装和卸载docker
# 此脚本安装的docker 的 systemctl 启动脚本自带端口映射,映射到Windows的7890梯子的端口,实现docker科学上网
# 另外此脚本带docker tab补全命令功能

2. 解压软件包

[root@elk92 ~]# tar xf yinzhengjie-autoinstall-docker-docker-compose.tar.gz 

3. 安装 docker 环境

[root@elk92 ~]# ./install-docker.sh i

4. 测试翻墙成功

[root@elk92 ~]# docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
e6590344b1a5: Pull complete 
Digest: sha256:7e1a4e2d11e2ac7a8c3f768d4166c2defeb09d2a750b010412b6ea13de1efb19
Status: Downloaded newer image for hello-world:latest
To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

[root@elk92 ~]# 

5. 验证为什么能够上外网【前提是你的 windows 有对应的代理。】

因为这个包里的systemcl脚本已经更改了

[root@elk92 ~]# systemctl cat docker
# /lib/systemd/system/docker.service
[Unit]
Description=haoshuaicongedu linux Docke Engine
Documentation=https://docs.docker.com,https://www.haoshuaicongedu.com
Wants=network-online.target

[Service]
Type=notify
ExecStart=/usr/bin/dockerd
# 配置docker代理
Environment="HTTP_PROXY=http://10.0.0.1:7890"
Environment="HTTPS_PROXY=http://10.0.0.1:7890"

[Install]
WantedBy=multi-user.target
[root@elk92 ~]# 

6. 使用 docker 运行 nginx 服务

[root@elk92 ~]# docker run -p 81:80 --name myweb -d  nginx:1.27.4-alpine 
Unable to find image 'nginx:1.27.4-alpine' locally
1.27.4-alpine: Pulling from library/nginx
f18232174bc9: Pull complete 
ab3286a73463: Pull complete 
0c7e4c092ab7: Pull complete 
Digest: sha256:4ff102c5d78d254a6f0da062b3cf39eaf07f01eec0927fd21e219d0af8bc0591
Status: Downloaded newer image for nginx:1.27.4-alpine
b03c97981ceacd43c4977dc176b53da242f61c1601e1cdc25ea7e75af14d8f2d
[root@elk92 ~]# 
[root@elk92 ~]# docker ps -l
CONTAINER ID   IMAGE                 COMMAND                  CREATED         STATUS         PORTS                               NAMES
b03c97981cea   nginx:1.27.4-alpine   "/docker-entrypoint.…"   4 seconds ago   Up 3 seconds   0.0.0.0:81->80/tcp, :::81->80/tcp   myweb
[root@elk92 ~]# 

7. 部署服务测试

[root@elk93 ~]# curl -I http://10.0.0.92:81/

镜像导入和导出

1. 导出镜像

docker image save

[root@elk92 ~]# docker image ls
REPOSITORY    TAG             IMAGE ID       CREATED       SIZE
nginx         1.27.4-alpine   1ff4bb4faebc   5 weeks ago   47.9MB
hello-world   latest          74cc54e27dc4   8 weeks ago   10.1kB
[root@elk92 ~]# 
[root@elk92 ~]# docker image save nginx:1.27.4-alpine > haoshuaicongedu-nginx-1.27.4-alpine.tar.gz
[root@elk92 ~]# 

2. 下载镜像

[root@elk93 ~]# wget http://192.168.16.253/Resources/Docker/images/Nginx/haoshuaicongedu-nginx-1.27.4-alpine.tar.gz

3. 导入镜像

load < 或者 load -i

[root@elk93 ~]# docker image ls
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE
[root@elk93 ~]# 
[root@elk93 ~]# docker load < haoshuaicongedu-nginx-1.27.4-alpine.tar.gz 
08000c18d16d: Loading layer [==================================================>]  8.121MB/8.121MB
c1761f3c364a: Loading layer [==================================================>]  4.504MB/4.504MB
Loaded image: nginx:1.27.4-alpine
[root@elk93 ~]# 
[root@elk93 ~]# docker image ls
REPOSITORY   TAG             IMAGE ID       CREATED       SIZE
nginx        1.27.4-alpine   1ff4bb4faebc   5 weeks ago   47.9MB
[root@elk93 ~]# 

4. 运行 nginx 服务

注意:run表示先创建docker容器,然后再启动容器。相当于两步合二唯一

[root@elk93 ~]# docker run -p 81:80 --name myweb -d  nginx:1.27.4-alpine 
12cc25debc85e85a5e556da96ee8909e038efbcd0dd25b06f3f7d5fc0bd25fa9

5. 访问测试

[root@elk93 ~]# curl -I http://10.0.0.93:81/
[root@elk93 ~]# curl  http://10.0.0.93:81/

Docker 本地镜像管理实战 * * * * *💋

1. 查看本地镜像仓库

[root@elk92 ~]# docker image ls
REPOSITORY    TAG             IMAGE ID       CREATED       SIZE
nginx         1.27.4-alpine   1ff4bb4faebc   5 weeks ago   47.9MB
hello-world   latest          74cc54e27dc4   8 weeks ago   10.1kB
[root@elk92 ~]# 

以上ls命令输出:相关字段说明

  • REPOSITORY:远程仓库。其格式为 [远程仓库主机名或者IP地址/][项目仓库名称/]镜像名称[:镜像版本]
  • 如果下载的镜像是 Docker Hub 官方的,则无需指定前缀 [远程仓库主机名或者IP地址/][项目仓库名称/],默认为 docker.io/library/
  • 如果下载的镜像非 Docker Hub 官方的,则需要指定 [远程仓库主机名或者IP地址/][项目仓库名称/]
  • 示例:registry.cn - hangzhou.aliyuncs.com/yinzhengjie - k8s/apps:v1
  • TAG:对镜像做版本标记,例如 nginx:1.27.4,表示部署的是 Nginx 的 1.27.4 版本。如果拉取镜像时未指定 TAG,则默认标签为 latest,生产环境中不推荐使用该标签。
  • IMAGE ID:表示镜像的唯一标识,用于判断该镜像是否被篡改。
  • CREATED:表示镜像的创建时间。
  • SIZE:镜像的大小。

2. 拉取镜像

2.1 拉取官方的镜像
[root@elk92 ~]# docker pull busybox:1.36.1
1.36.1: Pulling from library/busybox
aef0d3bb86ca: Pull complete 
Digest: sha256:e9daaecf76a040744e68e1436515ddba4127fdc84b0735095b392b1d343f904b
Status: Downloaded newer image for busybox:1.36.1
docker.io/library/busybox:1.36.1
[root@elk92 ~]# 
2.2 拉取非官方镜像
[root@elk92 ~]# docker pull registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1
v1: Pulling from yinzhengjie-k8s/apps
5758d4e389a3: Pull complete 
2dd61e30a21a: Pull complete 
Digest: sha256:3bee216f250cfd2dbda1744d6849e27118845b8f4d55dda3ca3c6c1227cc2e5c
Status: Downloaded newer image for registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1
registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1
[root@elk92 ~]# 
2.3 拉取最新的镜像

默认不指定tag版本标签,默认拉取最新版

[root@elk92 ~]# docker pull alpine
Using default tag: latest
latest: Pulling from library/alpine
f18232174bc9: Already exists 
Digest: sha256:a8560b36e8b8210634f77d9f7f9efd7ffa463e380b75e2e74aff4511df3ef88c
Status: Downloaded newer image for alpine:latest
docker.io/library/alpine:latest
[root@elk92 ~]# 

3. 给镜像打标签

[root@elk92 ~]# docker image tag alpine:latest www.haoshuaicongedu.com/haoshauicong/alpine:2025-03-19
[root@elk92 ~]# 
[root@elk92 ~]# docker image ls
REPOSITORY                                               TAG             IMAGE ID       CREATED         SIZE
alpine                                                   latest          aded1e1a5b37   4 weeks ago     7.83MB
www.haoshuaicongedu.com/haoshauicong/alpine                         2025-03-19      aded1e1a5b37   4 weeks ago     7.83MB
nginx                                                    1.27.4-alpine   1ff4bb4faebc   5 weeks ago     47.9MB
hello-world                                              latest          74cc54e27dc4   8 weeks ago     10.1kB
registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps   v1              f28fd43be4ad   14 months ago   23MB
busybox                                                  1.36.1          2d61ae04c2b8   22 months ago   4.27MB
[root@elk92 ~]# 

4. 删除镜像

注意:这里删除的是镜像,不是容器。

image 管理的是镜像

container 管理的是容器

[root@elk92 ~]# docker image rm www.haoshuaicongedu.com/haoshauicong/alpine:2025-03-19 
Untagged: www.haoshuaicongedu.com/haoshauicong/alpine:2025-03-19
[root@elk92 ~]# 
[root@elk92 ~]# docker image ls
REPOSITORY                                               TAG             IMAGE ID       CREATED         SIZE
alpine                                                   latest          aded1e1a5b37   4 weeks ago     7.83MB
nginx                                                    1.27.4-alpine   1ff4bb4faebc   5 weeks ago     47.9MB
hello-world                                              latest          74cc54e27dc4   8 weeks ago     10.1kB
registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps   v1              f28fd43be4ad   14 months ago   23MB
busybox                                                  1.36.1          2d61ae04c2b8   22 months ago   4.27MB
[root@elk92 ~]# 

5. 导出镜像

[root@elk92 ~]# docker pull jasonyin2020/haoshuaicongedu-games:v0.6  # 此处我成功拉取了镜像,如果你拉取不了,则可以使用镜像导入。
v0.6: Pulling from jasonyin2020/haoshuaicongedu-games
5758d4e389a3: Already exists 
51d66f629021: Already exists 
ff9c6add3f30: Already exists 
163456ff6f09: Pull complete 
fd8f88d41a37: Pull complete 
Digest: sha256:6e20088543038ce8c142409255f6affd03d8ca703e6de57f4a2ab666b2d2bfe2
Status: Downloaded newer image for jasonyin2020/haoshuaicongedu-games:v0.6
docker.io/jasonyin2020/haoshuaicongedu-games:v0.6
[root@elk92 ~]# 
[root@elk92 ~]# docker image save jasonyin2020/haoshuaicongedu-games:v0.6 -o haoshuaicongedu-games-v0.6.tar.gz  # 导出镜像 
[root@elk92 ~]# 
[root@elk92 ~]# scp haoshuaicongedu-games-v0.6.tar.gz 10.0.0.93:~

6. 导入镜像

[root@elk93 ~]# docker image ls
REPOSITORY   TAG             IMAGE ID       CREATED       SIZE
nginx        1.27.4-alpine   1ff4bb4faebc   5 weeks ago   47.9MB
[root@elk93 ~]# 
[root@elk93 ~]# 
[root@elk93 ~]# docker load -i haoshuaicongedu-games-v0.6.tar.gz 
7fcb75871b21: Loading layer [==================================================>]  5.904MB/5.904MB
15d7cdc64789: Loading layer [==================================================>]  18.32MB/18.32MB
5f66747c8a72: Loading layer [==================================================>]  3.072kB/3.072kB
c39c1c35e3e8: Loading layer [==================================================>]  4.096kB/4.096kB
b8dbe22b95f7: Loading layer [==================================================>]  3.584kB/3.584kB
9d5b000ce7c7: Loading layer [==================================================>]  7.168kB/7.168kB
24f6c2496534: Loading layer [==================================================>]  288.1MB/288.1MB
df2c564d255b: Loading layer [==================================================>]  6.144kB/6.144kB
ce4dda5fa1c1: Loading layer [==================================================>]  7.168kB/7.168kB
1d0291efebc6: Loading layer [==================================================>]  70.73MB/70.73MB
Loaded image: jasonyin2020/haoshuaicongedu-games:v0.6
[root@elk93 ~]# 
[root@elk93 ~]# docker image ls
REPOSITORY                     TAG             IMAGE ID       CREATED         SIZE
nginx                          1.27.4-alpine   1ff4bb4faebc   5 weeks ago     47.9MB
jasonyin2020/haoshuaicongedu-games   v0.6            b55cbfca1946   12 months ago   376MB
[root@elk93 ~]# 

温馨提示:如果你下载不了镜像,则可以使用已下载好的镜像进行导入。

[root@elk91 ~]# wget http://192.168.16.253/Resources/Docker/images/haoshuaicongedu-games-v0.6.tar.gz

镜像和容器的关系

  • 镜像就好比使用 apt -y install nginx 安装 Nginx,但该 Nginx 并未运行,只是包含配置文件、启动脚本、程序文件等信息。
  • 容器就相当于启动服务,好比 systemctl start nginx,是将一个程序运行为一个进程的过程。

值得注意的是,镜像是不可修改的,即只读的;而容器是可读写的,也就是可以进行修改的。

容器实现端口映射原理

1. 查看现有的容器列表

[root@elk93 ~]# docker ps
CONTAINER ID   IMAGE                               COMMAND                  CREATED       STATUS       PORTS                               NAMES
35167301d7e1   jasonyin2020/haoshuaicongedu-games:v0.6   "/docker-entrypoint.…"   3 hours ago   Up 3 hours   0.0.0.0:90->80/tcp, :::90->80/tcp   mygame
12cc25debc85   nginx:1.27.4-alpine                 "/docker-entrypoint.…"   4 hours ago   Up 4 hours   0.0.0.0:81->80/tcp, :::81->80/tcp   myweb
[root@elk93 ~]# 
img

2. 容器的网卡和宿主机的 veth 网卡是成对出现的

如下: 本段是6 ,对端是if7

6: eth0@if7:

4: eth0@if5:

7: vethbdffe29@if6:

[root@elk93 ~]# docker exec -it mygame ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
6: eth0@if7: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP 
    link/ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.3/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever
[root@elk93 ~]# 
[root@elk93 ~]# 
[root@elk93 ~]# docker exec -it myweb ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
4: eth0@if5: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP 
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever
[root@elk93 ~]# 
[root@elk93 ~]# docker exec -it myweb route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         172.17.0.1      0.0.0.0         UG    0      0        0 eth0
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 eth0
[root@elk93 ~]# 
[root@elk93 ~]# docker exec -it mygame route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         172.17.0.1      0.0.0.0         UG    0      0        0 eth0
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 eth0
[root@elk93 ~]# 
[root@elk93 ~]# ip a
...
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:c0:b7:be:c3 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:c0ff:feb7:bec3/64 scope link 
       valid_lft forever preferred_lft forever
5: veth98182e6@if4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default 
    link/ether 8e:ac:88:5a:ba:a1 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet6 fe80::8cac:88ff:fe5a:baa1/64 scope link 
       valid_lft forever preferred_lft forever
7: vethbdffe29@if6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default 
    link/ether 72:b3:09:9d:78:54 brd ff:ff:ff:ff:ff:ff link-netnsid 1
    inet6 fe80::70b3:9ff:fe9d:7854/64 scope link 
       valid_lft forever preferred_lft forever
[root@elk93 ~]# 

3. 所有的容器网卡都会桥接到 docker0

[root@elk93 ~]# apt -y install  bridge-utils
[root@elk93 ~]# brctl show docker0
bridge name    bridge id       STP enabled interfaces
docker0        8000.0242c0b7bec3   no      veth98182e6
                                        vethbdffe29
[root@elk93 ~]# 

4. 外部访问宿主机的某个端口会被 DNAT 到对应的容器端口

[root@elk93 ~]# iptables-save | grep 90
-A DOCKER ! -i docker0 -p tcp -m tcp --dport 90 -j DNAT --to-destination 172.17.0.3:80
[root@elk93 ~]# 

5. 容器需要访问外网的前提是开启内核转发参数

注:-w是临时修改

[root@elk93 ~]# sysctl -w net.ipv4.ip_forward=1
net.ipv4.ip_forward = 1
[root@elk93 ~]# 
[root@elk93 ~]# sysctl -q net.ipv4.ip_forward
net.ipv4.ip_forward = 1
[root@elk93 ~]# 

容器和虚拟机的对比

  • 小(轻量级):
  • 容器镜像体积小,可达到 MB 级别。
  • 虚拟机的 ISO 文件可达 GB 级别。
  • 快:
  • 容器没有开机启动流程,直接以进程的方式在宿主机运行。
  • 虚拟机存在开机启动流程。
  • 性能高:
  • 容器直接使用物理机的内核。
  • 虚拟机使用的是虚拟的 CPU 内核,需要 VMM 程序做一次转换为物理 CPU 能够识别的指令,VMM 程序本身也会消耗一些资源。
  • 迁移方便:
  • 容器迁移时,可以直接迁移镜像,镜像是不可变的基础设施,只要有 Docker 环境都可以运行镜像。
  • 虚拟机在迁移应用时,需要目标主机的 VMM 版本一致,如果不一致则会面临问题,而且虚拟机本身就是很大的文件,甚至有些平台不兼容则需要手动重新部署服务。
  • 隔离性:
  • 从隔离性角度来说,虚拟机比容器隔离性要好,所以,二者在此处可以互补。

容器和镜像的关系

  • 镜像:是不可变的基础设施,即只读的。
  • 容器:基于镜像启动的进程,将来对容器进行修改时,会采用 Copy On Write(COW)机制。

总结

  • 一个镜像可以运行多个容器。
  • 镜像就好比 VM 的 “模板机”,容器就好比克隆的 “虚拟机”。

基于一个镜像启动多个容器案例

1. 下载镜像

[root@elk93 ~]# docker image pull registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1
v1: Pulling from yinzhengjie-k8s/apps
5758d4e389a3: Pull complete 
2c6e86e57dfd: Pull complete 
2dd61e30a21a: Pull complete 
Digest: sha256:3bee216f250cfd2dbda1744d6849e27118845b8f4d55dda3ca3c6c1227cc2e5c
Status: Downloaded newer image for registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1
registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1
[root@elk93 ~]# 
[root@elk93 ~]# 
[root@elk93 ~]# docker image ls
REPOSITORY                                               TAG             IMAGE ID       CREATED         SIZE
nginx                                                    1.27.4-alpine   1ff4bb4faebc   5 weeks ago     47.9MB
jasonyin2020/haoshuaicongedu-games                             v0.6            b55cbfca1946   12 months ago   376MB
registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps   v1              f28fd43be4ad   14 months ago   23MB
[root@elk93 ~]# 

2. 基于镜像启动多个容器

就是改个容器名字,改个映射端口即可

[root@elk93 ~]# docker run -p 81:80 --name c1 -d registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1 
2846f7d526c7f3211998865f0d86d7e8d691031cdc2c93539bd28a7e1dd15897
[root@elk93 ~]# 
[root@elk93 ~]# docker run -p 82:80 --name c2 -d registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1 
668fed180ff4fe52735841e1ffc166f7f11eff764ec07edf835787f0d5be07d4
[root@elk93 ~]# 
[root@elk93 ~]# docker ps 
CONTAINER ID   IMAGE                                                       COMMAND                  CREATED          STATUS          PORTS                               NAMES
668fed180ff4   registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1   "/docker-entrypoint.…"   5 seconds ago    Up 4 seconds    0.0.0.0:82->80/tcp, :::82->80/tcp   c2
2846f7d526c7   registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1   "/docker-entrypoint.…"   12 seconds ago   Up 11 seconds   0.0.0.0:81->80/tcp, :::81->80/tcp   c1
[root@elk93 ~]# 

常用参数说明

  • -p:指定端口映射,格式为 宿主机端口:容器端口
  • --name:指定容器的名称。
  • -d:让容器在后台运行。

3. 访问测试

http://10.0.0.93:81/

容器的基础管理 * * * * *💋

1. 查看正在运行的容器列表

[root@elk93 ~]# docker ps
CONTAINER ID   IMAGE                                                       COMMAND                  CREATED          STATUS          PORTS                               NAMES
668fed180ff4   registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1   "/docker-entrypoint.…"   27 minutes ago   Up 27 minutes   0.0.0.0:82->80/tcp, :::82->80/tcp   c2
2846f7d526c7   registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1   "/docker-entrypoint.…"   27 minutes ago   Up 27 minutes   0.0.0.0:81->80/tcp, :::81->80/tcp   c1
[root@elk93 ~]# 

上面ps命令,相关字段说明

  • CONTAINER ID:容器的唯一标识。
  • IMAGE:容器基于哪个镜像启动的。
  • COMMAND:容器启动时运行的命令。
  • CREATED:容器的创建时间。
  • STATUS:容器的运行状态及时间。常见的状态有以下几种:
  • Up:容器正在运行。
  • Create:容器已经创建但是未运行。
  • Exited:容器处于退出状态,未运行。
  • Paused:容器处于暂停状态,既没有停止也没有运行,只是临时不对外提供服务。
  • PORTS:配置端口映射信息,或者端口暴露信息。
  • NAMES:容器的名称,每个容器的名称不能重复,必须唯一。

2. 停止容器

[root@elk93 ~]# docker stop c1 
c1
[root@elk93 ~]# 
[root@elk93 ~]# docker ps -a
CONTAINER ID   IMAGE                                                       COMMAND                  CREATED          STATUS                    PORTS                               NAMES
668fed180ff4   registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1   "/docker-entrypoint.…"   32 minutes ago   Up 32 minutes             0.0.0.0:82->80/tcp, :::82->80/tcp   c2
2846f7d526c7   registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1   "/docker-entrypoint.…"   32 minutes ago   Exited (0) 1 second ago                                       c1
[root@elk93 ~]# 

3. 暂停容器

[root@elk93 ~]# docker pause c2 
c2
[root@elk93 ~]# 
[root@elk93 ~]# docker ps -a
CONTAINER ID   IMAGE                                                       COMMAND                  CREATED          STATUS                      PORTS                               NAMES
668fed180ff4   registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1   "/docker-entrypoint.…"   33 minutes ago   Up 33 minutes (Paused)      0.0.0.0:82->80/tcp, :::82->80/tcp   c2
2846f7d526c7   registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1   "/docker-entrypoint.…"   33 minutes ago   Exited (0) 51 seconds ago                                       c1
[root@elk93 ~]# 

4. 恢复暂停

[root@elk93 ~]# docker unpause c2 
c2
[root@elk93 ~]# 
[root@elk93 ~]# 
[root@elk93 ~]# docker ps -a
CONTAINER ID   IMAGE                                                       COMMAND                  CREATED          STATUS                          PORTS                               NAMES
668fed180ff4   registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1   "/docker-entrypoint.…"   34 minutes ago   Up 34 minutes                   0.0.0.0:82->80/tcp, :::82->80/tcp   c2
2846f7d526c7   registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1   "/docker-entrypoint.…"   34 minutes ago   Exited (0) About a minute ago                                       c1
[root@elk93 ~]# 

5. 创建容器

[root@elk93 ~]# docker create --name c3 registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1 
bae123232da08d4f1bed833a28bbaefedbcb1dfa986ffaaac0e9d8c135cdc8cb
[root@elk93 ~]# 
[root@elk93 ~]# docker ps -a  # 其中'-a'查看容器的所有状态
CONTAINER ID   IMAGE                                                       COMMAND                  CREATED          STATUS                     PORTS                               NAMES
bae123232da0   registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1   "/docker-entrypoint.…"   2 seconds ago    Created                                                        c3
668fed180ff4   registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1   "/docker-entrypoint.…"   34 minutes ago   Up 34 minutes              0.0.0.0:82->80/tcp, :::82->80/tcp   c2
2846f7d526c7   registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1   "/docker-entrypoint.…"   34 minutes ago   Exited (0) 2 minutes ago                                       c1
[root@elk93 ~]# 

6. 修改容器的名称

[root@elk93 ~]# docker ps -a
CONTAINER ID   IMAGE                                                       COMMAND                  CREATED              STATUS                     PORTS                               NAMES
bae123232da0   registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1   "/docker-entrypoint.…"   About a minute ago   Created                                                        c3
668fed180ff4   registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1   "/docker-entrypoint.…"   36 minutes ago       Up 36 minutes              0.0.0.0:82->80/tcp, :::82->80/tcp   c2
2846f7d526c7   registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1   "/docker-entrypoint.…"   36 minutes ago       Exited (0) 3 minutes ago                                       c1
[root@elk93 ~]# 
[root@elk93 ~]# 
[root@elk93 ~]# docker rename c2 xixi
[root@elk93 ~]# 
[root@elk93 ~]# docker ps -a
CONTAINER ID   IMAGE                                                       COMMAND                  CREATED              STATUS                     PORTS                               NAMES
bae123232da0   registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1   "/docker-entrypoint.…"   About a minute ago   Created                                                        c3
668fed180ff4   registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1   "/docker-entrypoint.…"   36 minutes ago       Up 36 minutes              0.0.0.0:82->80/tcp, :::82->80/tcp   xixi
2846f7d526c7   registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1   "/docker-entrypoint.…"   36 minutes ago       Exited (0) 4 minutes ago                                       c1
[root@elk93 ~]# 

7. 停止容器

[root@elk93 ~]# docker ps -a
CONTAINER ID   IMAGE                                                       COMMAND                  CREATED         STATUS         PORTS     NAMES
fe2025dda0cd   registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1   "/docker-entrypoint.…"   4 seconds ago   Up 3 seconds   80/tcp    c3
[root@elk93 ~]# 
[root@elk93 ~]# 
[root@elk93 ~]# docker stop c3 
c3
[root@elk93 ~]# 
[root@elk93 ~]# docker ps -a
CONTAINER ID   IMAGE                                                       COMMAND                  CREATED          STATUS                     PORTS     NAMES
fe2025dda0cd   registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1   "/docker-entrypoint.…"   12 seconds ago   Exited (0) 2 seconds ago             c3
[root@elk93 ~]# 
[root@elk93 ~]# 

8. 启动容器

[root@elk93 ~]# docker ps -a
CONTAINER ID   IMAGE                                                       COMMAND                  CREATED          STATUS                      PORTS     NAMES
fe2025dda0cd   registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1   "/docker-entrypoint.…"   23 seconds ago   Exited (0) 13 seconds ago             c3
[root@elk93 ~]# 
[root@elk93 ~]# 
[root@elk93 ~]# docker start c3 
c3
[root@elk93 ~]# 
[root@elk93 ~]# docker ps -a
CONTAINER ID   IMAGE                                                       COMMAND                  CREATED          STATUS        PORTS     NAMES
fe2025dda0cd   registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1   "/docker-entrypoint.…"   28 seconds ago   Up 1 second   80/tcp    c3
[root@elk93 ~]# 

9. 重启容器

[root@elk93 ~]# docker ps -a
CONTAINER ID   IMAGE                                                       COMMAND                  CREATED          STATUS          PORTS     NAMES
fe2025dda0cd   registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1   "/docker-entrypoint.…"   46 seconds ago   Up 19 seconds   80/tcp    c3
[root@elk93 ~]# 
[root@elk93 ~]# docker restart c3 
c3
[root@elk93 ~]# 
[root@elk93 ~]# docker ps -a
CONTAINER ID   IMAGE                                                       COMMAND                  CREATED          STATUS        PORTS     NAMES
fe2025dda0cd   registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1   "/docker-entrypoint.…"   54 seconds ago   Up 1 second   80/tcp    c3
[root@elk93 ~]# 

10. 删除容器

[root@elk93 ~]# docker ps  -a
CONTAINER ID   IMAGE                                                       COMMAND                  CREATED          STATUS                     PORTS     NAMES
0f4b8ecc47fb   registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1   "/docker-entrypoint.…"   3 seconds ago    Up 2 seconds               80/tcp    c2
9b9fbe9a1a54   registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1   "/docker-entrypoint.…"   11 seconds ago   Created                              c3
2846f7d526c7   registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1   "/docker-entrypoint.…"   38 minutes ago   Exited (0) 6 minutes ago             c1
[root@elk93 ~]# 
[root@elk93 ~]# docker container rm -f c1 c2 c3 
c1
c2
c3
[root@elk93 ~]# 
[root@elk93 ~]# docker ps  -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@elk93 ~]# 

查看容器的详细信息

1. 查看容器的所有信息

[root@elk93 ~]# docker inspect c3 
[
    {
        "Id": "fe2025dda0cddc4b81edae9618018dc932bc9bb48725bc921068039b6db82bb8",  # 容器的ID
        "Created": "2025-03-19T08:33:55.629687118Z",  # 容器的创建时间
        ...
        "State": {  # 容器的运行状态
            ...
            "Pid": 260929,  # 容器在宿主机的进程ID
            ...
        },
        ...
        "Name": "/c3",  # 容器的名称
        ...
        },
        "NetworkSettings": {
            "...
            "Gateway": "172.17.0.1",  # 容器的网关地址
            ..
            "IPAddress": "172.17.0.2",  # 容器的IP地址
            ...
            "Networks": {
                "bridge": {
                    ...,
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.2",
                    ...
                }
            }
        }
    }
]
[root@elk93 ~]# 

2. 查看的进程 ID

[root@elk93 ~]# docker inspect -f '{{.State.Pid}}' c3 
260929
[root@elk93 ~]# 

3. 查看容器的 IP 地址

[root@elk93 ~]# docker inspect -f '{{.NetworkSettings.IPAddress}}' c3 
172.17.0.2
[root@elk93 ~]# 
[root@elk93 ~]# docker inspect -f '{{.NetworkSettings.IPAddress}}' c3 
172.17.0.2
[root@elk93 ~]# 

4. 查看最新创建容器的 IP 地址【彩蛋】

[root@elk93 ~]#docker inspect -f '{{.NetworkSettings.IPAddress}}' `docker ps -l | awk 'NR==2{print $NF}'`
172.17.0.2
[root@elk93 ~]# 
[root@elk93 ~]# docker inspect -f '{{.NetworkSettings.IPAddress}}' `docker ps -lq`  # 推荐
172.17.0.2
[root@elk93 ~]# 

查看容器的日志信息

1. 启动容器

[root@elk93 ~]# docker run -d --name myweb -p 90:80 registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1 
e62f820d18b257d7ec67e0d9da8625a5d603b40f3e1a929527f5c88c21904b76
[root@elk93 ~]# 
[root@elk93 ~]# docker container inspect -f "{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}" `docker container ps -lq`
172.17.0.3
[root@elk93 ~]# 
[root@elk93 ~]# docker ps -l
CONTAINER ID   IMAGE                                                       COMMAND                  CREATED          STATUS          PORTS                               NAMES
e62f820d18b2   registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1   "/docker-entrypoint.…"   22 seconds ago   Up 22 seconds   0.0.0.0:90->80/tcp, :::90->80/tcp   myweb
[root@elk93 ~]# 

2. 本地访问测试

[root@elk93 ~]# curl 172.17.0.3
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8"/>
    <title>yinzhengjie apps v1</title>
    <style>
       div img {
          width: 900px;
          height: 600px;
          margin: 0;
       }
    </style>
  </head>

  <body>
    <h1 style="color: green">凡人修仙传 v1 </h1>
    <div>
      <img src="1.jpg">
    <div>
  </body>

</html>
[root@elk93 ~]# 

3. 在其他节点访问测试

[root@elk91 ~]# curl 10.0.0.93:90
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8"/>
    <title>yinzhengjie apps v1</title>
    <style>
       div img {
          width: 900px;
          height: 600px;
          margin: 0;
       }
    </style>
  </head>

  <body>
    <h1 style="color: green">凡人修仙传 v1 </h1>
    <div>
      <img src="1.jpg">
    <div>
  </body>

</html>
[root@elk91 ~]# curl 10.0.0.93:90/haoshuaicongedu.html
<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx/1.20.1</center>
</body>
</html>
[root@elk91 ~]# 

3. 实时查看容器的日志信息

[root@elk93 ~]# docker logs -f myweb 
...
172.17.0.1 - - [19/Mar/2025:09:03:44 +0000] "GET / HTTP/1.1" 200 357 "-" "curl/7.81.0" "-"
10.0.0.91 - - [19/Mar/2025:09:04:41 +0000] "GET / HTTP/1.1" 200 357 "-" "curl/7.81.0" "-"
2025/03/19 09:04:58 [error] 33#33: *3 open() "/usr/share/nginx/html/haoshuaicongedu.html" failed (2: No such file or directory), client: 10.0.0.91, server: localhost, request: "GET /haoshuaicongedu.html HTTP/1.1", host: "10.0.0.93:90"
10.0.0.91 - - [19/Mar/2025:09:04:58 +0000] "GET /haoshuaicongedu.html HTTP/1.1" 404 153 "-" "curl/7.81.0" "-"

4. 查看容器 20 分钟内的日志

[root@elk93 ~]# docker logs -f --since 20m myweb 

5. 查看 5 分钟之前的数据

[root@elk93 ~]# docker logs -f --until 5m myweb 

EFK 架构采集 docker 日志

1. 编写 Filebeat 配置文件

[root@elk93 filebeat]# cat 19-docker-to-es-tls.yaml 
filebeat.inputs:
- type: container
  paths: 
    - '/var/lib/docker/containers/*/*.log'

# 添加处理器
processors:
    # 添加Docker的元数据信息,包括但不限于"Container ID","Name","Image","Labels"
  - add_docker_metadata:
      host: "unix:///var/run/docker.sock"

output.elasticsearch:
  hosts:
  - https://10.0.0.91:9200
  - https://10.0.0.92:9200
  - https://10.0.0.93:9200
  api_key: "m1wPlJUBrDbi_DeiIc-1:RcEw7Mk2QQKH_CGhMBnfbg"
  index: haoshuaicongedu-haoshauicong-es-apikey-tls-2025-docker
  # 配置es集群的tls,此处跳过证书校验。默认值为: full
  # 参考链接:
  #     https://www.elastic.co/guide/en/beats/filebeat/7.17/configuration-ssl.html#client-verification-mode
  ssl.verification_mode: none

setup.ilm.enabled: false
setup.template.name: "haoshuaicongedu-haoshauicong"
setup.template.pattern: "haoshuaicongedu-haoshauicong-*"
setup.template.overwrite: true
setup.template.settings:
  index.number_of_shards: 3
  index.number_of_replicas: 0

[root@elk93 filebeat]# 

2. 启动 Filebeat 实例

[root@elk93 filebeat]# filebeat -e -c `pwd`/19-docker-to-es-tls.yaml 

3. kibana 查看数据

基于 docker 部署 wordpress

1. 部署 MySQL 数据库

1.1 下载镜像
[root@elk92 ~]# docker pull mysql:8.0.36-oracle
8.0.36-oracle: Pulling from library/mysql
Digest: sha256:a532724022429812ec797c285c1b540a644c15e248579c6bfdf12a8fbaab4964
Status: Image is up to date for mysql:8.0.36-oracle
docker.io/library/mysql:8.0.36-oracle
[root@elk92 ~]# 

svip:
[root@elk92 ~]# wget http://192.168.16.253/Resources/Docker/images/WordPress/haoshuaicongedu-mysql-v8.0.36-oracle.tar.gz
[root@elk92 ~]# docker load -i haoshuaicongedu-mysql-v8.0.36-oracle.tar.gz 
1.2 运行 MySQL 数据库
[root@elk92 ~]# docker run -p 3306:3306 -d --name mysql-server -e MYSQL_DATABASE=wordpress -e MYSQL_USER=haoshuaicong -e MYSQL_PASSWORD=haoshuaicong -e MYSQL_ALLOW_EMPTY_PASSWORD="yes" mysql:8.0.36-oracle --character-set-server=utf8 --collation-server=utf8_bin --default-authentication-plugin=mysql_native_password
3486517bdce4e2fc72d4dabcb8767b0c554aa5313dd53a9c043cda4f7d49a75f
[root@elk92 ~]# 
[root@elk92 ~]# docker ps -l
CONTAINER ID   IMAGE                 COMMAND                  CREATED         STATUS         PORTS                                                  NAMES
3486517bdce4   mysql:8.0.36-oracle   "docker-entrypoint.s…"   3 seconds ago   Up 2 seconds   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   mysql-server
[root@elk92 ~]# 
1.3 查看容器的信息
[root@elk92 ~]# docker exec -it mysql-server mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.36 MySQL Community Server - GPL

Copyright (c) 2000, 2024, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| wordpress          |
+--------------------+
5 rows in set (0.00 sec)

mysql> 
mysql> SELECT user,host,plugin FROM mysql.user;
+------------------+-----------+-----------------------+
| user             | host      | plugin                |
+------------------+-----------+-----------------------+
| haoshauicong          | %         | mysql_native_password |
| root             | %         | mysql_native_password |
| mysql.infoschema | localhost | caching_sha2_password |
| mysql.session    | localhost | caching_sha2_password |
| mysql.sys        | localhost | caching_sha2_password |
| root             | localhost | mysql_native_password |
+------------------+-----------+-----------------------+
6 rows in set (0.00 sec)

mysql> 
mysql> SHOW GRANTS FOR haoshauicong;
+--------------------------------------------------------+
| Grants for haoshauicong@%                              |
+--------------------------------------------------------+
| GRANT USAGE ON *.* TO `haoshauicong`@`%`               |
| GRANT ALL PRIVILEGES ON `wordpress`.* TO `haoshauicong`@`%` |
+--------------------------------------------------------+
2 rows in set (0.00 sec)

mysql> 

2. 部署 WordPress

2.1 下载镜像
[root@elk93 ~]# docker pull wordpress:6.7.1-php8.1-apache

SVIP :
[root@elk93 ~]# wget http://192.168.16.253/Resources/Docker/images/WordPress/haoshuaicongedu-wordpress-v6.7.1-php8.1-apache.tar.gz
[root@elk93 ~]# docker load -i haoshuaicongedu-wordpress-v6.7.1-php8.1-apache.tar.gz 
2.2 运行 WordPress
[root@elk93 ~]# docker run -d --name wp -p 80:80 -e WORDPRESS_DB_HOST=10.0.0.92 -e WORDPRESS_DB_USER=haoshauicong -e WORDPRESS_DB_PASSWORD=haoshuaicongedu -e WORDPRESS_DB_NAME=wordpress wordpress:6.7.1-php8.1-apache
8531c43a6a2d4b282f3f3a41ab7024aee1a1bbb6db72b2e79f5c5ce48dbf095a
[root@elk93 ~]# 
[root@elk93 ~]# docker ps -l
CONTAINER ID   IMAGE                           COMMAND                  CREATED         STATUS         PORTS                               NAMES
8531c43a6a2d   wordpress:6.7.1-php8.1-apache   "docker-entrypoint.s…"   4 seconds ago   Up 4 seconds   0.0.0.0:80->80/tcp, :::80->80/tcp   wp
[root@elk93 ~]# 
2.3 访问 wordpress 的 WebUI
http://10.0.0.93/wp-admin/install.php

3. 发布文章测试

docker基础命令总结* * * * *💋

镜像管理

# 从仓库拉取镜像到本地
docker image pull     ----> docker pull 

# 列出本地所有镜像(含镜像ID、仓库名、标签等信息)
docker image ls         ----> docker images 

# 为镜像添加新标签(常用于版本管理和私有仓库推送)
docker image tag        ----> docker tag

# 删除本地镜像(需先停止关联容器)
docker image rm         ----> docker rmi

# 加载本地镜像包(导入镜像)
docker image load     ---> docker load 

# 将镜像保存为 .tar 文件(支持压缩)(导出镜像)
docker image save     ---> docker save 

容器管理

# 查看运行中的容器(加 -a 显示所有容器)
docker container ls|ps  ---> docker ps 

# 删除已停止的容器(加 -f 强制删除运行中的容器)
docker container rm        ---> docker rm 

# 创建容器但不启动(需后续手动启动)
docker container create     --->docker create 

# 启停容器
docker container start     ----> docker start 
docker container stop        ----> docker stop 
docker container restart     ----> docker restart

# 暂停/恢复容器进程(不释放资源)
docker container pause    ----> docker pause 
docker container unpause    ---> docker unpause

# 创建并启动容器(常用参数:-d 后台运行,-p 端口映射)
docker container run         ---> docker run

# 查看容器日志(加 -f 实时跟踪,--tail 显示末尾行数)
docker container logs        ---> docker logs  

# 查看容器20分钟内的日志
docker logs -f --since 20m myweb 

# 查看5分钟之前的数据 
docker logs -f --until 5m myweb 


# 查看容器详细信息
docker container inspect  ---> docker inspect
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇