本文默认读者已经对Docker有一定了解,且清楚使用Docker进行部署的优势。
1.安装Docker(Mac)
1.1 下载 Docker for Mac
地址:https://store.docker.com/editions/community/docker-ce-desktop-mac
1.2 下载完成以后,双击打开文件Docker.dmg
1.3双击Docker.app启动
Mac顶部状态栏会出现鲸鱼图标
1.4点击鲸鱼图标可以进行设置
1.5 Check versions
$ docker --version
Docker version 18.03, build c97c6d6
$ docker-compose --version
docker-compose version 1.21.2, build 8dd22a9
$ docker-machine --version
docker-machine version 0.14.0, build 9ba6da9
1.6 Hello Word
1.6.1 打开命令行终端,通过运行简单的Docker映像测试您的安装工作。
$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
ca4f61b1923c: Pull complete
Digest: sha256:ca0eeb6fb05351dfc8759c20733c91def84cb8007aa89a5bf606bc8b315b9fc7
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
...
1.6.2 启动Dockerized web server
$ docker run -d -p 80:80 --name webserver nginx
1.6.3 打开浏览器,输入http://localhost/
常用命令:
docker ps 查看正在运行的容器
docker stop停止正在运行的容器
docker start启动容器
docker ps -a查看终止状态的容器
docker rm -f webserver命令来移除正在运行的容器
docker list 列出本地镜像
docker rmi 删除的镜像
2.使用Docker安装Nginx
Docker Store 地址:https://store.docker.com/images/nginx
其实在上文中Hello World即已经安装了nginx。
2.1 拉取 image
docker pull nginx
3.2 创建Nginx容器
docker run --name mynginx -p 80:80 -v /Users/gaoguangchao/Work/opt/local/nginx/logs:/var/log/nginx -v /Users/gaoguangchao/Work/opt/local/nginx/conf.d:/etc/nginx/conf.d -v /Users/gaoguangchao/Work/opt/local/nginx/nginx.conf:/etc/nginx/nginx.conf:ro -v /Users/gaoguangchao/Work/opt/local/nginx/html:/etc/nginx/html -d nginx
-d 以守护进程运行(运行在后台)
–name nginx 容器名称;
-p 80:80 端口映射
-v 配置挂载路径 宿主机路径:容器内的路径
关于挂载
-
- 为了能直接修改配置文件,以实现对Nginx的定制化,需要进行Docker的相关目录挂在宿主机上。
-
- 需要挂载的目录/文件:
/etc/nginx/conf.d
/etc/nginx/nginx.conf
/etc/nginx/html
- 需要挂载的目录/文件:
-
- 有一点尤其需要注意,当挂载的为文件而非目录时,需要注意以下两点:
- a. 挂载文件命令: -v 宿主机路径:容器内的路径:ro
- b.宿主机需要先创建后文件,无法自动创建,反之将报错
- 有一点尤其需要注意,当挂载的为文件而非目录时,需要注意以下两点:
nginx.conf 示例
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
upstream demo {
server 127.0.0