上一篇 Docker安装MySQL https://www.cnblogs.com/easyidea/p/14218131.html
本篇文件通过nginx安装的例子,学习如何把容器内部文件拷贝的主机当中反之亦可,学习如何挂载目录/文件到容器当中。
下一篇 Docker创建java容器运行SpringBoot项目 https://www.cnblogs.com/easyidea/p/14234807.html
一、基本操纵
①、拉取nginx镜像
docker pull nginx
执行上面的命令之后输出如下:
镜像名称 | 版本 | ID | 创建时间 | 大小 |
REPOSITORY | TAG | IMAGE ID | CREATED | SIZE |
nginx | latest | ae2feff98a0c | 2 weeks ago | 133MB |
②、运行nginx
docker run --name nginx-test -p 80:80 -d nginx
参数解释:
-p | 指定端口映射,格式为:主机端口:容器端口 |
--name | 设置容器名称 |
-d | 后台运行 |
nginx | 镜像名称 格式:镜像名称:版本号TAG(有多个版本的同名镜像,需要指定版本) |
③、查看
在浏览器上面 输入 IP+端口 即可看到:
Welcome to nginx!
二、高级操作
需求:把主页 Welcome to nginx!改成 Hello Nginx
思路 修改容器内部的 /usr/shan/nginx/html/index.html 文件
①、查看容器
docker ps -a
执行上面的命令输出如下:
容器 ID | 镜像名称 | 启动容器时运行的命令 | 容器的创建时间 | 容器的状态 | 容器的端口 | 容器名称 |
CONTAINER ID | IMAGE | COMMAND | CREATED | STATUS | PORTS | NAMES |
7bef20762a42 | nginx | "/docker-entrypoint.…" | 10 minutes ago | Up 10 minutes | 0.0.0.0:80->80/tcp | nginx-test |
②、进入容器
docker exec -it 容器ID bash
参数说明:
-i | 即使未连接标准输入也保持打开状态 |
-t | 分配一个伪终端 |
bash | 通过bash交互式运行 |
③、修改index.html
容器中的nginx相关文件在如下位置:
(如果不存在如下目录 ,需要重启容器:docker restart 容器ID)
conf | /etc/nginx/nginx.conf |
index.html | /usr/share/nginx/html/index.html |
log | /var/log/nginx |
坑来了:
进入容器之后当使用vim或者其他命令对index.html进行修改的时候发现,这些命令根本不能使用,因为容器提供了nginx的最小运行环境,其他多余的东西都没有,所有只能另寻它法。
解决方法1
通过cp命令把容器外的文件拷贝进入容器内部:
①、先退出容器
exit
②、创建文件夹及文件
1、使用 mkdir 创建 html 文件夹。
2、在html文件夹内部,使用vim创建index.html 文件 内容:Hello Nginx
③、复制index.html到容器内部
格式: docker cp 主机路径 容器ID:容器内部路径
docker cp ./html 7bef2:/usr/share/nginx
解释:把当前目录下的html 文件夹(内部包含 index.html 文件)拷贝到容器 /usr/share/nginx 目录下。
特别说明:cp命令也可以把容器内部的文件考到 主机,只需要把两个路径相互交换即可
④、查看
输入IP+端口即可看到 Hello Nginx
解决方法2
可以把主机目录挂载到容器当中
(这里的路径要用绝对路径)
docker run --name nginx-test -p 80:80 -d -v /root/html/index.html:/usr/share/nginx/html/index.html nginx
如果执行命令之后不生效需要重启容器:
docker restart 容器ID
这里的逻辑逻辑是这样的:如果是文件挂载就需要重启容器才生效,如果是目录挂载就不需要重启容器