我们这次是以tomcat为例,因为我们这里下载的tomcat下webapps下面没有文件,我们需要进行拷贝进里面去,然后在进行提交一个新的镜像。
-m提交的文件信息 -a提交作者的信息 新的镜像名:版本
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
[root@Aw ~]# docker commit -m="tomcat webapps" -a="阿威" 4ca4fad0ce37 tomcat02:1.0
[root@Aw ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4ca4fad0ce37 tomcat "catalina.sh run" 4 seconds ago Up 3 seconds 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp cool_jang
[root@Aw ~]# docker exec -it 4ca4fad0ce37 /bin/bash
root@4ca4fad0ce37:/usr/local/tomcat# ls
BUILDING.txt LICENSE README.md RUNNING.txt conf logs temp webapps.dist
CONTRIBUTING.md NOTICE RELEASE-NOTES bin lib native-jni-lib webapps work
root@4ca4fad0ce37:/usr/local/tomcat# cp -r webapps.dist/* webapps
root@4ca4fad0ce37:/usr/local/tomcat# cd weapps
bash: cd: weapps: No such file or directory
root@4ca4fad0ce37:/usr/local/tomcat# ls
BUILDING.txt LICENSE README.md RUNNING.txt conf logs temp webapps.dist
CONTRIBUTING.md NOTICE RELEASE-NOTES bin lib native-jni-lib webapps work
root@4ca4fad0ce37:/usr/local/tomcat# exit
exit
[root@Aw ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4ca4fad0ce37 tomcat "catalina.sh run" 2 minutes ago Up 2 minutes 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp cool_jang
[root@Aw ~]# docker commit -m="tomcat webapps" -a="阿威" 4ca4fad0ce37 tomcat02:1.0
sha256:b910c20dd42a948a5209d8208221408f6b8bed35d9e9852533e8096e6acd3041
[root@Aw ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat02 1.0 b910c20dd42a 7 seconds ago 672MB
nginx latest 62d49f9bab67 5 days ago 133MB
tomcat 9.0 bd431ca8553c 8 days ago 667MB
tomcat latest bd431ca8553c 8 days ago 667MB
portainer/portainer-ce latest 96a1c6cc3d15 2 months ago 209MB
centos latest 300e315adb2f 4 months ago 209MB
elasticsearch
数据卷挂在
数据卷的挂载就是 让我们容器内的数据绑定到本机目录上,这样我们在删除容器的时候数据就不会丢失,这个绑定也是双向绑定的,也就是说我们在本机创建的目录上修改 他会同步到容器内的路径,同样也是。
首先是我们先从官网上下载一个mysql docker pull mysql:8.0
-v 主机目录:容器目录
-e 环境配置 我们这里必须要设置密码 默认的用户名是root
[root@Aw ~]# docker run -d -p 3306:3306 --name mysql8.0 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root mysql:8.0
60d5527147d99b811890cd125f6c9b8f1fe196ee4f6ecc552e89fdb19bd43dac
[root@Aw ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
60d5527147d9 mysql:8.0 "docker-entrypoint.s…" 10 seconds ago Up 9 seconds 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp mysql8.0
docker inspect 容器id 查看他的详细信息
我们在这里可以看MySQL下面的数据被同步到这里了,
[root@Aw /]# cd /home/mysql/data/
[root@Aw data]# ls
auto.cnf ca.pem ib_buffer_pool #innodb_temp public_key.pem undo_002
binlog.000001 client-cert.pem ibdata1 mysql server-cert.pem
binlog.000002 client-key.pem ib_logfile0 mysql.ibd server-key.pem
binlog.index #ib_16384_0.dblwr ib_logfile1 performance_schema sys
ca-key.pem #ib_16384_1.dblwr ibtmp1 private_key.pem undo_001
[root@Aw data]# ^C
[root@Aw data]#
我们从外部访问数据给他他添加一个数据库,我们可以看到他的变化,
我们在外部创建了一个数据库
我们在外部再次进行查看就能看到这个数据库
具名挂载和匿名挂载
-v 主机路径:容器路径 这种是指定路径进行挂载
-v 名字:容器路径 这种是具名挂载
-v 容器路径 这种是匿名挂载
具名挂载
[root@Aw data]# docker run -d -P --name nginx01 -v juming:/etc/nginx nginx
47e60aa9e31377d7ee8bd29d74c129ca87a00658e4c97a0c657c5e01ec5710a0
[root@Aw data]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
47e60aa9e313 nginx "/docker-entrypoint.…" 11 seconds ago Up 10 seconds 0.0.0.0:49155->80/tcp, :::49155->80/tcp nginx01
我们可以到docker的默认挂载目录查看 我们可以看到我们创建的名字
[root@Aw /]# cd /var/lib/docker/
[root@Aw docker]# ls
buildkit containers image network overlay2 plugins runtimes swarm tmp trust volumes
[root@Aw docker]# cd volumes/
[root@Aw volumes]# ls
69011c14405e1e492870ab335146af12c85e5cac3836f04755fcc2510f0eb06a juming portainer_data
backingFsBlockDev
[root@Aw volumes]# cd juming/
[root@Aw juming]# ls
_data
[root@Aw juming]# cd _data/
[root@Aw _data]# ls
conf.d koi-utf mime.types nginx.conf uwsgi_params
fastcgi_params koi-win modules scgi_params win-utf
[root@Aw _data]#
匿名挂载 不退键使用
[root@Aw /]# docker run -d --name nginx02 -P -v /etc/nginx nginx
9ae045f7687f13a3315f681e45df10305b41466c19b2fca3e18566a2b75c334a
[root@Aw /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9ae045f7687f nginx "/docker-entrypoint.…" 5 seconds ago Up 4 seconds 0.0.0.0:49156->80/tcp, :::49156->80/tcp nginx02
47e60aa9e313 nginx "/docker-entrypoint.…" 16 minutes ago Up 16 minutes 0.0.0.0:49155->80/tcp, :::49155->80/tcp nginx01
[root@Aw /]# ^C
[root@Aw /]# cd /var/lib/docker/volumes/
[root@Aw volumes]# ls
69011c14405e1e492870ab335146af12c85e5cac3836f04755fcc2510f0eb06a backingFsBlockDev metadata.db
89eb54e67055a533767f5cbe4548b9561b1a7772c8e4e135950a1cac02a2519f juming portainer_data
[root@Aw volumes]# cd 89eb54e67055a533767f5cbe4548b9561b1a7772c8e4e135950a1cac02a2519f/
[root@Aw 89eb54e67055a533767f5cbe4548b9561b1a7772c8e4e135950a1cac02a2519f]# ls
_data
[root@Aw 89eb54e67055a533767f5cbe4548b9561b1a7772c8e4e135950a1cac02a2519f]# cd _data/
[root@Aw _data]# ls
conf.d koi-utf mime.types nginx.conf uwsgi_params
fastcgi_params koi-win modules scgi_params win-utf
docker inspect 匿名容器id 我们可以这里查看到他们的路径
拓展
ro 说明这个容器只读 需要从容器外部进行修改
rw 说明这个容器可以可读可写
这都是对容器添加权限
docker run -d -P --name nginx01 juming:/etc/nginx:ro nginx
docker run -d -P --name nginx01 juming:/etc/nginx:rw nginx