目录
第三步:将宿主机的war包推到tomcat容器的webapps目录下
第四步:进入tomcat容器,将war包改名为ROOT.war
运维的四个时代
传统运维部署存在的痛点有哪些?
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
第二步:导入镜像
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的镜像
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


