写给前端工程师看的Docker教程-中级篇

相关文章:html

基础篇里,咱们介绍了一些Docker的经常使用概念和命令,接下来咱们会继续学习Docker的其余用法和实际运用。前端

Nginx

前端最常使用的静态服务器就是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)的概念了。

数据卷(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 能够看到效果了。

Redis

咱们也能够在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。

相关文章
相关标签/搜索