【Linux运维大神系列】Docker详解(一)

目录

运维的四个时代

Docker架构简述

Docker的安装

1)基于包的安装(CentOS7)

2)基于二进制的安装

卸载二进制的docker环境

基于脚本安装二进制的Docker

镜像的管理命令

1.查看本地镜像仓库列表

2.从远程仓库下载镜像

3.启动容器

4.查看正在运行的容器

5.运行容器时,如果本地没有镜像,则会去远程仓库拉取

6.关闭正在运行的容器

docker映射原理

1.初始环境

2.创建两个容器

3.再次查看网卡信息

4.查看容器的IP地址编号

5.查看docker0网桥设备桥接的虚拟网卡

6.通过iptables查看地址转换

7.测试转发的内核参数

可能会遇到的错误

容器的查看和删除

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

2.查看所有容器列表

3.查看所有容器的ID

4.删除未运行的容器

5.删除正在运行的容器

6.删除所有的容器

在正在运行的容器中执行命令

1.查看ip地址

2.连接到容器使用shell环境

3.连接容器执行命令式要注意确保该容器有此命令

docker镜像本地迁移及打标签

1.下载镜像

2.导入镜像

3.测试运行

4.镜像导出

5.批量导出镜像

6.导入镜像的两种方式

7.删除镜像

8.给镜像打标签

docker容器的常用命令

1.修改容器的名称

2.实时查看日志

3.查看最近一个容器信息

4.宿主机和容器之间拷贝数据

4.1将容器的文件拷贝到宿主机

4.2将宿主机的文件拷贝到容器中

容器传递环境变量

docker部署常用服务

1)部署tomcat访问zrlog

第一步:创建容器

第二步:下载zrlog的war包

第三步:将宿主机的war包推到tomcat容器的webapps目录下

第四步:进入tomcat容器,将war包改名为ROOT.war

第五步:测试访问

2)部署Mysql

第一步:下载镜像

第二步:导入镜像

第三步:启动MySQL

第四步:查看容器

第五步:部署数据库指定数据库和用户

第六步:验证测试

扩展:批量启动20个数据库实例

3)部署wordpress服务

第一步:导入wordpress的镜像

第二步:启动数据库

第三步:部署wordpress

运维的四个时代

  • 传统运维部署存在的痛点有哪些?

  • 1.资源利用率的问题;

  • 2.资源管理不方便,环境依赖存在问题;

  • 虚拟化时代: 2015之前

  • 1.虚拟机,将一台服务器虚拟机出多台效果;

典型代表:

  • VMware Workstation Pro : 个人使用

  • Vmware Esxi : 企业

  • KVM:

https://www.cnblogs.com/yinzhengjie/tag/KVM/

  • openstack:

  • 优点:

  • 传统架构的资源隔离问题解决了;

  • 支持快照,克隆,热加载CPU,内存,磁盘;

  • 缺点:

  • 虚拟机之间迁移存在兼容性问题。

  • 启动速度慢,虚拟机模拟了物理机的启动流程;

  • 部署服务并没有简化,还是需要手动部署,

  • 容器时代:

以docker为首的容器管理工具。开源时间是2013年,但是容器技术从2007年就开始研发了。

  • 优点:

  • 轻量级,部署服务方便快捷,可以达到秒级启动服务,省去了开机启动流程。

  • 迁移方便;

  • 缺点:

  • 跨主机编排存在短板。

  • 云原生时代: 2018+

底层以容器技术(docker)为主,进行跨主机编排。2014年开源了Kubernetes集群。

Docker架构简述

docker

客户端

dockerd

服务端

image:

镜像,类似于虚拟机的"模板机",一般不修改

container:

容器,类似于基于"模板机"克隆的虚拟机

registry:

镜像仓库,可以理解为一个开源的"模板机"的仓库地址

比如docker官方的镜像仓库"hub.docker.com",类似于的还有阿里云,华为云,腾讯云等都有自己的镜像仓库。

Docker的安装

1)基于包的安装(CentOS7)

第一步:如果你之前安装过 docker,请先删掉

bash 复制代码
yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

第二步:安装依赖,下载 repo 文件,并把软件仓库地址替换为镜像站:

bash 复制代码
yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sed -i 's+https://download.docker.com+https://mirrors4.tuna.tsinghua.edu.cn/docker-ce+' /etc/yum.repos.d/docker-ce.repo

第三步:安装docker

bash 复制代码
yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

第四步:启动docker服务

bash 复制代码
systemctl enable --now docker

官方操作手册:https://docs.docker.com/engine/install/centos/

2)基于二进制的安装

第一步:下载软件包

bash 复制代码
[root@docker101 ~]#wget https://download.docker.com/linux/static/stable/x86_64/docker-27.0.3.tgz
如果下载不了,复制链接,在浏览器下载后传到虚拟机

第二步:解压软件包

bash 复制代码
[root@docker101 ~]#tar xf docker-27.0.3.tgz 

第三步:拷贝到PATH变量

bash 复制代码
[root@docker101 ~]#cp docker/* /usr/bin/

第四步:启动docker服务

bash 复制代码
[root@docker101 ~]#dockerd &    #放入后台运行

第五步:查看docker的版本号

bash 复制代码
[root@docker101 ~]#docker version
Client:
 Version:           27.0.3
 API version:       1.46
 Go version:        go1.21.11
 Git commit:        7d4bcd8
 Built:             Sat Jun 29 00:01:25 2024
 OS/Arch:           linux/amd64
 Context:           default

Server: Docker Engine - Community
 Engine:
  Version:          27.0.3
  API version:      1.46 (minimum version 1.24)
  Go version:       go1.21.11
  Git commit:       662f78c
  Built:            Sat Jun 29 00:03:05 2024
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          v1.7.18
  GitCommit:        ae71819c4f5e67bb4d5ae76a6b735f29cc25774e
 runc:
  Version:          1.1.13
  GitCommit:        v1.1.13-0-g58aa920
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

卸载二进制的docker环境

第一步:停止docker服务

bash 复制代码
[root@docker101 /joren/softwares]#ps aux | grep docker    #查找docker进程
root      17245  1.3  0.8 2175248 35132 pts/2   Sl   21:25   0:00 dockerd
root      17252  0.6  0.4 1266692 19996 ?       Ssl  21:25   0:00 containerd --config /var/run/docker/containerd/containerd.toml
root      17464  0.0  0.0 112808   964 pts/2    S+   21:25   0:00 grep --color=auto docker
[root@docker101 /joren/softwares]#pkill dockerd    #关掉docker进程
INFO[2025-12-06T21:25:34.215985498+08:00] Processing signal 'terminated'               
[root@docker101 /joren/softwares]#INFO[2025-12-06T21:25:34.217992787+08:00] stopping event stream following graceful shutdown  error="<nil>" module=libcontainerd namespace=moby
INFO[2025-12-06T21:25:34.218128801+08:00] Daemon shutdown complete                     
INFO[2025-12-06T21:25:34.218172714+08:00] stopping event stream following graceful shutdown  error="context canceled" module=libcontainerd namespace=plugins.moby
INFO[2025-12-06T21:25:34.218189585+08:00] stopping healthcheck following graceful shutdown  module=libcontainerd

[1]+  Done                    dockerd

第二步:卸载docker相关程序

bash 复制代码
[root@docker101 ~]#for i in `ls docker`;do rm -f /usr/bin/$i ;done

第三步:验证是否卸载

bash 复制代码
[root@docker101 ~]#dockerd
-bash: /usr/bin/dockerd: No such file or directory

基于脚本安装二进制的Docker

第一步:下载安装包,传到虚拟机

安装包地址

第二步:解压软件包

bash 复制代码
[root@docker101 ~]#tar xf joren-docker-docker-compose.tar.gz 

第三步:安装docker

bash 复制代码
[root@docker101 ~]#./install-docker.sh i    #输入i安装、r卸载
bash-completion-2.1-8.el7.noarch
bash-completion-extras-2.1-11.el7.noarch
'/usr/bin/containerd' -> '/joren/softwares/docker/containerd'
'/usr/bin/containerd-shim-runc-v2' -> '/joren/softwares/docker/containerd-shim-runc-v2'
'/usr/bin/ctr' -> '/joren/softwares/docker/ctr'
'/usr/bin/docker' -> '/joren/softwares/docker/docker'
'/usr/bin/docker-compose' -> '/joren/softwares/docker/docker-compose'
'/usr/bin/dockerd' -> '/joren/softwares/docker/dockerd'
'/usr/bin/docker-init' -> '/joren/softwares/docker/docker-init'
'/usr/bin/docker-proxy' -> '/joren/softwares/docker/docker-proxy'
'/usr/bin/runc' -> '/joren/softwares/docker/runc'
Client:
 Version:           27.0.3
 API version:       1.46
 Go version:        go1.21.11
 Git commit:        7d4bcd8
 Built:             Sat Jun 29 00:01:25 2024
 OS/Arch:           linux/amd64
 Context:           default

Server: Docker Engine - Community
 Engine:
  Version:          27.0.3
  API version:      1.46 (minimum version 1.24)
  Go version:       go1.21.11
  Git commit:       662f78c
  Built:            Sat Jun 29 00:03:05 2024
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          v1.7.18
  GitCommit:        ae71819c4f5e67bb4d5ae76a6b735f29cc25774e
 runc:
  Version:          1.1.13
  GitCommit:        v1.1.13-0-g58aa920
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0
Docker Compose version v2.23.0
安装成功,欢迎使用二进制docker安装脚本,欢迎下次使用!

脚本文件内容详解:

bash 复制代码
[root@docker101 ~]#cat install-docker.sh 
#!/bin/bash
# 加载操作系统的变量,主要是ID变量。
. /etc/os-release

DOCKER_VERSION=27.0.3
# DOCKER_COMPOSE_VERSION=2.27.0
DOCKER_COMPOSE_VERSION=2.23.0
FILENAME=docker-${DOCKER_VERSION}.tgz
DOCKER_COMPOSE_FILE=docker-compose-v${DOCKER_COMPOSE_VERSION}
URL=https://download.docker.com/linux/static/stable/x86_64
DOCKER_COMPOSE_URL=https://github.com/docker/compose/releases/download/v${DOCKER_COMPOSE_VERSION}/docker-compose-linux-x86_64
DOWNLOAD=./download
BASE_DIR=/joren/softwares
OS_VERSION=$ID


# 判断是否下载了docker-compose
function prepare(){
   # 判断是否下载docker-compose文件
   if [ ! -f ${DOWNLOAD}/${DOCKER_COMPOSE_FILE} ]; then
      wget -T 3  -t 2 ${DOCKER_COMPOSE_URL} -O ${DOWNLOAD}/${DOCKER_COMPOSE_FILE}
   fi
   
   if [ $? != 0 ];then
     rm -f ${DOWNLOAD}/${DOCKER_COMPOSE_FILE}
     echo "不好意思,由于网络波动原因,无法下载${DOCKER_COMPOSE_URL}软件包,程序已退出!请稍后再试......"
     exit 100
   fi

   # 给脚本添加执行权限
   chmod +x ${DOWNLOAD}/${DOCKER_COMPOSE_FILE}
}

# 定义安装函数
function InstallDocker(){

	if [ $OS_VERSION == "centos" ];then
	  [ -f /usr/bin/wget ] || yum -y install wget
          rpm -qa |grep bash-completion || yum -y install bash-completion
	fi

	if [ $OS_VERSION == "ubuntu" ];then
	  [ -f /usr/bin/wget ] || apt -y install wget
	fi

    # 判断文件是否存在,若不存在则下载软件包
    if [ ! -f ${DOWNLOAD}/${FILENAME} ]; then
       wget ${URL}/${FILENAME} -O ${DOWNLOAD}/${FILENAME}
    fi
    
    # 判断安装路径是否存在
    if [ ! -d ${BASE_DIR} ]; then
      install -d ${BASE_DIR}
    fi
    
    # 解压软件包到安装目录
    tar xf ${DOWNLOAD}/${FILENAME} -C ${BASE_DIR}
 
    # 安装docker-compose
    prepare
    cp $DOWNLOAD/${DOCKER_COMPOSE_FILE} ${BASE_DIR}/docker/docker-compose
   
    # 创建软连接
    ln -svf ${BASE_DIR}/docker/* /usr/bin/
    
    # 自动补全功能
    cp $DOWNLOAD/docker /usr/share/bash-completion/completions/docker
    source /usr/share/bash-completion/completions/docker
    
    # 配置镜像加速
    install -d /etc/docker
    cp $DOWNLOAD/daemon.json /etc/docker/daemon.json
    
    # 开机自启动脚本
    cp download/docker.service /usr/lib/systemd/system/docker.service
    systemctl daemon-reload
    systemctl enable --now docker
    docker version
    docker-compose version
    tput setaf 3
    echo "安装成功,欢迎使用二进制docker安装脚本,欢迎下次使用!"
    tput setaf 2
}


# 卸载docker
function UninstallDocker(){
  # 停止docker服务
  systemctl disable --now docker

  # 卸载启动脚本
  rm -f /usr/lib/systemd/system/docker.service

  # 清空程序目录
  rm -rf ${BASE_DIR}/docker

  # 清空数据目录
  rm -rf /var/lib/{docker,containerd} 

  # 清除符号链接
  rm -f /usr/bin/{containerd,containerd-shim,containerd-shim-runc-v2,ctr,docker,dockerd,docker-init,docker-proxy,runc}

  # 使得终端变粉色
  tput setaf 5
  echo "卸载成功,欢迎再次使用二进制docker安装脚本哟~"
  tput setaf 7
}


# 程序的入口函数
function main(){
   # 判断传递的参数
   case $1 in
     install|i)
      InstallDocker
      ;;
      remove|r)
      UninstallDocker
      ;;
     *)
       echo "Invalid parameter, Usage: $0 install|remove"
       ;;
   esac
}

# 向入口函数传参
main $1 

镜像的管理命令

1.查看本地镜像仓库列表

bash 复制代码
[root@docker101 ~]#docker image ls
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE

2.从远程仓库下载镜像

bash 复制代码
[root@docker101 ~]#docker pull registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1
v1: Pulling from yinzhengjie-k8s/apps
5758d4e389a3: Pull complete 
51d66f629021: Pull complete 
ff9c6add3f30: Pull complete 
dcc43d9a97b4: Pull complete 
5dcfac0f2f9c: 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@docker101 ~]#docker image ls
REPOSITORY                                               TAG       IMAGE ID       CREATED         SIZE
registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps   v1        f28fd43be4ad   22 months ago   23MB

REPOSITORY:    #代表从那个仓库
TAG:	        #一般代表版本
IMAGE ID:	    #镜像的唯一标识
CREATED:	    #镜像创建时间
SIZE:	        #大小

3.启动容器

bash 复制代码
[root@docker101 ~]#docker run -d -p 88:80 registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1
6d61da0c8694ff57a9a85f45e1e25ddefebe0762b294a5607ef6c3f96276487f

相关参数说明:
    -d:   
        代表后台运行容器
    -p:    
        指定端口映射"宿主机端口:容器端口"

访问测试:
10.0.0.101:88

4.查看正在运行的容器

bash 复制代码
第一种:
[root@docker101 ~]#docker container ls
CONTAINER ID   IMAGE                                                       COMMAND                  CREATED         STATUS         PORTS                               NAMES
6d61da0c8694   registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1   "/docker-entrypoint...."   3 minutes ago   Up 3 minutes   0.0.0.0:88->80/tcp, :::88->80/tcp   sweet_dijkstra

第二种:
[root@docker101 ~]#docker ps
CONTAINER ID   IMAGE                                                       COMMAND                  CREATED         STATUS         PORTS                               NAMES
6d61da0c8694   registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1   "/docker-entrypoint...."   3 minutes ago   Up 3 minutes   0.0.0.0:88->80/tcp, :::88->80/tcp   sweet_dijkstra


相关字段说明:
    CONTAINER ID
        容器的ID,容器的唯一标识,不可修改。
         
    IMAGE:
        容器基于哪个镜像启动。
         
    COMMAND:
        容器启动时,运行哪些服务。
         
    CREATED:
        容器的创建时间。
         
    STATUS:
        容器的状态。
         
    PORTS:
        容器端口映射。
         
    NAMES:
        容器的名称,创建容器时可以指定名称,也可以后期修改容器名称,但是每个容器的名称必须唯一

5.运行容器时,如果本地没有镜像,则会去远程仓库拉取

bash 复制代码
[root@docker101 ~]#docker run -d -p 99:80 registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v2
Unable to find image 'registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v2' locally
v2: Pulling from yinzhengjie-k8s/apps
5758d4e389a3: Already exists 
51d66f629021: Already exists 
ff9c6add3f30: Already exists 
dcc43d9a97b4: Already exists 
5dcfac0f2f9c: Already exists 
2c6e86e57dfd: Already exists 
b07c4abce9eb: Pull complete 
Digest: sha256:3ac38ee6161e11f2341eda32be95dcc6746f587880f923d2d24a54c3a525227e
Status: Downloaded newer image for registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v2
3d53a37c7a7e157e66297483128e4e7e8a26a942f3bbed721b7560527b4ce15f

#查看
[root@docker101 ~]#docker ps
CONTAINER ID   IMAGE                                                       COMMAND                  CREATED          STATUS          PORTS                               NAMES
15b7faa50b3e   registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v2   "/docker-entrypoint...."   21 seconds ago   Up 21 seconds   0.0.0.0:99->80/tcp, :::99->80/tcp   exciting_lehmann
6d61da0c8694   registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1   "/docker-entrypoint...."   6 minutes ago    Up 6 minutes    0.0.0.0:88->80/tcp, :::88->80/tcp   sweet_dijkstra


访问测试:
10.0.0.101:88
10.0.0.101:99

6.关闭正在运行的容器

bash 复制代码
#查看容器ID
[root@docker101 ~]#docker ps
CONTAINER ID   IMAGE                                                       COMMAND                  CR      STATUS          PORTS                               NAMES
15b7faa50b3e   registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v2   "/docker-entrypoint...."   21ago   Up 21 seconds   0.0.0.0:99->80/tcp, :::99->80/tcp   exciting_lehmann
6d61da0c8694   registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1   "/docker-entrypoint...."   6 go    Up 6 minutes    0.0.0.0:88->80/tcp, :::88->80/tcp   sweet_dijkstra

#停止开启的容器
[root@docker101 ~]#docker stop 15b7faa50b3e

#查看
15b7faa50b3e
[root@docker101 ~]#docker ps
CONTAINER ID   IMAGE                                                       COMMAND                  CREATED         STATUS         PORTS                               NAMES
6d61da0c8694   registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1   "/docker-entrypoint...."   7 minutes ago   Up 7 minutes   0.0.0.0:88->80/tcp, :::88->80/tcp   sweet_dijkstra

总结

bash 复制代码
1.使用docker run命令时,若本地有镜像,则可以直接启动容器;
2.若本地没有镜像时,会自动去远程仓库拉取镜像,如果远程仓库中没有改镜像,则拉取失败;

docker映射原理

1.初始环境

bash 复制代码
[root@docker101 ~]#ifconfig
docker0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
        inet6 fe80::42:18ff:fe21:94e8  prefixlen 64  scopeid 0x20<link>
        ether 02:42:18:21:94:e8  txqueuelen 0  (Ethernet)
        RX packets 139  bytes 695422 (679.1 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 333  bytes 23236 (22.6 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.0.101  netmask 255.255.255.0  broadcast 10.0.0.255
        inet6 fe80::20c:29ff:fe07:8b24  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:07:8b:24  txqueuelen 1000  (Ethernet)
        RX packets 193546  bytes 183429853 (174.9 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 149100  bytes 307240821 (293.0 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 591758  bytes 3797980480 (3.5 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 591758  bytes 3797980480 (3.5 GiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

2.创建两个容器

bash 复制代码
[root@docker101 ~]#docker run -d -p 81:80 --name c1 registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1
4e5dabfb5c497406e867f6874840a0bee119aae463faaa52f32f5099af5de81d
[root@docker101 ~]#docker run -d -p 82:80 --name c2 registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v2
e7609571fc46ad6f98894be834a9fc647b2ceaf60be89f86e5c787c494adde13

[root@docker101 ~]#docker ps
CONTAINER ID   IMAGE                                                       COMMAND                  CREATED          STATUS          PORTS                               NAMES
e7609571fc46   registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v2   "/docker-entrypoint...."   7 seconds ago    Up 7 seconds    0.0.0.0:82->80/tcp, :::82->80/tcp   c2
4e5dabfb5c49   registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1   "/docker-entrypoint...."   18 seconds ago   Up 18 seconds   0.0.0.0:81->80/tcp, :::81->80/tcp   c1

参数选项:
    --name
        指定容器的名称

3.再次查看网卡信息

bash 复制代码
[root@docker101 ~]#ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default 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
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:07:8b:24 brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.101/24 brd 10.0.0.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe07:8b24/64 scope link 
       valid_lft forever preferred_lft forever
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:18:21:94:e8 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:18ff:fe21:94e8/64 scope link 
       valid_lft forever preferred_lft forever
22: veth683194f@if21: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default 
    link/ether 2e:5d:99:31:a0:73 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet6 fe80::2c5d:99ff:fe31:a073/64 scope link 
       valid_lft forever preferred_lft forever
24: veth4a80a32@if23: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default 
    link/ether 0e:03:1e:de:ba:c1 brd ff:ff:ff:ff:ff:ff link-netnsid 1
    inet6 fe80::c03:1eff:fede:bac1/64 scope link 
       valid_lft forever preferred_lft forever

4.查看容器的IP地址编号

bash 复制代码
[root@docker101 ~]#docker exec c1 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
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
21: eth0@if22: <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@docker101 ~]#docker exec c2 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
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
23: eth0@if24: <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

#使用-it可以进入容器
[root@docker101 ~]#docker exec -it c1 sh
/ # ping 172.17.0.3
PING 172.17.0.3 (172.17.0.3): 56 data bytes
64 bytes from 172.17.0.3: seq=0 ttl=64 time=0.198 ms
64 bytes from 172.17.0.3: seq=1 ttl=64 time=0.073 ms

5.查看docker0网桥设备桥接的虚拟网卡

bash 复制代码
[root@docker101 ~]#yum install bridge-utils -y

#查看docker0桥接的虚拟网卡
[root@docker101 ~]#brctl show docker0
bridge name	bridge id		STP enabled	interfaces
docker0		8000.0242182194e8	no		veth4a80a32
							            veth683194f

6.通过iptables查看地址转换

bash 复制代码
[root@docker101 ~]#iptables -t nat -vnL
Chain PREROUTING (policy ACCEPT 23 packets, 1538 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    3   156 DOCKER     all  --  *      *       0.0.0.0/0            0.0.0.0/0            ADDRTYPE match dst-type LOCAL

Chain INPUT (policy ACCEPT 3 packets, 510 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 103 packets, 6188 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 DOCKER     all  --  *      *       0.0.0.0/0           !127.0.0.0/8          ADDRTYPE match dst-type LOCAL

Chain POSTROUTING (policy ACCEPT 103 packets, 6188 bytes)
 pkts bytes target     prot opt in     out     source               destination         
   17   890 MASQUERADE  all  --  *      !docker0  172.17.0.0/16        0.0.0.0/0           
    0     0 MASQUERADE  tcp  --  *      *       172.17.0.2           172.17.0.2           tcp dpt:80
    0     0 MASQUERADE  tcp  --  *      *       172.17.0.3           172.17.0.3           tcp dpt:80

Chain DOCKER (2 references)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 RETURN     all  --  docker0 *       0.0.0.0/0            0.0.0.0/0           
    0     0 DNAT       tcp  --  !docker0 *       0.0.0.0/0            0.0.0.0/0            tcp dpt:81 to:172.17.0.2:80
    0     0 DNAT       tcp  --  !docker0 *       0.0.0.0/0            0.0.0.0/0            tcp dpt:82 to:172.17.0.3:80

7.测试转发的内核参数

bash 复制代码
[root@docker101 ~]#sysctl -q net.ipv4.ip_forward
net.ipv4.ip_forward = 0

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

注意:
    1.当"net.ipv4.ip_forward"为0时,容器无法访问外网,就是docker0的数据报文不能转发给宿主机ens33网卡。
    2.当"net.ipv4.ip_forward"为0时,并不会影响到同节点容器实现数据的传输;

可能会遇到的错误

bash 复制代码
1.docker: Error response from daemon: driver failed programming external connectivity on endpoint c3 (8aa51c345446d079f6a5fdc81fcf0928b88a5ea5ff50d3b8035fc65c45b0026c): Bind for 0.0.0.0:81 failed: port is already allocated.
错误原因:
    宿主机端口被占用。
 
解决方案:
    更换宿主机端口映射。
 
2.docker: Error response from daemon: Conflict. The container name "/c3" is already in use by container "7048c1c0792cb4d66855d6ba3db4f2d2ae2706e2650d661a0f9372ebe30b1e52". You have to remove (or rename) that container to be able to reuse that name.See 'docker run --help'.
错误原因:   
    容器名称重复。
     
解决方案:
    更新容器的名称。
 
 
3.WARNING: IPv4 forwarding is disabled. Networking will not work.
错误原因:
    未启用内核转发功能。
     
解决方案:
    sysctl -w net.ipv4.ip_forward=1

容器的查看和删除

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

bash 复制代码
[root@docker101 ~]#docker ps
CONTAINER ID   IMAGE                                                       COMMAND                  CREATED          STATUS          PORTS                               NAMES
e7609571fc46   registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v2   "/docker-entrypoint...."   33 minutes ago   Up 33 minutes   0.0.0.0:82->80/tcp, :::82->80/tcp   c2
4e5dabfb5c49   registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1   "/docker-entrypoint...."   33 minutes ago   Up 33 minutes   0.0.0.0:81->80/tcp, :::81->80/tcp   c1

[root@docker101 ~]#docker container ls
CONTAINER ID   IMAGE                                                       COMMAND                  CREATED          STATUS          PORTS                               NAMES
e7609571fc46   registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v2   "/docker-entrypoint...."   33 minutes ago   Up 33 minutes   0.0.0.0:82->80/tcp, :::82->80/tcp   c2
4e5dabfb5c49   registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1   "/docker-entrypoint...."   34 minutes ago   Up 34 minutes   0.0.0.0:81->80/tcp, :::81->80/tcp   c1

2.查看所有容器列表

bash 复制代码
[root@docker101 ~]#docker ps -a
CONTAINER ID   IMAGE                                                       COMMAND                  CREATED             STATUS                      PORTS                               NAMES
e7609571fc46   registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v2   "/docker-entrypoint...."   35 minutes ago      Up 35 minutes               0.0.0.0:82->80/tcp, :::82->80/tcp   c2
4e5dabfb5c49   registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1   "/docker-entrypoint...."   35 minutes ago      Up 35 minutes               0.0.0.0:81->80/tcp, :::81->80/tcp   c1
15b7faa50b3e   registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v2   "/docker-entrypoint...."   56 minutes ago      Exited (0) 54 minutes ago                                       exciting_lehmann
6d61da0c8694   registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1   "/docker-entrypoint...."   About an hour ago   Exited (0) 37 minutes ago                                       sweet_dijkstra

3.查看所有容器的ID

bash 复制代码
[root@docker101 ~]#docker container ls -a -q
e7609571fc46
4e5dabfb5c49
15b7faa50b3e
6d61da0c8694

[root@docker101 ~]#docker ps -q -a
e7609571fc46
4e5dabfb5c49
15b7faa50b3e
6d61da0c8694

4.删除未运行的容器

bash 复制代码
[root@docker101 ~]#docker ps -a
CONTAINER ID   IMAGE                                                       COMMAND                  CREATED             STATUS                      PORTS                               NAMES
e7609571fc46   registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v2   "/docker-entrypoint...."   37 minutes ago      Up 37 minutes               0.0.0.0:82->80/tcp, :::82->80/tcp   c2
4e5dabfb5c49   registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1   "/docker-entrypoint...."   38 minutes ago      Up 38 minutes               0.0.0.0:81->80/tcp, :::81->80/tcp   c1
15b7faa50b3e   registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v2   "/docker-entrypoint...."   58 minutes ago      Exited (0) 57 minutes ago                                       exciting_lehmann
6d61da0c8694   registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1   "/docker-entrypoint...."   About an hour ago   Exited (0) 40 minutes ago                                       sweet_dijkstra

[root@docker101 ~]#docker rm sweet_dijkstra exciting_lehmann
sweet_dijkstra
exciting_lehmann

[root@docker101 ~]#docker ps -a
CONTAINER ID   IMAGE                                                       COMMAND                  CREATED          STATUS          PORTS                               NAMES
e7609571fc46   registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v2   "/docker-entrypoint...."   38 minutes ago   Up 38 minutes   0.0.0.0:82->80/tcp, :::82->80/tcp   c2
4e5dabfb5c49   registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1   "/docker-entrypoint...."   38 minutes ago   Up 38 minutes   0.0.0.0:81->80/tcp, :::81->80/tcp   c1

5.删除正在运行的容器

bash 复制代码
[root@docker101 ~]#docker ps -a
CONTAINER ID   IMAGE                                                       COMMAND                  CREATED          STATUS          PORTS                               NAMES
e7609571fc46   registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v2   "/docker-entrypoint...."   38 minutes ago   Up 38 minutes   0.0.0.0:82->80/tcp, :::82->80/tcp   c2
4e5dabfb5c49   registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1   "/docker-entrypoint...."   38 minutes ago   Up 38 minutes   0.0.0.0:81->80/tcp, :::81->80/tcp   c1

[root@docker101 ~]#docker rm -f c1
c1

[root@docker101 ~]#docker ps -a
CONTAINER ID   IMAGE                                                       COMMAND                  CREATED          STATUS          PORTS                               NAMES
e7609571fc46   registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v2   "/docker-entrypoint...."   39 minutes ago   Up 39 minutes   0.0.0.0:82->80/tcp, :::82->80/tcp   c2

6.删除所有的容器

bash 复制代码
[root@docker101 ~]#docker ps -a
CONTAINER ID   IMAGE                                                       COMMAND                  CREATED          STATUS          PORTS                               NAMES
227f8b26967f   registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v2   "/docker-entrypoint...."   4 seconds ago    Up 3 seconds    0.0.0.0:99->80/tcp, :::99->80/tcp   c2
b5f1a9b052f6   registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1   "/docker-entrypoint...."   16 seconds ago   Up 15 seconds   0.0.0.0:88->80/tcp, :::88->80/tcp   c1

[root@docker101 ~]#docker rm -f `docker ps -qa`
227f8b26967f
b5f1a9b052f6

[root@docker101 ~]#docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

在正在运行的容器中执行命令

1.查看ip地址

bash 复制代码
[root@docker101 ~]#docker exec c1 ifconfig
eth0      Link encap:Ethernet  HWaddr 02:42:AC:11:00:02  
          inet addr:172.17.0.2  Bcast:172.17.255.255  Mask:255.255.0.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:8 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:656 (656.0 B)  TX bytes:0 (0.0 B)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

2.连接到容器使用shell环境

bash 复制代码
[root@docker101 ~]#docker exec  -it c1 sh
/ # ifconfig
eth0      Link encap:Ethernet  HWaddr 02:42:AC:11:00:02  
          inet addr:172.17.0.2  Bcast:172.17.255.255  Mask:255.255.0.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:8 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:656 (656.0 B)  TX bytes:0 (0.0 B)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

3.连接容器执行命令式要注意确保该容器有此命令

bash 复制代码
[root@docker101 ~]#docker exec c1 cat /etc/shells
# valid login shells
/bin/sh
/bin/ash

[root@docker101 ~]#docker exec  -it c1 bash    #使用bash就无法连接
OCI runtime exec failed: exec failed: unable to start container process: exec: "bash": executable file not found in $PATH: unknown

docker镜像本地迁移及打标签

1.下载镜像

镜像地址

bash 复制代码
[root@docker101 ~]#ll
total 610688
-rw-r--r-- 1 root root 383172608 Dec  6 23:23 games-v0.6.tar.gz

2.导入镜像

bash 复制代码
[root@docker101 ~]#docker load -i games-v0.6.tar.gz 
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/oldboyedu-games:v0.6

#查看是否导入成功
[root@docker101 ~]#docker image ls
REPOSITORY                                               TAG       IMAGE ID       CREATED         SIZE
jasonyin2020/oldboyedu-games                             v0.6      b55cbfca1946   21 months ago   376MB
registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps   v2        d65adc8a2f32   22 months ago   22.9MB
registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps   v1        f28fd43be4ad   22 months ago   23MB

3.测试运行

bash 复制代码
[root@docker101 ~]#docker run -d -p 85:80 jasonyin2020/oldboyedu-games:v0.6 
97fb2a3f6af1b3b505b669cab1f313d6e324febdd596b06838af27ced27ddcc7

访问测试页面
http://game01.oldboyedu.com:85/

4.镜像导出

bash 复制代码
第一种:
[root@docker101 ~]#docker save -o joren-game.tar.gz jasonyin2020/oldboyedu-games:v0.6 
[root@docker101 ~]#ll joren-game.tar.gz 
-rw------- 1 root root 383165440 Dec  6 23:49 joren-game.tar.gz

第二种:
[root@docker101 ~]#docker save jasonyin2020/oldboyedu-games >joren-game2.tar.gz
[root@docker101 ~]#ll joren-game2.tar.gz 
-rw-r--r-- 1 root root 383165440 Dec  6 23:51 joren-game2.tar.gz

5.批量导出镜像

bash 复制代码
[root@docker101 ~]#docker image ls
REPOSITORY                                               TAG       IMAGE ID       CREATED         SIZE
jasonyin2020/oldboyedu-games                             v0.6      b55cbfca1946   21 months ago   376MB
registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps   v2        d65adc8a2f32   22 months ago   22.9MB
registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps   v1        f28fd43be4ad   22 months ago   23MB

[root@docker101 ~]#docker image ls|awk 'NR>1{print $1":"$2}'
jasonyin2020/oldboyedu-games:v0.6
registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1
registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v2

[root@docker101 ~]#docker save `docker image ls|awk 'NR>1{print$1":"$2}'` >all.tar.gz

6.导入镜像的两种方式

bash 复制代码
#首先推送镜像到102服务器
[root@docker101 ~]#scp all.tar.gz 10.0.0.102:.
root@10.0.0.102's' password: 
all.tar.gz                                                         100%  366MB 102.7MB/s   00:03    

第一种方式:
[root@docker102 ~]#docker load -i all.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
4beb452b2498: Loading layer  222.2kB/222.2kB
Loaded image: registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v2
8e2be8913e57: Loading layer  238.1kB/238.1kB
Loaded image: registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1
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/oldboyedu-games:v0.6

[root@docker102 ~]#docker image ls
REPOSITORY                                               TAG       IMAGE ID       CREATED         SIZE
jasonyin2020/oldboyedu-games                             v0.6      b55cbfca1946   21 months ago   376MB
registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps   v2        d65adc8a2f32   22 months ago   22.9MB
registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps   v1        f28fd43be4ad   22 months ago   23MB


第二种方式:
[root@docker102 ~]#docker load <all.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
4beb452b2498: Loading layer  222.2kB/222.2kB
Loaded image: registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v2
8e2be8913e57: Loading layer  238.1kB/238.1kB
Loaded image: registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1
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/oldboyedu-games:v0.6

[root@docker102 ~]#docker image ls
REPOSITORY                                               TAG       IMAGE ID       CREATED         SIZE
jasonyin2020/oldboyedu-games                             v0.6      b55cbfca1946   21 months ago   376MB
registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps   v1        f28fd43be4ad   22 months ago   23MB
registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps   v2        d65adc8a2f32   22 months ago   22.9MB

7.删除镜像

bash 复制代码
批量删除所有镜像
[root@docker102 ~]#docker rmi `docker image ls -q`
Untagged: jasonyin2020/oldboyedu-games:v0.6
Deleted: sha256:b55cbfca19466855f8641e50dcc8b39fd670faa7ead235e91f3da5d058002f1e
Deleted: sha256:ec9db6625058a29f186f9ff0bb0ced12cc8a9f742bd8153afb69ea6d4bc9f10f
Deleted: sha256:24adb7d22d9dd2081102c4d27ed626e45096ed0efda6ae1ae57af023524e85c1
Deleted: sha256:fa1f3f6f0a5e10b1bcf6a8a81e25f6c852686390ea379b5921c1c489a6025aa6
Deleted: sha256:2e11b973beb2dd3ccdba59979f11de6cf0661e5450bffc057c894e0f617e0bef
Untagged: registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v2
Deleted: sha256:d65adc8a2f327feacad77611d31986381b47f3c0a1ef8ff2488d781e19c60901
Deleted: sha256:c934f6fca7277ac63ca63fc75f02f19aa690c19b1e8c6ac697d04894049e8875
Untagged: registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1
Deleted: sha256:f28fd43be4ad41fc768dcc3629f8479d1443df01ada10ac9a771314e4fdef599
Deleted: sha256:1d14ebb5d571f4ae7b23885c1936c7ccf7ccea25d9abe47adef4bbb08b02b0c1
Deleted: sha256:d934f66fc762f5dfba2222695f49e12207d31c10f028a60dcaed0116863946e4
Deleted: sha256:4045d0a9d114395acf42abeaa961f6cc6ecc3a6cdef1f44f9b39fe9abdddc41f
Deleted: sha256:14c3b43c8b6645d8a4a8cf9f351428455fcd3b24822831f54e0ac6bfe0739313
Deleted: sha256:ca043fe36d34b379681078b276e99e77ac5d9019cca8653a0a5408ab09893aba
Deleted: sha256:601a550fa75854a4beeeba9640873699e0fc4c4a9b1a88cb66e7fae6ae881f31
Deleted: sha256:7fcb75871b2101082203959c83514ac8a9f4ecfee77a0fe9aa73bbe56afdf1b4
[root@docker102 ~]#docker image ls
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE

8.给镜像打标签

bash 复制代码
[root@docker102 ~]#docker image ls
REPOSITORY                                               TAG       IMAGE ID       CREATED         SIZE
jasonyin2020/oldboyedu-games                             v0.6      b55cbfca1946   21 months ago   376MB
registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps   v1        f28fd43be4ad   22 months ago   23MB
registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps   v2        d65adc8a2f32   22 months ago   22.9MB

[root@docker102 ~]#docker tag jasonyin2020/oldboyedu-games:v0.6 joren:nice

[root@docker102 ~]#docker image ls
REPOSITORY                                               TAG       IMAGE ID       CREATED         SIZE
jasonyin2020/oldboyedu-games                             v0.6      b55cbfca1946   21 months ago   376MB
joren                                                    nice      b55cbfca1946   21 months ago   376MB
registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps   v2        d65adc8a2f32   22 months ago   22.9MB
registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps   v1        f28fd43be4ad   22 months ago   23MB

docker容器的常用命令

1.修改容器的名称

bash 复制代码
[root@docker101 ~]#docker ps -a
CONTAINER ID   IMAGE                                                       COMMAND                  CREATED             STATUS             PORTS                               NAMES
97fb2a3f6af1   jasonyin2020/oldboyedu-games:v0.6                           "/docker-entrypoint...."   42 minutes ago      Up 42 minutes      0.0.0.0:85->80/tcp, :::85->80/tcp   xenodochial_wu
3dacc66b05a3   registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v2   "/docker-entrypoint...."   59 minutes ago      Up 59 minutes      0.0.0.0:99->80/tcp, :::99->80/tcp   c2
4cff05b454a5   registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1   "/docker-entrypoint...."   About an hour ago   Up About an hour   0.0.0.0:88->80/tcp, :::88->80/tcp   c1

[root@docker101 ~]#docker container rename xenodochial_wu c3

[root@docker101 ~]#docker ps -a
CONTAINER ID   IMAGE                                                       COMMAND                  CREATED             STATUS             PORTS                               NAMES
97fb2a3f6af1   jasonyin2020/oldboyedu-games:v0.6                           "/docker-entrypoint...."   43 minutes ago      Up 43 minutes      0.0.0.0:85->80/tcp, :::85->80/tcp   c3
3dacc66b05a3   registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v2   "/docker-entrypoint...."   About an hour ago   Up About an hour   0.0.0.0:99->80/tcp, :::99->80/tcp   c2
4cff05b454a5   registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1   "/docker-entrypoint...."   About an hour ago   Up About an hour   0.0.0.0:88->80/tcp, :::88->80/tcp   c1

2.实时查看日志

bash 复制代码
#查看c1的日志
[root@docker101 ~]#docker container logs c1
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
/docker-entrypoint.sh: Configuration complete; ready for start up
2025/12/06 15:09:56 [notice] 1#1: using the "epoll" event method
2025/12/06 15:09:56 [notice] 1#1: nginx/1.20.1
2025/12/06 15:09:56 [notice] 1#1: built by gcc 10.2.1 20201203 (Alpine 10.2.1_pre1) 
2025/12/06 15:09:56 [notice] 1#1: OS: Linux 3.10.0-1127.el7.x86_64
2025/12/06 15:09:56 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1024:4096
2025/12/06 15:09:56 [notice] 1#1: start worker processes
2025/12/06 15:09:56 [notice] 1#1: start worker process 32
2025/12/06 15:09:56 [notice] 1#1: start worker process 33
10.0.0.1 - - [06/Dec/2025:15:47:15 +0000] "GET / HTTP/1.1" 200 357 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36" "-"
10.0.0.1 - - [06/Dec/2025:15:47:15 +0000] "GET /1.jpg HTTP/1.1" 200 233472 "http://10.0.0.101:88/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36" "-"

#实时查看c1的日志
[root@docker101 ~]#docker container logs -f c1
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
/docker-entrypoint.sh: Configuration complete; ready for start up
2025/12/06 15:09:56 [notice] 1#1: using the "epoll" event method
2025/12/06 15:09:56 [notice] 1#1: nginx/1.20.1
2025/12/06 15:09:56 [notice] 1#1: built by gcc 10.2.1 20201203 (Alpine 10.2.1_pre1) 
2025/12/06 15:09:56 [notice] 1#1: OS: Linux 3.10.0-1127.el7.x86_64
2025/12/06 15:09:56 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1024:4096
2025/12/06 15:09:56 [notice] 1#1: start worker processes
2025/12/06 15:09:56 [notice] 1#1: start worker process 32
2025/12/06 15:09:56 [notice] 1#1: start worker process 33
10.0.0.1 - - [06/Dec/2025:15:47:15 +0000] "GET / HTTP/1.1" 200 357 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36" "-"
10.0.0.1 - - [06/Dec/2025:15:47:15 +0000] "GET /1.jpg HTTP/1.1" 200 233472 "http://10.0.0.101:88/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36" "-"
172.17.0.1 - - [06/Dec/2025:16:18:06 +0000] "GET / HTTP/1.1" 200 357 "-" "curl/7.29.0" "-"

#查看20分钟之前的日志
[root@docker101 ~]#docker container logs -f --until 20m c1
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
/docker-entrypoint.sh: Configuration complete; ready for start up
2025/12/06 15:09:56 [notice] 1#1: using the "epoll" event method
2025/12/06 15:09:56 [notice] 1#1: nginx/1.20.1
2025/12/06 15:09:56 [notice] 1#1: built by gcc 10.2.1 20201203 (Alpine 10.2.1_pre1) 
2025/12/06 15:09:56 [notice] 1#1: OS: Linux 3.10.0-1127.el7.x86_64
2025/12/06 15:09:56 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1024:4096
2025/12/06 15:09:56 [notice] 1#1: start worker processes
2025/12/06 15:09:56 [notice] 1#1: start worker process 32
2025/12/06 15:09:56 [notice] 1#1: start worker process 33
10.0.0.1 - - [06/Dec/2025:15:47:15 +0000] "GET / HTTP/1.1" 200 357 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36" "-"
10.0.0.1 - - [06/Dec/2025:15:47:15 +0000] "GET /1.jpg HTTP/1.1" 200 233472 "http://10.0.0.101:88/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36" "-"

#查看20分钟之内的日志
[root@docker101 ~]#docker container logs -f --since 20m c1
172.17.0.1 - - [06/Dec/2025:16:18:06 +0000] "GET / HTTP/1.1" 200 357 "-" "curl/7.29.0" "-"

相关参数说明:
    -f:
        实时查看日志
    --until 20m:
        查看20分钟之前的日志
    --since 20m:
        查看20分钟之内的日志
#一般情况下,"--since"和"--until"不会同时使用

3.查看最近一个容器信息

bash 复制代码
[root@docker101 ~]#docker ps -l
CONTAINER ID   IMAGE                               COMMAND                  CREATED          STATUS          PORTS                               NAMES
97fb2a3f6af1   jasonyin2020/oldboyedu-games:v0.6   "/docker-entrypoint...."   56 minutes ago   Up 56 minutes   0.0.0.0:85->80/tcp, :::85->80/tcp   c3

4.宿主机和容器之间拷贝数据

4.1将容器的文件拷贝到宿主机

bash 复制代码
#进入容器c1
[root@docker101 ~]#docker exec -it c1 sh
/ # ll /
sh: ll: not found
/ # ls -l  /
total 12
drwxr-xr-x    2 root     root          4096 Nov 12  2021 bin
drwxr-xr-x    5 root     root           340 Dec  6 15:09 dev
drwxr-xr-x    1 root     root            41 Nov 13  2021 docker-entrypoint.d
-rwxrwxr-x    1 root     root          1202 Nov 13  2021 docker-entrypoint.sh
drwxr-xr-x    1 root     root            19 Dec  6 15:09 etc
drwxr-xr-x    2 root     root             6 Nov 12  2021 home
drwxr-xr-x    1 root     root            17 Nov 12  2021 lib
drwxr-xr-x    5 root     root            44 Nov 12  2021 media
drwxr-xr-x    2 root     root             6 Nov 12  2021 mnt
drwxr-xr-x    2 root     root             6 Nov 12  2021 opt
dr-xr-xr-x  222 root     root             0 Dec  6 15:09 proc
drwx------    1 root     root            26 Dec  6 15:12 root
drwxr-xr-x    1 root     root            23 Dec  6 15:09 run
drwxr-xr-x    2 root     root          4096 Nov 12  2021 sbin
drwxr-xr-x    2 root     root             6 Nov 12  2021 srv
dr-xr-xr-x   13 root     root             0 Dec  6 13:14 sys
drwxrwxrwt    1 root     root             6 Nov 13  2021 tmp
drwxr-xr-x    1 root     root            19 Nov 12  2021 usr
drwxr-xr-x    1 root     root            19 Nov 12  2021 var

#将容器的文件拷贝到宿主机
[root@docker101 ~]#docker cp c1:/docker-entrypoint.sh .
Successfully copied 3.07kB to /root/.
[root@docker101 ~]#ll
total 1733736
-rw-r--r-- 1 root root 383657472 Dec  6 23:57 all.tar.gz
-rwxrwxr-x 1 root root      1202 Nov 13  2021 docker-entrypoint.sh

4.2将宿主机的文件拷贝到容器中

bash 复制代码
[root@docker101 ~]#docker cp install-docker.sh c1:/
Successfully copied 5.12kB to c1:/

#进入c1查看
/ # ls -l /
total 16
drwxr-xr-x    2 root     root          4096 Nov 12  2021 bin
drwxr-xr-x    5 root     root           340 Dec  6 15:09 dev
drwxr-xr-x    1 root     root            41 Nov 13  2021 docker-entrypoint.d
-rwxrwxr-x    1 root     root          1202 Nov 13  2021 docker-entrypoint.sh
drwxr-xr-x    1 root     root            19 Dec  6 15:09 etc
drwxr-xr-x    2 root     root             6 Nov 12  2021 home
-rwxr-xr-x    1 root     root          3399 Dec  3 07:07 install-docker.sh

容器传递环境变量

bash 复制代码
1.启动容器
[root@docker101 ~]#docker run -d -p 88:80 --name c1 -e SCHOOL=joren -e CLASS=Linux registry.cn-hangzhou
c29d0d6ca926044b2be172d75d2d7d4798fe06ee6c42f37338880ceb82001a48

选项参数:
    -e    传递环境变量

2.查看环境变量
[root@docker101 ~]#docker exec c1 env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=c29d0d6ca926
SCHOOL=joren    
CLASS=Linux
NGINX_VERSION=1.20.1
NJS_VERSION=0.5.3
PKG_RELEASE=1
HOME=/root

docker部署常用服务

1)部署tomcat访问zrlog

第一步:创建容器

bash 复制代码
#我将宿主机的8180端口映射到tomcat的8080端口,镜像地址直接复制即可
[root@docker101 ~/server]#docker run -d -p 8180:8080 --name tomcat registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/tomcat:9.0.87-jdk17 
de2bc32360cff9c702f0734d619bd499b7fd7330956fb3fb0c5d7147744bb1cd

第二步:下载zrlog的war包

bash 复制代码
[root@docker101 ~]#wget http://dl.zrlog.com/release/zrlog-1.7.1-baaecb9-release.war

[root@docker101 ~]#ll
total 1740712
-rw-r--r-- 1 root root 383657472 Dec  6 23:57 all.tar.gz
drwxr-xr-x 3 root root        21 Jan  1  2013 conf
drwxr-xr-x 2 root root        52 Jan  1  2013 doc
-rwxrwxr-x 1 root root      1202 Nov 13  2021 docker-entrypoint.sh
drwxr-xr-x 2 root root       162 Dec  3 15:05 download
-rwxr-xr-x 1 root root      3399 Dec  3 15:07 install-docker.sh
-rw-r--r-- 1 root root 157875238 Dec  3 15:08 joren-docker-docker-compose.tar.gz
-rw-r--r-- 1 root root   7122027 Jul  1 17:04 zrlog-1.7.1-baaecb9-release.war

第三步:将宿主机的war包推到tomcat容器的webapps目录下

bash 复制代码
[root@docker101 ~]#docker cp zrlog-1.7.1-baaecb9-release.war tomcat:/usr/local/tomcat/webapps/

第四步:进入tomcat容器,将war包改名为ROOT.war

bash 复制代码
#tomcat会自动解压war包
root@1257e92c201f:/usr/local/tomcat/webapps# ll
total 6956
drwxr-xr-x 1 root root     101 Dec  8 08:56  ./
drwxr-xr-x 1 root root      57 Mar 28  2024  ../
drwxr-xr-x 2 root root      23 Dec  8 08:51  myapp/
drwxr-x--- 9 root root     126 Dec  8 08:56 'zrlog-1.7.1-baaecb9-release_(1)'/
-rw-r--r-- 1 root root 7122027 Dec  8 08:55 'zrlog-1.7.1-baaecb9-release_(1).war'

#将war包改名为ROOT
root@1257e92c201f:/usr/local/tomcat/webapps# mv zrlog-1.7.1-baaecb9-release_\(1\).war ROOT.war
root@1257e92c201f:/usr/local/tomcat/webapps# ll
total 6956
drwxr-xr-x 1 root root      74 Dec  8 08:57  ./
drwxr-xr-x 1 root root      57 Mar 28  2024  ../
drwxr-xr-x 2 root root      23 Dec  8 08:51  myapp/
-rw-r--r-- 1 root root 7122027 Dec  8 08:55  ROOT.war
drwxr-x--- 9 root root     126 Dec  8 08:56 'zrlog-1.7.1-baaecb9-release_(1)'/

#tomcat会自动将目录也改为ROOT
root@1257e92c201f:/usr/local/tomcat/webapps# ll
total 6956
drwxr-xr-x 1 root root      47 Dec  8 08:57 ./
drwxr-xr-x 1 root root      57 Mar 28  2024 ../
drwxr-xr-x 2 root root      23 Dec  8 08:51 myapp/
drwxr-x--- 9 root root     126 Dec  8 08:57 ROOT/
-rw-r--r-- 1 root root 7122027 Dec  8 08:55 ROOT.war

第五步:测试访问

访问地址:10.0.0.101:8180

2)部署Mysql

第一步:下载镜像

bash 复制代码
第一种方式:需要翻墙
[root@docker101 ~]#docker pull mysql:8.4.1-oracle

第二种方式:下载tar包
[root@docker101 ~]#ll
total 2374320
-rw-r--r-- 1 root root 383657472 Dec  6 23:57 all.tar.gz
drwxr-xr-x 3 root root        21 Jan  1  2013 conf
-rw-r--r-- 1 root root 648811008 Dec  8 17:16 oldboyedu-mysql-8.3.0.tar.gz

tar包地址

第二步:导入镜像

bash 复制代码
[root@docker101 ~]#docker load <oldboyedu-mysql-8.3.0.tar.gz 
55d310cc1793: Loading layer  118.8MB/118.8MB
750da67a1a6f: Loading layer  11.26kB/11.26kB
3bac5d5ee750: Loading layer  2.359MB/2.359MB
2750a469bea2: Loading layer  13.85MB/13.85MB
8b4846888b1b: Loading layer  6.656kB/6.656kB
33d3b3159e30: Loading layer  3.072kB/3.072kB
eb8536f76859: Loading layer    201MB/201MB
4c8b4f38c0d5: Loading layer  3.072kB/3.072kB
1319321d3298: Loading layer  312.7MB/312.7MB
4d7acf174bcc: Loading layer   16.9kB/16.9kB
Loaded image: mysql:8.3.0-oracle

[root@docker101 ~]#docker image ls
REPOSITORY                                                 TAG            IMAGE ID       CREATED         SIZE
registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/tomcat   xianni         1304a6c9d500   20 months ago   430MB
registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/tomcat   9.0.87-jdk17   b1c4ad262428   20 months ago   428MB
jasonyin2020/oldboyedu-games                               v0.6           b55cbfca1946   21 months ago   376MB
registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps     v2             d65adc8a2f32   22 months ago   22.9MB
registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps     v1             f28fd43be4ad   22 months ago   23MB
mysql                                                      8.3.0-oracle   a88c3e85e887   22 months ago   632MB

第三步:启动MySQL

bash 复制代码
[root@docker101 ~]#docker run -d -p 13306:3306 --name mysql-server -e MYSQL_ROOT_PASSWORD=j.20030704 mysql:8.3.0-oracle 
2abc82ec515a324ee4e726d688ac1285cdcdd4c193103cc3e1fefa93a751b953

参数解析:
    mysql-server -e MYSQL_ROOT_PASSWORD=j.20030704    #设置数据库密码

第四步:查看容器

bash 复制代码
[root@docker101 ~]#docker exec -it mysql-server mysql -pj.20030704
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 8.3.0 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                |
+--------------------+
4 rows in set (0.16 sec)

第五步:部署数据库指定数据库和用户

bash 复制代码
[root@docker101 ~]#docker run -d -p 13307:3306 --name mysql-server02 -e MYSQL_ALLOW_EMPTY_PASSWORD=yes -e MYSQL_DATABASE=happy -e MYSQL_USER=joren -e MYSQL_PASSWORD=123456 -d mysql:8.3.0-oracle
5df7e91a644df0024017ca75339f1ab2d0451c8e3c47190273f0451b55a94048

参数解析:
    MYSQL_ALLOW_EMPTY_PASSWORD=yes    #允许空密码
    MYSQL_DATABASE=happy              #创建一个名为happy的数据库
    MYSQL_USER=joren                  #创建用户joren
    MYSQL_PASSWORD=123456             #joren的密码为123456

第六步:验证测试

bash 复制代码
[root@docker101 ~]#docker exec -it mysql-server02 mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.3.0 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           |
+--------------------+
| happy              |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.05 sec)

mysql> select user,host,plugin from mysql.user;
+------------------+-----------+-----------------------+
| user             | host      | plugin                |
+------------------+-----------+-----------------------+
| joren            | %         | caching_sha2_password |
| root             | %         | caching_sha2_password |
| mysql.infoschema | localhost | caching_sha2_password |
| mysql.session    | localhost | caching_sha2_password |
| mysql.sys        | localhost | caching_sha2_password |
| root             | localhost | caching_sha2_password |
+------------------+-----------+-----------------------+
6 rows in set (0.00 sec)

扩展:批量启动20个数据库实例

bash 复制代码
[root@docker101 ~]#for i in `seq 20`; do docker run --name mysql-server-haha${i} -e MYSQL_ALLOW_EMPTY_PASSWORD=yes -e MYSQL_DATABASE=oldboyedu -e MYSQL_USER=linux92 -e MYSQL_PASSWORD=123456 -d mysql:8.3.0-oracle; done

3)部署wordpress服务

第一步:导入wordpress的镜像

wordpress地址

bash 复制代码
第一步:下载wordpress压缩包
[root@docker101 ~]#rz -E
rz waiting to receive.
[root@docker101 ~]#ll
total 2988952
-rw-r--r-- 1 root root 648811008 Dec  8 17:16 oldboyedu-mysql-8.3.0.tar.gz
-rw-r--r-- 1 root root 629380608 Dec  8 17:16 oldboyedu-wordpress.tar.gz

第二步:导入镜像
[root@docker101 ~]#docker load <oldboyedu-wordpress.tar.gz 
2edcec3590a4: Loading layer  83.86MB/83.86MB
2a3138346faa: Loading layer  3.584kB/3.584kB
0fdfbbf7aebd: Loading layer  273.3MB/273.3MB
ee0ca96d307e: Loading layer  6.144kB/6.144kB
6e4300c6b758: Loading layer   48.3MB/48.3MB
564928686313: Loading layer  10.75kB/10.75kB
6c39776a30a0: Loading layer  8.192kB/8.192kB
23946094ff3f: Loading layer  11.75MB/11.75MB
b299cffd87cb: Loading layer  4.096kB/4.096kB
56543a169be6: Loading layer  60.92MB/60.92MB
55d40777afe6: Loading layer   12.8kB/12.8kB
7446d340e7f8: Loading layer  4.608kB/4.608kB
10dfb82106c4: Loading layer  4.608kB/4.608kB
d390f2d56bd8: Loading layer   53.3MB/53.3MB
0d79fe9ffe74: Loading layer  42.59MB/42.59MB
4793c0a2ad02: Loading layer  5.632kB/5.632kB
a4e2d002482e: Loading layer  4.608kB/4.608kB
f0287c40b0d6: Loading layer  92.67kB/92.67kB
98b68a843574: Loading layer  55.05MB/55.05MB
8f1b90d2be40: Loading layer  8.704kB/8.704kB
c7ae1aefcc69: Loading layer  6.656kB/6.656kB
Loaded image: wordpress:latest

第二步:启动数据库

bash 复制代码
[root@docker101 ~]#docker run --name mysql-server \
  -e MYSQL_ALLOW_EMPTY_PASSWORD=yes \
  -e MYSQL_DATABASE=wordpress \
  -e MYSQL_USER=joren \
  -e MYSQL_PASSWORD=123456 \
  -d \
  -p 13306:3306 \
  mysql:8.3.0-oracle
bf1262a00395c79dcab00ba978e65abae689e03caa3367c046a50118a4cdb28a

第三步:部署wordpress

bash 复制代码
[root@docker101 ~]#docker run -d -p 88:80 --name wp -e WORDPRESS_DB_HOST=10.0.0.101:13306 -e WORDPRESS_DB_USER=joren -e WORDPRESS_DB_PASSWORD=123456 -e WORDPRESS_DB_NAME=wordpress wordpress
74011d62e837cbff1bf8761f8059cbc7f49eea578335fc1e0e9df1a4e90c903a

访问wordpress的网址:
10.0.0.101:88
相关推荐
QT 小鲜肉10 小时前
【Linux命令大全】001.文件管理之paste命令(实操篇)
linux·运维·服务器·笔记·microsoft
无痕melody10 小时前
allinssl自动申请部署飞牛域名ssl证书
docker
全栈工程师修炼指南10 小时前
Nginx | ngx_cache_purge 模块:实现清除特定上游服务(后端)响应缓存条目
运维·nginx·缓存
a_eastern10 小时前
linux electron-forge离线打包关键配置
android·linux·electron
CheungChunChiu10 小时前
Linux 图形栈全景解析:从 OpenGL 到 DRM/KMS 的完整链路
linux·运维·服务器·opengl
潇I洒10 小时前
[Linux] Ubuntu中设置查看MySQL连接日志
linux·mysql·ubuntu
白书宇11 小时前
【STM32实战】从零开始写Linux 0.12内核 第1个实验安装IAR 8.5
linux·c语言·驱动开发·stm32·单片机·嵌入式硬件
looking_for__11 小时前
【Linux】动静态库
linux
眠りたいです11 小时前
Docker:Docker Volume存储卷-宿主机与容器的数据双向交流通道
运维·docker·中间件·容器
破烂pan11 小时前
企业级 Docker 运维命令速查表
运维·docker