Docker进阶命令

参考:https://www.bilibili.com/video/BV1og4y1q7M4?p=1


一. Portainer可视化面板

docker图形化界面管理工具,提供后台面板来操作docker

docker run -d -p 8088:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer

portainer后台登录界面

1-1594298714633.png

二. 生成镜像

1. docker commit 将运行容器生产为镜像

docker commit -m="提交的描述信息" -a="作者" 容器id 目标镜像名称[:tag]

# 测试 默认tomcat:9.0在webapps中没有应用,通过commit生成一个在webapps中有应用的镜像
# 1.拉取镜像
docker pull tomcat:9.0
# 2.创建容器
docker run -d -p 8080:8080 --name "mytomcat01" tomcat:9.0
# 3.进入该容器,发现在webapps中默认没有应用,将webapps.dist中的应用拷贝到webapps目录下
docker exec -it mytomcat01 /bin/bash
cp -r webapps.dist/* webapps/
exit
# 4.将该容器生成镜像
docker commit -m "mytomcat" -a "yqj" mytomcat01 yqj/tomcat:1.0
# 5.查看镜像,发现已经生成该镜像,该镜像的webapps中存在初始应用
docker images
REPOSITORY  TAG       IMAGE ID            CREATED             SIZE
yqj/tomcat  1.0       6e40c09e0572        48 seconds ago      647MB

2. 使用dockerfile构建镜像

具体步骤见后

三. 容器数据卷

容器的持久化和同步操作,也可以实现容器间的数据共享

1. 映射目录挂载

docker run -it -v 主机路径:容器内路径 镜像id

# 测试,创建centos容器,并与主机目录挂载
# 将主机的/root/external-volume目录与容器中的/home/internal-volume目录映射,在主机或者在容器内对该目录创建数据,均会共享。即使容器关闭也可以共享
docker run -it -v /root/external-volume:/home/internal-volume --name mycentos01 centos
# 查看挂载信息
docker inspect mycentos01

"Mounts": [
            {
                "Type": "bind",
                "Source": "/root/external-volume",
                "Destination": "/home/internal-volume",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            }
        ],

2. 匿名挂载

# 匿名挂载会自动生成挂载目录
docker run -it -v 容器内路径 镜像id

# 测试
# 匿名挂载
docker run -it -P -v /home/internal-volume --name mycentos01 centos
# 在容器内部挂载目录下创建文件
cd /home/internal-volume
echo "internal-volume data" >> test.txt
ctrl + P + Q
# 查看挂载目录
docker inspect mycentos01 
"Mounts": [
            {
                "Type": "volume",
                "Name": "94528bca90232192c216a771b100f6b6d378b0642c2734081fdf9ad59e7a9747",
                "Source": "/var/lib/docker/volumes/94528bca90232192c216a771b100f6b6d378b0642c2734081fdf9ad59e7a9747/_data",
                "Destination": "/home/internal-volume",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            }
        ],
# 查看全部的数据卷挂载情况
docker volume ls
# 进入主机的挂载目录查看信息
cd /var/lib/docker/volumes/94528bca90232192c216a771b100f6b6d378b0642c2734081fdf9ad59e7a9747/_data
cat test.txt
internal-volume data

3. 具名挂载

# 具名挂载会自动生成具名的挂载目录
docker run -it -v 卷名:容器内路径

# 测试
# 具名挂载
docker run -it -v testvolume:/home/internal-volume --name mycentos01 centos
ctrl + P + Q
# 查看挂载目录
docker inspect mycentos01
"Mounts": [
            {
                "Type": "volume",
                "Name": "testvolume",
                "Source": "/var/lib/docker/volumes/testvolume/_data",
                "Destination": "/home/internal-volume",
                "Driver": "local",
                "Mode": "z",
                "RW": true,
                "Propagation": ""
            }
        ],
# 查看全部的数据卷挂载情况
docker volume ls

4. 三种挂载方式总结

  • -v 容器内路径 ===> 匿名挂载
  • -v 卷名:容器内路径 ===> 具名挂载
  • -v /主机路径:容器内路径 ===> 指定路径挂载
# 通过 -v 容器内路径:ro rw 改变读写权限
ro readonly # 容器内不可修改,智能在主机修改
rw readwrite # 默认

5. Dockerfile的方式挂载

具体步骤见后

6. 容器间数据共享

docker run -it --volumes-from 数据共享的另一个容器id 容器id

# 测试,两个容器间数据共享
# 创建一个centos容器,并在容器数据卷内添加文件
docker run -it -v /root/external-volume:/home/internal-volume --name mycentos01 centos
cd /home/internal-volumels
echo "mycentos01 add some data" >> test.txt
ctrl + P + Q
# 创建第二个centos容器,与第一个容器数据共享
docker run -it --volumes-from mycentos01 --name mycentos02 centos
# 查看容器内是否共享数据
cd /home/internal-volume
cat test.txt
mycentos01 add some data
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

攻城老湿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值