一: 快速入门: 使用 Docker 运行 Nginx
使用 docker run 运行 docker 容器
// 运行docker容器,如果本地没有容器镜像,会从仓库中下载 -d 表示在后台运行
docker run -d nginx:latest
查看运行的容器
docker ps
使用 docker inspect 查看 docker 详细配置信息
容器 ID 只需要能唯一识别就可以 , 不需要全部输入
docker inspect 容器ID
"Networks": {
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"NetworkID": "244fff3f1e0e386bb902d8eda33b525c4507b967d1c3ecaf3cfef9ae29ffeeeb",
"EndpointID": "69b37366173424849e189b45a258f98529cdf7f2df6c7f1666e950d3cc996862",
"Gateway": "172.17.0.1", //网关
"IPAddress": "172.17.0.2", //容器地址
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:ac:11:00:02",
"DriverOpts": null
}
}
}
}
]
容器网络说明
IP地址 172.17.0.2 指向 docker0 172.17.0.1
Docker0 借助内核与主机相关联
# 使用 ip a s 查看网络接口情况
ip a s
......
# docker0网桥,用于为容器提供桥接,转发到主机之外的网络
5: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:d5:c3:d4:cc 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:d5ff:fec3:d4cc/64 scope link
valid_lft forever preferred_lft forever
# 与容器中的虚拟网络设备在同一个命名空间中,用于把容器中的网络连接到主机,物理机中if8这个位置是双数,容器中if8是单数
9: veth393dece@if8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default
link/ether 02:e3:11:58:54:0f brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet6 fe80::e3:11ff:fe58:540f/64 scope link
valid_lft forever preferred_lft forever
使用 docker curl 访问
docker curl http://172.17.0.2
## 返回结果,表示访问成功
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
二: docker 命令
1. docker run 运行一个命令在容器中
注意:
命令是主体 , 没有命令容器就会消亡
容器是 dep 启动的
docker run -i -t --name c1 centos:latest bash
命令解释:
docker run
运行一个命令在容器中,命令是主体,没有命令容器就会消亡-i
交互式-t
提供终端--name
c1 把将运行的容器命名为c1centos:latest
使用centos最新版本容器镜像 bash 在容器中执行的命令
因为使用了
-i
和-t
的命令 , 所以直接进入容器了root@b42a41...
前面是容器中所对应的管理员 root , 后面的容器的ID , 所在目录为根目录
# 1. 查看主机名
hostname
b42a41c0b59d
# 2. 查看网络设备
ip a s
# 本地回环网卡
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
# 虚拟网络设备,与物理机相连
12: eth0@if13: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 172.17.0.3/16 brd 172.17.255.255 scope global eth0
valid_lft forever preferred_lft forever
# 3.查看进程
ps aux
[root@b42a41c0b59d /]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 12036 2176 pts/0 Ss 08:43 0:00 bash
root 17 0.0 0.0 44652 1784 pts/0 R+ 09:10 0:00 ps aux
# 查看用户
cat /etc/password
# 退出
exit
# 退出就相当于退出 bash 这个进程 , 就导致容器没有命令可用,容器就停止了
2. docker ps 查看容器的运行情况
# 查看运行中的
docker ps
# 查看所有容器
docker ps -a
3. docker inspect 容器的详细配置
# 1.首先进入容器
docker run -it --name c2 centos:latest bash
按住ctrl键,再按p键与q键,可以退出交互式的容器,容器会处于运行状态。
docker inspect c2
"IPAddress": "172.17.0.3",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"MacAddress": "02:42:ac:11:00:03",
"Networks": {
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"NetworkID": "244fff3f1e0e386bb902d8eda33b525c4507b967d1c3ecaf3cfef9ae29ffeeeb",
"EndpointID": "bdb961e38b2fa258e5f66433989f59ff5ae5e4f473446ea47f6510d49016eb57",
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.3",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:ac:11:00:03",
"DriverOpts": null
}
}
}
}
]
4. docker exec 容器外实现与容器交互执行命令
# 查看根目录
docker exec -it c2 ls
# 查看网络接口
docker exec -it c2 ip a s
-it
交互式c2
表示当前运行的 docker 名称
5. docker attach 进入运行中的容器
# 1. 查看运行中的容器
docker ps
# 2. docker attach进入容器
docker attach c2
注意:
docker attach
命令进入容器后退出会使得容器停止运行 , 所以还是需要按 ctrl + p + q 使容器继续在后台运行
5. docker stop 对正在运行的容器进行关闭
# 1. 查看运行中的容器
docker ps
# 2. 停止容器/批量停止
docker stop 容器名/容器ID...
6. docker start 启动容器
# 1. 查看停止的容器
docker ps -a
# 2.启动容器/批量启动
docker start c1 c2
7. docker top 查看容器中运行的进程信息
docker top 容器名/容器ID
8. docker rm 删除指定容器
正在运行的容器需要先停止才能删除
# 1. 删除容器
docker rm 容器名/容器ID
# 2. 停止容器再删除容器
docker stop 容器名/容器ID ; docker rm 566
# 3.批量删除容器
docker ps --all | awk '{if (NR>=2){print $1}}' | xargs docker rm
1. 其他删除
# 1.删除未使用的容器镜像
docker image prune
# 2.删除所有未使用的容器镜像
docker image prune -a
# 3.删除所有停止运行的容器
docker container prune
# 4. 删除所有未被挂载的卷
docker volume prune
# 5.删除所有网络
docker network prune
# 6.删除docker所有资源
docker system prune
评论区