相关文章:html
在基础篇里,咱们介绍了一些Docker的经常使用概念和命令,接下来咱们会继续学习Docker的其余用法和实际运用。前端
前端最常使用的静态服务器就是Nginx了。nginx
docker run -d --name my-nginx -p 8888:80 nginx 复制代码
访问 http://localhost:8888/ 便可看到熟悉的欢迎页面redis
参数解释:docker
-d
: 基础篇里已经解释过了,守护运行方式bash
-p
: 端口映射。8888:80
表示把本地的8888端口映射到容器的80端口服务器
为何要映射端口?由于Docker里每一个容器都是相对独立的,拥有本身的内部ip。容器里运行的一些网络应用,要让外部也能够访问,就须要将端口映射到宿主机上。markdown
docker port my-nginx
复制代码
80/tcp -> 0.0.0.0:8888
便可看到映射的端口了网络
若是咱们但愿修改Nginx欢迎页的内容,怎么办?前端工程师
最容易想到的方法是:咱们进入到容器里,而后修改/usr/share/nginx/html
目录里的index.html
# 进入nginx容器里 docker exec -it my-nginx /bin/bash 复制代码
不过这种方法拓展性不高,假若有多个Nginx容器,难道咱们须要一个个的进入容器去修改?
这时就要引出数据卷(Volume)的概念了。
相似端口映射,咱们能够把容器内部的目录映射到宿主机的目录,实现容器之间实现共享和重用。
新建my-nginx
目录,新建index.html
mkdir my-nginx cd my-nginx touch index.html 复制代码
index.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> </head> <body> <h1>hello world</h1> </body> </html> 复制代码
docker run --name nginx-test \ --rm -p 8888:80 \ -v $PWD:/usr/share/nginx/html \ -d nginx 复制代码
小技巧:若是命令行过长,可使用\符号多行书写
访问 http://localhost:8888/ 已经发生变化了!
参数解释:
-v
: $PWD:/usr/share/nginx/html
表示把容器内的/usr/share/nginx/html
映射到当前目录,也就是my-nginx
目录。因而nginx返回的index.html
也就变成了咱们本地的index.html
了。
咱们能够试着在本地新建一个1.html
,而后访问 http://localhost:8888/1.html 也能够看到输出了内容。
同理,若是咱们但愿修改容器里Nginx的配置,也能够把容器的/etc/nginx/conf.d/
映射到本地,而后在本地新建配置mydefault.conf
为了复习一下基础篇的内容,咱们但愿构建一个本地的镜像,这个镜像基于Nginx,默认的欢迎页面内容就是咱们刚刚新建的index.html
在my-nginx
目录,新建Dockerfile
FROM nginx # 将当前的index.html拷贝到容器的/usr/share/nginx/html/index.html COPY ./index.html /usr/share/nginx/html/index.html EXPOSE 80 复制代码
docker build -t my-nginx .
构建镜像
docker run -d --rm -p 4445:80 my-nginx
建立容器,访问 http://localhost:4445 能够看到效果了。
咱们也能够在Docker里运行Redis。
docker pull redis docker run -d --name my-redis -p 6389:6379 redis 复制代码
进入容器而且链接到redis
# 进入my-redis容器里,而且在容器里执行redis-cli命令 docker exec -it my-redis redis-cli 复制代码
因而咱们就链接到redis里了,而且能够执行相应的redis命令
# 设置name set name tc # 获取name get name 复制代码
由于咱们把容器的6379端口映射到了本机的6389,因此咱们也能够直接在本地链接容器里的redis
# 须要你本地安装了redis-cli redis-cli -h 127.0.0.1 -p 6389 # 返回tc get name 复制代码
咱们主要学习了Docker里的端口映射(-p)和目录映射(-v),同时学习了如何在Docker里使用Nginx和Redis。