docker学习笔记3

一、联合文件系统(Union File System)

  • 联合文件系统是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层叠加,同时可以将不同目录挂载到同一个虚拟文件系统下。

二、commit镜像

2.1 启动tomcat

docker run -p 3344:8080 -it tomcat

2.2 进入到tomcat容器内

-t, --tty Allocate a pseudo-TTY

 docker exec -it 8b71f4516308 /bin/bash
  • 发现webapps文件夹是空的,也就是官方的tomcat镜像是空的

2.3 提交修改后的tomcat容器到本机

docker commit -a="zhouhao" -m="add webapps app" 8b71f4516308 tomcat-zhouhao:1.0
  • Usage: docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
  • -a, --author string Author (e.g., “John Hannibal Smith hannibal@a-team.com”)
  • -m, --message string Commit message
  • 查看提交到本地的tomcat
[root@zhouhao ~]# docker images
REPOSITORY       TAG       IMAGE ID       CREATED          SIZE
tomcat-zhouhao   1.0       4a6332ef2158   31 seconds ago   684MB
tomcat           latest    4ebba13e9156   26 hours ago     680MB
nginx            latest    c316d5a335a5   9 days ago       142MB
centos           latest    5d0da3dc9764   4 months ago     231MB

三、容器数据卷

3.1 什么是容器数据卷

docker的理念

  • 将应用和环境打包成一个镜像
  • 如果把数据放在容器中,删除容器,数据就会丢失。希望数据持久化。
  • 容器之间可以有一个数据共享技术。docker容器中产生的数据,同步到本地,这就是卷技术。实质上就是目录挂载,将容器中的目录挂载到本地
    docker学习笔记3
  • 为了达到容器的持久化和同步操作,容器之间也是可以数据共享的

3.2 使用数据卷

方式一:使用命令挂载

  • -v, --volume list Bind mount a volume
  • Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG…]
#数据卷命令
docker run -it -v 主机目录:容器内目录
  • 进入容器,并挂载容器中的目录
docker run -it -v /home/ceshi:/home centos /bin/bash
  • docker inspect 容器ID :查看容器的详细信息,其中就有挂载信息,找Mounts字段
docker inspect c575e50de3c9
  "Mounts": [
            {
                "Type": "bind",
                "Source": "/home/ceshi",
                "Destination": "/home",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            }
        ],

四、安装MySQL

4.1 获取MySQL镜像

docker pull mysql:5.7

4.2 运行MySQL镜像

  • -d, --detach Run container in background and print container ID
  • -e, --env list Set environment variables
[root@zhouhao home]# docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7

五、具名挂载与匿名挂载

5.1 启动Nginx镜像,匿名挂载

  • -p, --publish list Publish a container’s port(s) to the host,随机分配端口号
  • -v, --volume list Bind mount a volume
#-v 容器内路径
docker run -d -P -v /etc/nginx --name nginx01 nginx
  • 查看所有volume的情况
[root@zhouhao data]# docker volume ls
DRIVER    VOLUME NAME
local     44555d070e3a87388d7619150271810ad816f99d870f155d0ee5ec1fae74d3ec
local     b08bca742834322fd7a9ced89c1a77734a3779b40f48aec6d2a341297e89863d

5.2 启动Nginx镜像,具名挂载

  • 启动nginx镜像,具名挂载方式
#-v 本机路径:容器路径
docker run -d -P -v juming:/etc/nginx --name nginx02 nginx
  • 查看volume挂载情况
[root@zhouhao data]# docker volume ls
DRIVER    VOLUME NAME
local     44555d070e3a87388d7619150271810ad816f99d870f155d0ee5ec1fae74d3ec
local     b08bca742834322fd7a9ced89c1a77734a3779b40f48aec6d2a341297e89863d
local     juming
  • 查看volume的具体挂载路径
  • Usage: docker volume inspect [OPTIONS] VOLUME [VOLUME…]
[root@zhouhao data]# docker volume inspect juming
[
    {
        "CreatedAt": "2022-02-05T22:45:22+08:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/juming/_data",
        "Name": "juming",
        "Options": null,
        "Scope": "local"
    }
]
  • docker中,在本机未指定容器的绝对挂载路径,挂载路径默认为/var/lib/docker/volumes
  • 通过具名挂载可以方便的找到容器中文件的挂载路径

5.3 如何判断是具名挂载,或者匿名挂载

  • -v 容器内路径 :是匿名挂载
  • -v 卷名:容器内路径 是具名挂载
  • -v /宿主机路径:容器内路径 是指定路径挂载

5.4 拓展

  • ro :read only
  • rw: read write
docker run -d -P -v juming:/etc/nginx:ro --name nginx02 nginx
docker run -d -P -v juming:/etc/nginx:rw --name nginx02 nginx
  • ro,只能通过宿主机修改文件,容器内容是无法修改文件
  • rw,默认是该模式
上一篇:[Cocos2d-x] loading加载动画


下一篇:当红架构Cloud Native,怎么搭建才能成为上云助攻手?