Docker进阶命令
2020-07-10 本文已影响0人
攻城老狮
一. 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. 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