容器是镜像的运行时实例。
正如从虚拟机模板上启动 VM 一样,用户也同样可以从单个镜像上启动一个或多个容器
1. 新建并启动容器
# 启动tomcat
docker run tomcat:9.0.85-jre
# 常用参数:
# -d, --detach=false: 后台运行容器,并返回容器ID
# -i, --interactive=false: 以交互模式运行容器,通常与 -t 同时使用
-P, --publish-all=false: 随机端口映射,容器内部端口随机映射到主机的端口。不推荐各位小伙伴使用该参数
# -p, --publish=[]: 指定端口映射,格式为:主机(宿主)端口:容器端口,推荐各位小伙伴们使用
# -t, --tty=false: 为容器重新分配一个伪输入终端,通常与 -i 同时使用
# --name="nginx-lb": 为容器指定一个名称
-h , --hostname="laosiji": 指定容器的hostname
-e , --env=[]: 设置环境变量,容器中可以使用该环境变量
--net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型
--link=[]: 添加链接到另一个容器;不推荐各位小伙伴使用该参数
-v, --volume : 绑定一个卷
--privileged=false: 指定容器是否为特权容器,特权容器拥有所有的capabilities
--restart=no:指定容器停止后的重启策略
no:容器退出时不重启
on-failure:容器故障退出(返回值非零)时重启
always:容器退出时总是重启,推荐各位小伙伴们使用
# --rm=false: 指定容器停止后自动删除容器,不能以docker run -d启动的容器
# 带参数启动容器
docker run -itd -p 8080:8080 tomcat:9.0.85-jre8 # -p 将虚拟机端口和容器端口绑定,以供外部访问
docker run -itd --name tomcat -p 8081:8080 tomcat:9.0.85-jre8 # 后期直接使用name操作即可
# 浏览器访问,显示tomcat页面即成功
http://192.168.189.129:8081
'''
如果提示:源服务器未能找到目标资源的表示或者是不愿公开一个已经存在的资源表示
1. 关闭防火墙: systemctl stop firewalld.service
2. 查看tomcat的容器id: docker ps -a
3. 进入容器: docker exec -it c662e020fc2f /bin/bash
4. 进入webapps文件夹: cd webapps
5. 复制上一目录的webapps.dist下的所有文件到webapps目录下: cp -r ../webapps.dist/* ./
6. 重新访问: http://192.168.189.129:8081
'''
2. 容器日志
# 常用参数 -f : 跟踪日志输出 --tail :仅列出最新N条容器日志
docker logs -f tomcat # tomcat:指定的name, 没有的话就使用容器id
docker logs -f tomcat --tail 1
3. 查看容器
docker ps -a # 列出所有容器
docker ps # 查看运行中的容器
docker ps -q # 查询正在运行的容器id
docker ps -aq # 查询所有容器id
# 常用参数
-a :显示所有的容器,包括未运行的。
-q :只显示容器编号。
'''
CONTAINER ID: 容器 ID。
IMAGE: 使用的镜像。
COMMAND: 启动容器时运行的命令。
CREATED: 容器的创建时间。
STATUS: 容器状态。
*状态有7种:
*created(已创建)
*restarting(重启中)
*running(运行中)
*removing(迁移中)
*paused(暂停)
*exited(停止)
*dead(死亡)
PORTS: 容器的端口信息和使用的连接类型(tcp\udp)。
NAMES: 自动分配的容器名称。
'''
4. 启动、重启、终止容器
# 1. docker start :启动一个或多个已经被停止的容器
docker start tomcat
# 2. docker stop :停止一个运行中的容器
docker stop tomcat
# 3. docker restart :重启容器
docker restart tomcat
5. 删除容器
# docker rm :删除一个或多个容器。
# docker rm命令只能删除处于终止或退出状态的容器
# 1. 需要先停止运行中的容器再删除,否则无法删除容器
docker stop tomcat9
# 2. 按照容器名称删除
docker rm tomcat9
# 3. 按照容器ID删除
docker rm 8dd95a95e687
'''
常用参数:
-f :通过 SIGKILL 信号强制删除一个运行中的容器。
-l :移除容器间的网络连接,而非容器本身。
-v :删除与容器关联的卷。
'''
6. 批量操作容器
# 1. 停止所有运行容器
docker stop $(docker ps -q)
# 2. 删除所有的容器
docker rm $(docker ps -aq)
# docker rm $(docker stop $(docker ps -q))
# 3. 删除所有的镜像
docker rmi $(docker images -q)
7. 创建容器
# docker create :创建一个新的容器但不启动它。用法同 docker run命令。
# 1. 创建容器
docker create --name tomcat01 -p 8080:8080 tomcat:9.0.85-jre8
# 2. 启动容器
docker start tomcat01
8. 进入容器
# docker exec -it 容器name或者id /bin/bash
# 有bash命令的linux系统:例如centos, 结尾加 /bin/bash
# 没有bash命令的linux系统:例如alpine系统, 结尾加 sh
# 进入容器
docker exec -it tomcat01 /bin/bash
# 退出
exit
'''
常用参数:
-i :即使没有附加也保持STDIN 打开
-t :分配一个伪终端
'''
9. 查看容器
# 1. 查看容器
docker inspect tomcat01
# 2. 获取容器信息
docker inspect -f {{.Name}} tomcat01
'''
常用参数:
-f :指定返回值的模板文件。
-s :显示总的文件大小。
--type :为指定类型返回JSON。
'''
10. 更新容器
# docker update :可以动态地更新容器配置。可以更新一个或多个容器配置。多个容器名称或ID之间使 用空格分隔
# update命令不是很成熟,有很多配置项不能动态更新。推荐还是rm容器后,再重 新run一个新的镜像
11. 杀掉容器
# 杀掉容器
docker kill tomcat01
'''
常用参数:
-s :向容器发送一个信号
'''
12. 总结