Docker练习小结

本文是作者关于Docker的实践总结,涵盖了基础命令、数据卷、Dockerfile、网络配置、Docker Compose和Docker Swarm等内容。通过实例演示了Docker的使用,包括容器的创建、数据持久化、自定义网络以及多容器编排,同时强调了Docker官方文档的重要性。
摘要由CSDN通过智能技术生成

参考学习网站:
https://www.bilibili.com/video/BV1og4y1q7M4
https://www.bilibili.com/video/bv1kv411q7Qc/?spm_id_from=333.788.b_636f6d6d656e74.6

0.复习目标

前面简单过了下基础概念,因为没有实践环境就没实操。后续有了自己的节点,就简单的操作练了下(毕竟凡人一个,眼过千遍不如手过一遍嘛)。进行简单记录方便后续命令查看。
不过个人感觉最好的参考还是Docker官方文档:https://docs.docker.com/reference/

  • 基础命令练习
    • 镜像
    • 容器
    • 仓库
  • Dockerfile
  • docker compose
  • 网络连接
  • swarm

1. 基础命令

官网查看地址:https://docs.docker.com/engine/reference

1.1 帮助命令
# 查看版本
docker version
# 查看详细信息(容器数量;镜像数量;正在运行的容器数量等)
docker info
# 帮助命令
docker --help
1.2 镜像命令

docker images 查看镜像

# 查看本地所有镜像
docker images

REPOSITORY          镜像仓库源
TAG                 镜像标签
IMAGE ID            镜像id
CREATED             镜像创建时间
SIZE				镜像大小

# 查看所有镜像
docker images -a/-all
# 查看镜像ID
docker images -q/-quiet

docker search 搜索镜像

# 查询mysql镜像
docker search mysql

NAME                      镜像名
DESCRIPTION               镜像描述
STARS                     标星数
OFFICIAL                  是否为官方生产
AUTOMATED				  自动构建

# 查询mysql镜像的STARS大于30的
docker search mysql --filter=STARS=30

docker pull 拉取镜像

# 默认下载最新版mysql
docker pull mysql

Using default tag: latest # 默认latest
latest: Pulling from library/mysql
bb79b6b2107f: Pull complete # 分层下载
49e22f6fb9f7: Pull complete 
842b1255668c: Pull complete 
9f48d1f43000: Pull complete 
c693f0615bce: Pull complete 
8a621b9dbed2: Pull complete 
0807d32aef13: Pull complete 
a56aca0feb17: Pull complete 
de9d45fd0f07: Pull complete 
1d68a49161cc: Pull complete 
d16d318b774e: Pull complete 
49e112c55976: Pull complete 
Digest: sha256:8c17271df53ee3b843d6e16d46cff13f22c9c04d6982eb15a9a47bd5c9ac7e2d # 镜像签名
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest

# docker pull mysql 等价于 docker pull docker.io/library/mysql:latest

# 拉取指定版本mysql,这个版本必须在仓库中存在
docker pull mysql:5.7
# 已经下载过的分层不再下载,直接使用系统已有的
5.7: Pulling from library/mysql
bb79b6b2107f: Already exists 
49e22f6fb9f7: Already exists 
842b1255668c: Already exists 
9f48d1f43000: Already exists 
c693f0615bce: Already exists 
8a621b9dbed2: Already exists 
0807d32aef13: Already exists 
f15d42f48bd9: Pull complete 
098ceecc0c8d: Pull complete 
b6fead9737bc: Pull complete 
351d223d3d76: Pull complete 
Digest: sha256:4d2b34e99c14edb99cdd95ddad4d9aa7ea3f2c4405ff0c3509a29dc40bcb10ef
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7

docker rmi删除镜像

# 删除指定版本的mysql
docker rmi -f mysql:5.7
Untagged: mysql:5.7
Untagged: mysql@sha256:4d2b34e99c14edb99cdd95ddad4d9aa7ea3f2c4405ff0c3509a29dc40bcb10ef
Deleted: sha256:1b12f2e9257be96da5c075f186dc371b18442b0f9281728ac64c9a69c6e0e264
Deleted: sha256:b21d85dcc43f7db4e532c3ca07e5adbc1e02beb37646b7079217ea2b1922af91
Deleted: sha256:603c9faa831d58a3f60eb377cd6246a281a97b906406a92bf3452726a6f15b69
Deleted: sha256:2d927a6eb4cc26ba5454193a3f4abf503b6cea710293d4f0e6d061c08578b687
Deleted: sha256:b96c2c2176ca7b5223469ad39c9e17509505233dd81030878bc12b03074baef4

# 删除所有镜像,-aq为遍历删除,-f强制删除
docker rmi -f ${docker images -aq}
# 删除多个镜像
docker rmi -f images_1 images_2

docker commit提交镜像

# docker commit -m="描述信息" -a="作者" 容器ID 目标镜像名:TAG
docker commit -m="描述信息" -a="作者" mycentos mycentos_image:1.0

在这里插入图片描述

1.3 容器命令

有了镜像才会有容器,使用centos镜像练习

docker run 新建并启动容器

# 新建并启动容器centos
docker run [COMMAND] centos

# 参数说明
--name mycentos:容器名
-d:后台方式运行
-it:交互方式运行,启动后即进入容器
-P:随机指定端口
-p:指定端口 -p 8080:8080
	-p ip:主机端口:容器端口
	-p 主机端口:容器端口
	-p 容器端口
	容器端口

在这里插入图片描述

在这里插入图片描述

docker ps 查看容器

# 查看当前运行的容器
docker ps

# 参数说明
-a:查看所有运行的容器
-l:查看最近运行的容器(latest)
-n 3:查看历史近3次运行的容器

exit 退出容器

# 直接退出(对于run -it的容器;对于exec -it的容器不会退出)
exit

# 不停止容器,直接退出
Ctrl + P + Q

在这里插入图片描述

docker rm删除容器

# 先停掉容器
docker stop mycentos

# 再删除容器
docker rm mycentos

# 强制删除所有容器(不管是否在运行中)
docker rm -f ${docker ps -aq}
或者
docker ps -a -q | xargs docker rm

启动和停止容器

docker start mycentos
docker stop mycentos
docker restart mycentos
docker kill mycentos

以上的命令中容器使用的是容器名进行指定,也可以通过容器ID进行指定

1.4 其他常用命令

后台运行

# 后台运行容器
docker run -d centos

# 使用docker ps会发现centos停止了
# 原因:docker容器使用后台运行必须要有一个前台进程,docker要是发现没有应用的话就会自动停止

# 所以一般后台运行使用
docker run -itd centos

进入正在运行的容器

# 方法一 进入容器开启一个新的终端,可以在里面自主输入命令执行相关操作(常用)
# 此处/bin/bash也可根据需求更换为其他容器支持的命令,例如ip addr等
docker exec -it mycentos /bin/bash

# 方法二 进入容器正在执行的终端,不会启动新的进程(直接运行容器中写好的相关命令)
docker attach -it mycentos /bin/bash

查看日志

# 查看日志
docker logs -tf --tail mycentos

# --tail number: 显示number条日志
# -tf:显示日志

查看进程

docker top mycentos

在这里插入图片描述

查看元数据

docker inspect mycentos

[
    {
   
        "Id": "e34dc480263fc4acba846af9feb59d221673627b0f2b55286052ee3311c1ab95",
        "Created": "2020-10-28T08:45:06.265792062Z",
        "Path": "/bin/bash",
        "Args": [],
        "State": {
   
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 8498,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2020-10-28T08:54:03.811379851Z",
            "FinishedAt": "2020-10-28T08:53:31.072828646Z"
        },
        "Image": "sha256:0d120b6ccaa8c5e149176798b3501d4dd1885f961922497cd0abef155c869566",
        "ResolvConfPath": 
        ...... # 不再复制
]

拷贝容器文件

# 将容器中/home下的文件test.java拷贝到主机的/home目录
docker cp mycentos:/home/test.java /home

在这里插入图片描述

拷贝是一个手动过程,可使用 -v 数据卷的技术实现自动同步(容器中的数据挂载到宿主机目录中)

在这里插入图片描述

2. 数据卷

目标:将数据持久化,并且实现容器间数据共享(容器的持久化和同步、容器间数据共享)

数据卷:将容器中的目录挂载到宿主机上

挂载的方式:

  • -v命令直接挂载
    • 具名挂载
    • 匿名挂载
  • Dockerfile通过VOLUMES挂载

在这里插入图片描述

# 指定路径挂载(本质还是匿名挂载,如果没有指定卷名的话)
docker run -itd -v 主机目录:容器内目录

# 具名挂载
docker run -itd -v 卷名:容器内目录

# 匿名挂载
docker run -itd -v 容器内目录

在这里插入图片描述

测试效果:在主机/home/ceshi目录中添加文件test.java,容器中/home目录下同步有test.java

在这里插入图片描述

停止容器后,修改主机文件,重启容器发现/home数据也会同步

在这里插入图片描述

使用数据卷的好处:挂载之后如果需要修改只需要修改本地即可,容器内会自动同步

具名挂载和匿名挂载

# 匿名挂载
docker run -itd -v 容器内路径 centos

# docker volume ls 查看系统所有的数据卷
DRIVER              VOLUME NAME
local               0d6cf80561323399c001da9589983215360cfddadf218ab19112fe470f549d89


# 具名挂载
docker run -itd -v 主机路径:容器内路径 centos

[root@master mongodb-4.4.1]# docker run -itd -v ceshi:/home centos /bin/bash
7746acd62ac669d708f923f68521f648d3478df5b61bde71b1c0dfa453750fdd
[root@master mongodb-4.4.1]# docker volume ls
DRIVER              VOLUME NAME
local               0d6cf80561323399c001da9589983215360cfddadf218ab19112fe470f549d89
local               7a5ab28885d9034ac3b4796b59640fb814adadfb12967ee2dd4e5f3e8d93327f
# 指定主机路径
local               ceshi

# 查看某个卷具体的位置	docker volume inspect 数据卷名

[root@master mongodb-4.4.1]# docker volume inspect ceshi
[
    {
   
        "CreatedAt": "2020-10-28T22:37:21+08:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/ceshi/_data",
        "Name": "ceshi",
        "Options": null,
        "Scope": "local"
    }
]

所有docker容器中如果没有指定主机挂载的数据卷(即使用匿名挂载),这些卷实际上都存储在/var/lib/docker/volumes/目录下

为方便找到挂载的数据卷,建议使用具名挂载

# ro:readonly 表示数据卷只读
# rw:可读可写(不写的话默认rw)
docker run -itd --name mycentos1 -v juan:/home:ro centos
docker run -itd --name mycentos2 -v juan:/home:rw centos

在这里插入图片描述

3. 数据卷容器

在这里插入图片描述

[root@master volumes]# docker run -itd --name mycentos3 --volumes-from mycentos2 centos
6d350f2df11afc1746aea649f8b079fc3067017f36cc10249ad7f220be6c9895
[root@master volumes]# docker exec -it mycentos3 /bin/bash
[root@6d350f2df11a
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值