docker(二)---容器外部挂载

2,210 阅读1分钟

docker是什么

上一篇文章讲述了docker拉取镜像、创建启动容器的基本操作,那么有一个问题,如果需要操作mysql、nginx的配置怎么办,有两种办法。

  • 使用docker exec命令进入容器内部,然后做自己想要的操作,这是最简单直白的做法。
  • 还有一种方法是使用外部挂载,这种方法本质就是做一个文件或文件夹映射,把宿主机和容器内部的文件或文件夹做一次映射,这样一来我们就可以在容器外部做的操作就可以直接映射在容器内部,以此来实现我们想要的操作。

docker挂载命令

  • 在启动容器时使用-v命令,这里我举个例子应该就清楚了。

    $ docker run -d -p 6379:6379 \ 
    	--name redis \ 
    	-v $PWD/docker/redis/redis.conf:/etc/redis/redis.conf \
    	-v $PWD/docker/redis/data:/data \
        redis:latest redis-server /etc/redis/redis.conf \
        --requirepass "123456" --appendonly yes
    
  • 参数讲解:

    -d:已守护方式启动容器

    --name:命名容器

    -p 6379:6379 : 将容器的6379端口映射到主机的6379端口

    -v $PWD/docker/redis/redis.conf:/etc/redis/redis.conf: 将主机中当前目录下的redis.conf映射成redis的启动配置文件 -v $PWD/docker/redis/data:/data: 将主机中当前目录下 /docker/reids/data挂载到容器的/data

    redis:latest:指定镜像

    redis-server /etc/redis/redis.conf:指定配置文件启动redis-server进程

    --requirepass "123456" :指定链接redis-server的密码 --appendonly yes:开启数据持久化

  • 这样我们在对外部的redis.conf、data文件和文件夹进行操作时,会直接作用到容器内部对应的文件。

其它常用挂载

  • mysql

    docker run -d --privileged=true \ #设置进入容器内部时权限是root
    --name mysql5.7 -p 3306:3306 \
    -v /my/mysql/datadir:/var/lib/mysql \
    -v /my/mysql/conf.d:/etc/mysql/conf.d \
    -v /my/mysql/my.cnf:/etc/mysql/my.cnf \
    -e MYSQL_ROOT_PASSWORD=yourpassword \ #指定roo用户的密码 
    mysql:5.7
    
  • nginx

    docker run --name mynginx -d -p 80:80 \
    -v /nginx/html:/usr/share/nginx/html \
    -v /nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
    -v /nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf \
    -v /nginx/logs:/var/log/nginx \
    nginx