Docker系列之实战:1.安装Nginx


title: Docker系列之实战:1.安装Nginx
categories: Docker
tags:
- Docker
timezone: Asia/Shanghai
date: 2019-02-19

环境

[root@centos181001 ~]# cat /etc/centos-release
CentOS Linux release 7.6.1810 (Core)

[root@centos181001 ~]# docker -v
Docker version 18.09.1, build 4c52b90

[root@centos181001 content]# docker-compose --version
docker-compose version 1.23.2, build 1110ad01

第一步:搜索和拉取官方Nginx镜像

https://hub.docker.com/_/nginx

### 搜索镜像
docker search nginx

### 拉取最新镜像
docker pull nginx

### 拉取指定版本镜像
docker pull nginx:1.15.8

### 拉取指定版本镜像(基于alpine构建,镜像更小)
docker pull nginx:1.15.8-alpine

### 查看拉取的镜像
docker image ls
docker image ls nginx

第二步:如何使用image

1.托管一些简单的静态内容

docker run --rm -p 8080:80 --name some-nginx -v /some/content:/usr/share/nginx/html:ro -d nginx

    --rm    容器退出时自动移除

    -p 8080:80  将容器的80端口映射到本机的8080端口,以供外部访问

    --name some-nginx   指定容器名称为some-nginx

    -v /some/content:/usr/share/nginx/html:ro   挂载本地/some/content目录
        ro 指定只读,默认为rw

    -d  后台运行容器,并返回容器ID
    
    最后的nginx为指定需要运行的image名称,同时可以指定为IMAGE ID或者指定标签

2.使用Dockerfile重新构建并将网站内容打包到image

### 创建Dockerfile文件
cat <Dockerfile
FROM nginx
COPY static-html-directory /usr/share/nginx/html
EOF

### 创建测试文件内容
mkdir static-html-directory
mkdir -p static-html-directory/1 static-html-directory/2 static-html-directory/3
echo "11111" > static-html-directory/1/index.html
echo "22222" > static-html-directory/2/index.html
echo "33333" > static-html-directory/3/index.html
echo "index" > static-html-directory/index.html

### 生成新image
docker build -t some-content-nginx .

### 运行新容器
docker run --rm -p 8080:80 --name some-nginx -d some-content-nginx

### 打开浏览器测试
http://11.11.11.61:8080
http://11.11.11.61:8080/1
http://11.11.11.61:8080/2
http://11.11.11.61:8080/3

3.自定义Nginx配置文件

#### 1.首先运行一个临时容器
docker run --name tmp-nginx-container -d nginx

#### 2.从运行的容器里将配置文件copy到本地
docker cp tmp-nginx-container:/etc/nginx/nginx.conf /home/nginx.conf
docker cp tmp-nginx-container:/etc/nginx/conf.d/default.conf /home/default.conf

#### 3.删除这个临时容器
docker rm -f tmp-nginx-container

#### 4.编辑nginx.conf,将监听端口改为8888
vim /home/default.conf
listen       80;
改为
listen       8888;

#### 5.指定nginx配置文件并重新启动容器
docker run --rm \
            -p 8080:8888 \
            --name some-nginx \
            -v /some/content:/usr/share/nginx/html:ro \
            -v /home/nginx.conf:/etc/nginx/nginx.conf:ro \
            -v /home/default.conf:/etc/nginx/conf.d/default.conf:ro \
            -d nginx

#### 6.打开浏览器测试
http://11.11.11.61:8080

4.在nginx配置中使用环境变量

#### 1.首先运行一个临时容器
docker run --name tmp-nginx-container -d nginx

#### 2.从运行的容器里将配置文件copy到本地
docker cp tmp-nginx-container:/etc/nginx/conf.d/default.conf /home/default.conf

#### 3.删除这个临时容器
docker rm -f tmp-nginx-container

#### 4.安装docker-compose
curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" \
     -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose --version

#### 5.编辑mysite.conf文件
mv /home/default.conf /home/mysite.conf
vim /home/mysite.conf
listen       80;
server_name  localhost;
改为
listen       ${NGINX_PORT};
server_name  ${NGINX_HOST};

#### 6.编辑docker-compose.yml文件
cat <docker-compose.yml
web:
  image: nginx
  volumes:
   - ./mysite.conf:/home/mysite.conf
  ports:
   - "8080:9999"
  environment:
   - NGINX_HOST=foobar.com
   - NGINX_PORT=9999
  command: /bin/bash -c "envsubst < /home/mysite.conf > /etc/nginx/conf.d/default.conf && exec nginx -g 'daemon off;'"
EOF

#### 7.启动
docker-compose up -d

#### 8.查看状态并测试
docker-compose ps
docker ps

http://11.11.11.61:8080

5.在调试模式下运行nginx

从版本1.9.8开始的图像带有nginx-debug二进制文件,在使用更高的日志级别时会生成详细输出。它可以与简单的CMD替换一起使用

docker run --rm -p 8080:80 -d nginx nginx-debug -g 'daemon off;'

第三步:docker-compose执行

1.创建并编辑docker-compose.yml文件

cat <docker-compose.yml 
version: "3"
services:

    nginx:
        image: nginx:1.15.8-alpine
        ports:
            - 80:80
EOF

2.启动

## 启动并滚动输出访问日志
docker-compose up

## 后台启动
docker-compose up -d

第四步:Docker Swarm模式下执行

1.方法1:

cat <docker-compose.yml 
version: "3"
services:

    nginx:
        image: nginx:1.15.8-alpine
        ports:
            - 80:80
EOF

你可能感兴趣的:(Docker)