一。介绍
1.是什么
解决了运行环境和配置问题软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术
总之:一次打包,处处部署 jar,war + 环境配置 == 整体包
2.能干嘛
a.更快速的应用交付和部署
b.跟便捷的升级和扩缩容
c.更简单的系统运维
d.更高效的计算资源利用
总之:一次打包,处处部署 jar,war + 环境配置 == 整体包
3.三要素
仓库:集中存放镜像的场所
镜像:可以是一个可运行软件(tomcat,mysql),也可以是一个系统(centos)
容器:容器是用镜像创建的运行实例
二。安装
官网地址
安装参考
Centos7下两种方式安装Docker-CE
1.ubuntu安装方式:从ubuntu的apt库安装,这种安装的Docker不是最新版本,不过对于学习够用了,依次执行如下命令
sudo apt install docker.io
sudo systemctl start docker
sudo systemctl enable docker
2.CentOs安装方式
查看目前官方仓库的docker版本,从高到低列出
yum list docker-ce.x86_64 --showduplicates |sort -r #从高到低列出 Docker-ce 的版本
运行如下命令:
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 配置docker的yum源
yum install docker-ce-18.09.9 docker-ce-cli-18.09.9 containerd.io -y 下载安装docker
systemctl start docker 启动docker
systemctl enable docker 设置开机启动docker
docker run hello-world 测试是否正常
3.查看安装的版本
docker -v
docker version
docker info -- 镜像地址和安装目录都在这里面
配置docker仓库源(还有网易云镜像加速)
a.为什么要配置:
因为国外的docker网址访问很慢,所以从国内的阿里云拉镜像快很多(就像github下载很慢,从gitee很快)
b.配置:
1.进入阿里云官网,https://promotion.aliyun.com/ntms/act/kubernetes.html
2.搜索容器镜像服务,点击管理控制台
3.获取复制加速器地址:https://10ne5axe.mirror.aliyuncs.com
4.在etc/docker文件夹里面新增文件 daemon.json,并在里面写上语句
{
"registry-mirrors": ["https://10ne5axe.mirror.aliyuncs.com"]
}
或者
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
5.加载配置文件
sudo systemctl daemon-reload
6.重启:service docker restart 或者 sudo systemctl restart docker
6.查看配置是否成功
命令 sudo ps -ef | grep docker 返回出来的数据带有阿里云加速器地址
配置容器ip段
1.etc/docker文件夹里面新增文件 daemon.json,并在里面写上语句
{
"big":“172.17.3.1/24",
"registry-mirrors": ["https://10ne5axe.mirror.aliyuncs.com"]
}
2.重新加载配置文件 systemctl daemon-reload
3.重启 systemctl restart docker
三。操作与命令
//docker命令始终要加sudo
添加docker用户组 sudo groupadd docker
检测当前用户是否已经在docker用户组中,不存在当前用户添加至docker用户组 sudo gpasswd -a will docker
更新用户组 newgrp docker
docker的初始环境一般要关闭selinux,k8s也要改变
查看是否关闭selinux getenforce Disabled:已经关闭 Enforcing:未关闭
临时关闭selinux setenforce 0
永久关闭selinux /ect/sysconfig里面的文件selinux,把SELINUX=Disabled
1.基本命令
查看版本 docker -v
查看版本 docker version
查看docker详细信息 docker info docker的安装目录显示再docker root dir:/var/lib/docker
命令说明 docker --help
启动服务 service docker start
重新加载配置文件 systemctl daemon-reload
重启 systemctl restart docker
查看是否启动(末尾有加速器地址表示配置加速成功) sudo ps -ef | grep docker
配置让docker随着系统的启动而启动 sudo chkconfig docker on 或者 systemctl enable docker
2.仓库命令:docker [login|pull|push|search],
私有仓库的搭建、配置、上传见下面
3.镜像命令
镜像搜索库:https://mirrors.tuna.tsinghua.edu.cn
显示本地所有的镜像 docker images
显示镜像包括分层信息(镜像结构像鸡蛋一样,蛋壳——蛋清——蛋黄) docker images -a
显示镜像id docker image -q
显示上面两个合并 docker image -qa
显示镜像 只有详细说明 docker image --digests
显示镜像 含有详细说明 docker image --digests --no-trunk
删除镜像 docker rmi tomcat
删除镜像名称或者版本号包含none的镜像 docker rmi $(docker images | grep "none" | awk '{print $3}')
搜索镜像 docker search hello-world | docker search tomcat
搜索星数超过30的镜像 docker search -s 30 tomcat
下载镜像 最新版本 docker pull tomcat
下载镜像 指定版本 docker pull tomcat:3.2
创建镜像1(由容器转换)docker commit -a "piaoransheng" -m "mvc" tomcat tomcat:mvc -a是人名 -m是备注 tomcat是容器名称 tomcat:mvc是镜像名称和版本号
创建镜像2(docker build) docker build -t mock:peter2 .(.表示DockerFile在当前目录) mock:peter2都可以自定义,表示镜像名称和版本
运行镜像 docker run hello-world
运行镜像: docker run -d -p 91:80 nginx docker run -d -p 91:80 nginx:tuling
运行镜像加日志 docker run -it --name test centos echo 123
运行Mysql镜像 docker run -p3306:3306 --name mysql-5.7 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
运行镜像 docker run -it --name cent2 centos:latest /bin/bash //运行镜像创建容器,cent2是别名,centos:latest是镜像名, /bin/bash是启动shell脚本
-d 后台运行,返回容器id
-i 交互式
-it 交互shell进程
-p 端口映射 -p 91:80 91是宿主机端口(安装docker的服务器,80是nginx的端口)
-e 参数设置环境设置 -eMYSQL_ROOT_PASSWORD=root
-w /yongfu-ies-eem指定工作目录,这个工作目录是容器的工作目录,所以要-v映射
--name 容器别名
--rm,在容器退出时自动清理容器内部的文件系统
-v /home/logs/:logs/ 冒号前面本地全路径/开头,冒号后面容器内路径
-v /docker/mysql/conf:/etc/mysql 把本地配置文件挂载到容器
冒号前面是本地路径,冒号后面是容器路径,
本地的/mysql/conf下有个文件my.conf,my.conf是mysql的配置文件,比如内容是lower_case_table_name =1 表示表名对大小写不敏感
--volumes-from data 上面-v的升级版 data是数据卷容器名称(具体见下面)
数据卷挂载 -volumes-from具体案例
步骤1.使用一个从来不启动的容器,来统一配置 docker run -d --name data -v /docker/nginx:/etc/nginx/conf.d -v /docker/mysql/conf:/ect/mysql hello-world
步骤2:引用配置 docker run -d --name nginx --volumns-from data nginx
4.容器命令
列出正在运行的容器 docker ps
列出所有容器 docker ps -a
查看容器信息 docker inspect 容器id或者容器名称(容器id用docker ps查看) 包含ip地址,在network里面
查看容器信息 top(在root@容器id下,创建容器就进入这个路径,正常是root@localhost)
查看容器进程 docker top id
查看容器位置 whrereis nginx 然后pwd
查看容器日志 docker logs 容器id -f --tail=500
docker-compose logs -f --tail=50
查看容器挂载的目录 docker inspect 97ad5d5b75f0 | grep Mounts -A 20 source是本机地址,Destination是容器地址
数据挂载(数据卷)
步骤1.使用一个从来不启动的容器,来统一配置 docker run -d --name data -v /docker/nginx:/etc/nginx/conf.d -v /docker/mysql/conf:/ect/mysql hello-world
步骤2:引用配置 docker run -d --name nginx --volumns-from data nginx
启动容器 docker start name1 name2
进入容器 docker exec -it 容器id /bin/bash 进入容器 /bin/bash是shell命令
whereis 容器id或者名称 会显示出nginx在哪
退出容器 exit
关闭容器 docker stop name docker stop id
删除容器 docker rm 容器id
删除停止的容器 docker rm `docker ps -a |grep Exited |awk '{print $1}'`
强制删除 docker rm -fv 容器名称 f是force强制 v是携带的数据
退出容器 ctrl + P + Q(不会关闭容器)
停止容器 docker kill id
复制war包到容器 docker cp mvc.war tomcat:/usr/local/tomcat/webapps
容器转成镜像 docker commit -a "piaoransheng" -m "mvc" tomcat tomcat:mvc
-a是人名 -m是备注 tomcat容器名称 tomcat:mvc镜像名称和版本号
//容器生命周期命令
docker run|start|stop|restart|kill|rm|pause|unpause
//容器操作运维命令
docker [ps|inspect|exec|logs|export|import|port]
//容器rootfs命令
docker [commit|cp|diff]
四。Dockerfile方式和 插件方式(docker-maven-plugin) 创建镜像
1.Dockerfile方式
//案例1 nginx
1.新建Dockerfile文件,Dockerfile的内容:
From nginx RUN echo '<h1> This is Tuling Nginx!!!</h1>' > /usr/share/nginx/html/index.html
2.进入Dockerfile所在文件夹,运行命令创建镜像
docker build -t nginx:tuling . 后面有个点号
3.测试
查看创建出来的镜像 docker ps
运行镜像 docker run -d -p 92:80 nginx:tuling
页面访问: http://docker宿主机ip:92/ 可看到nginx界面表示成功
//案例2 自己的springboot项目
需要先将微服务项目打包成jar包或war并上传到docker宿主机下
jar包就是from java war是from tomcat
1.新建Dockerfile文件,Dockerfile的内容见下面:
From java:8 #基于哪个镜像
VOLUME /tmp #将本地文件夹挂载到当前容器
ADD microservice-eureka-server-0.0.1.SHAPSHOT.jar /app.jar #本地jar文件复制到镜像里面 前面的jar是本地jar文件名,后面的Jar是镜像里的jar文件名
EXPOSE 8080 #声明需要暴露的端口 这边要8080浏览器才能访问,不知道为什么
ENTRYPOINT ["java","-jar","/app.jar"] #运行镜像后要执行的命令 CMD也是
2.进入DockerFil所在文件夹,运行命令创建镜像
docker build -t mock:peter2 . (.表示DockerFile在当前目录) mock:peter2都可以自定义,表示镜像名称和版本
3.测试
查看创建出来的镜像 docker ps
运行镜像 docker run -d -p 8761:8080 microservice-euraka-server:0.0.1 这里是镜像的名称和版本号
页面访问: http://docker宿主机ip:8761/ 运行镜像要指定端口映射,不然访问不了
自己测试成功的Dockerfile文件
FROM 10.10.4.129:5000/xetys/java-8-docker:latest
WORKDIR /workspace
ADD ./target/conventional-station-1.0-SNAPSHOT.jar /conventional-station.jar
EXPOSE 9091
CMD ["java", "-jar", "-Duser.timezone=GMT+08", "/conventional-station.jar"]
yongfu的Dockerfile
FROM docker-registry.dev.yf.ywh1357.com/yf-substation-jni-base:latest
ARG yfscd_version
ENV YFSCD_VERSION=${yfscd_version}
ENV LD_LIBRARY_PATH=/workspace/jni
WORKDIR /workspace
COPY target/yf-substation-${yfscd_version}.jar ./yf-substation.jar
COPY jni ./jni
# RUN echo "deb http://deb.debian.org/debian testing main" >> /etc/apt/sources.list && \
# apt update && \
# apt install -t testing -y \
# libc++1-11 \
# libc6 \
# libpugixml1v5 \
# libxext6 \
# libxrender1 \
# libxtst6 \
# libicu67 \
# libstdc++6
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
mkdir -p /data/mva/file/
CMD ["java", "-jar", "-Duser.timezone=GMT+08","-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5008", "./yf-substation.jar"]
2.插件方式docker-maven-plugin
上面的发布war包步骤: 1.项目打成Jar包复制到服务器 2.创建镜像 3.运行镜像
其中1和2可以合起来,就有了插件docker-maven-plugin
使用插件步骤
1.项目的pom文件有插件docker-maven-plugin,内容见下面
2.项目有Dockfile,和pom.xml同一目录,内容见下面
FROM java:8
ADD target/mock-1.0-SNAPSHOT.jar /mock.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","/mock.jar"]
3.项目复制到服务器,cd进入项目然后直接命令完成打包和构建镜像: mvn clean package docker:build
mvn clean package ——打包
mvn docker:build ——构建镜像,如果构建镜像失败,看下jar包在哪,这边就多加了一个target目录 ADD target/mock-1.0-SNAPSHOT.jar /mock.jar
docker push ——推送私有仓库
4.运行镜像
5.访问测试
<!--构建镜像插件-->
<build>
<plugins>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.13</version>
<configuration>
<imageName>192.168.61.137:5000/mock-plugin</imageName> //镜像名称
<dockerDirectory>${project.basedir}/src/main</dockerDirectory> //dockerFile文件路径
<skipDockerBuild>false</skipDockerBuild>
<resources>
<resource>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}</include> //jar包所在路径
</resource>
</resources>
</configuration>
</plugin>
五、创建镜像的几种方式
方法1:由容器转换过来
docker commit -a "piaoransheng" -m "mvc" tomcat tomcat:mvc
-a是人名 -m是备注 tomcat是容器名称 tomcat:mvc是镜像名称和版本号
方法2:使用DockerFile创建镜像,具体见上面
docker build -t mock:peter2 .
方法3. DockerFile和maven组合的方式(项目需要有pom依赖:docker-maven-plugin)
进入项目路径,直接命令 mvn clean package docker:build
六、Docker Compose 批量运行镜像
DevOps理念,快速搭建开发环境过程
1、概念:后端、前端、mysql等服务组合成一个完整的服务启动
2.安装
步骤1:下载 docker-compose.rar
sudo curl -L https://github.com/docker/compose/releases/download/1.17.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
步骤2:把下载的文件授权为可执行文件
sudo chmod +x /usr/local/bin/docker-compose
步骤3:测试
docker-compose version
3.使用步骤
1.创建编写配置文件 docker-compose.yml (里面多个服务)配置文件见最下面附件1
2.启动 docker-compose up -d 测试:docker ps看到三个服务跑起来
3.停止服务并会删除荣去 docker-compose down 测试:docker ps和docker ps -a看到三个容器都没有额
案例
//变电站生产环境
version: '2' //指定docker-compose的版本
services:
substation:
image: docker-registry.dev.yf.ywh1357.com/yf-substation:v2.0.2-snapshot.7.3
container_name: mysql-5.7.32
restart: always //冒号后要有空格,不然报错
depends_on:
- db
privileged: true //避免挂载目录提示没有权限
volumes:
- ./config:/workspace/config:Z //-后面要有空格,不然报错
- /data/mva/file:/data/mva/file:Z
- /home/project/docker/yf_substation/logs:/workspace/.logs:Z //idea项目里面的文件夹加个/workspace
command: java -jar -Duser.timezone=GMT+08 -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5008 ./yf-substation.jar --spring.config.location=file:///workspace/config/application.properties
command: sleep 300
ports:
- 8080:8080
db:
image: postgres:11.4-alpine
restart: always
volumes:
- ./create_database.sql:/docker-entrypoint-initdb.d/create_database.sql:Z
- db_data:/var/lib/postgresql/data
ports:
- 54321:5432
//minio
version: "3.7"
services:
minio:
image: quay.io/minio/minio
container_name: mysql-5.7.32
restart: always
privileged: true #避免挂载目录提示没有权限
command: server /data --console-address ":9001"
environment:
MINIO_ROOT_USER: root
MINIO_ROOT_PASSWORD: 12345678
volumes:
- ./volumes/data:/data:Z
ports:
- 9000:9000
- 9001:9001
七、Docker Swarm 多主机部署应用
1.Swarm组件概念
•swarm:是一组docker引擎的集群
•node:是单个docker引擎的实例,可以在一个物理机上也可以在多个
•application:是应用
•manager node:部署应用的时候会有一个manager node节点
•Worker nodes:对应的就是Worker nodes
•service:然后service是一堆被workder执行的任务
•replicated services:是负载均衡节点
•global services:则是全局的,在所有节点上都会执行的一个服务
•task:一个task就是一个docker的容器,是Swarm的工作单元
2.Docker Swarm命令
docker swarm:集群管理,
---子命令有 init, join, leave, update。
(docker swarm –help 查看帮助)
docker service:服务创建,
---子命令有 create, inspect, update, remove, tasks。
(docker service–help 查看帮助)
docker node:节点管理,
---子命令有 accept, promote, demote, inspect, update, tasks, ls, rm。
(docker node –help 查看帮助)
示例:
创建服务
docker service create --name nginx --replicas 3 -p 80:80 nginx:1.7.9
查看服务列表
docker service ls
查看服务详情
docker service ps nginx
工作节点上查看容器
docker ps
更新服务版本
docker service update --image nginx:1.9.7 nginx
删除服务
docker service rm nginx
八、Docker私有仓库
(正常的镜像都是从公有仓库拉取)
1.搭建:
1.拉取镜像:docker pull registry
2.运行镜像:docker run -d --name registry-5000 -p 5000:5000 registry
3.浏览器测试:http://192.168.61.136:5000/v2/_catalog 表示搭建成功
2.配置信任私有仓库,让镜像可以上传到这个私有仓库,也可以从私有仓库拉取镜像
1.修改/etc/docker/daemon.json, 写上"insecure-registries":["192.168.61.136:5000"]
{
"registry-mirrors": ["https://10ne5axe.mirror.aliyuncs.com"],
"insecure-registries":["192.168.61.136:5000"]
}
2.重启docker, systemctl restart docker 这时候所有容器都停止了
3.启动私有仓库容器, docker start 容器id, 浏览器测试:http://192.168.61.136:5000/v2/_catalog
3.本地镜像上传到私有仓库
1.查看本地有哪些镜像: docker images
2.给本地镜像打上标签: docker tag mock:0506001 192.168.61.136:5000/mock:1.0 前面是本地镜像名称和版本号,后面是服务器ip:端口/私有仓库镜像名称
3.推送: docker push 192.168.61.136:5000/mock:1.0 ,浏览器测试输入http://192.168.61.136:5000/v2/_catalog
4.从私有仓库拉取镜像
1.也要信任私有仓库,配置见上面
2.拉取,docker pull 192.168.61.136:5000/mock
5. 查看私有仓库所有镜像 http://10.10.62.7:5000/v2/_catalog curl -XGET http://192.168.61.146:5000/v2/_catalog
镜像具体信息 http://10.10.62.7:5000/v2/yf-substation/tags/list curl -XGET 前面按个路径
九、docker可视化管理工具:portainer.io
1、docker-compose安装启动
version: '2'
services:
docker-portainer:
image: docker.io/portainer/portainer
container_name: docker-portainer
restart: always
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./data:/data
ports:
- 9000:9000
2、访问:http://192.168.61.148:9000
账号admin 密码admin123456
3、选择local——connect
十、docker运行应用汇总
1.gitlab-ce
三个映射文件夹:config data logs
三个端口: 443-https 80-http 22-ssh
docker run
-d
-p 443:443 -p 80:80 -p 222:22
--name gitlab-ce
--restart always
-v /home/piaoransheng/gitlab/config:/etc/gitlab
-v /home/piaoransheng/gitlab/logs:/var/log/gitlab
-v /home/piaoransheng/gitlab/data:/var/opt/gitlab
gitlab/gitlab-ce
version: '3'
services:
gitlab:
image: 10.10.4.129:5000/gitlab/gitlab-ce:latest //1.镜像
container_name: gitlab //2.容器名称
hostname: 10.10.4.129
restart: always //3.总是重启
privileged: true #避免挂载目录提示没有权限 //4.权限
volumes: //5.目录挂载
- ./volumes/config:/etc/gitlab
- ./volumes/logs:/var/log/gitlab
- ./volumes/data:/var/opt/gitlab
ports: //6.端口映射
- 80:80
- 443:443
- 222:22
2.gitlab-runner
docker run
-d
--name gitlab-runner
--restart always
-v /home/piaoransheng/gitlab-runner/builds:/home/gitlab-runner/builds
-v /home/piaoransheng/gitlab-runner/config:/etc/gitlab-runner
-v /home/piaoransheng/gitlab-runner/docker.sock:/var/run/docker.sock
gitlab/gitlab-runner:latest
或者docker-compose方式
version: '3'
services:
gitlab-runner:
image: 10.10.4.129:5000/gitlab/gitlab-runner:latest
container_name: gitlab-runner
hostname: 10.10.4.129
restart: always
privileged: true #避免挂载目录提示没有权限
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./volumes/config:/etc/gitlab-runner
3.minio
version: '2'
services:
minio:
image: quay.io/minio/minio
container_name: mysql-5.7.32
command: server /data --console-address ":9001"
environment:
MINIO_ROOT_USER: root
MINIO_ROOT_PASSWORD: 12345678
volumes:
- ./data:/data:Z
ports:
- 9000:9000
- 9001:9001
4,智能变电站生产环境
version: '2'
services:
substation:
image: docker-registry.dev.yf.ywh1357.com/yf-substation:v2.0.2-snapshot.5.9
container_name: mysql-5.7.32
restart: always
depends_on:
- db
volumes:
- ./config:/workspace/config:Z
- /data/mva/file:/data/mva/file:Z
command: java -jar -Duser.timezone=GMT+08 -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5008 ./yf-substation.jar --spring.config.location=file:///workspace/config/application.properties
# command: sleep 300
ports:
- 8080:8080
db:
image: postgres:11.4-alpine
container_name: mysql-5.7.32
restart: always
volumes:
- ./create_database.sql:/docker-entrypoint-initdb.d/create_database.sql:Z
- db_data:/var/lib/postgresql/data
# ports:
# - 54321:5432
volumes:
server_files:
db_data:
5,mysql
version: '2'
services:
mysql:
image: smallbone5581/mysql5.7.32
container_name: mysql-5.7.32
restart: always
privileged: true #避免挂载目录提示没有权限
environment:
MYSQL_ROOT_PASSWORD: "root"
MYSQL_USER: 'piaoransheng'
MYSQL_PASS: 'piaoransheng'
volumes:
- ./volume/data:/var/lib/mysql #挂载数据
- ./volume/config:/etc/my.cnf #挂载配置文件目录
- ./volume/init:/docker-entrypoint-initdb.d #挂载初始化脚本目录
ports:
- 3306:3306
6,docker可视化管理工具portainer
version: '2'
services:
docker-portainer:
image: docker.io/portainer/portainer
container_name: docker-portainer
restart: always
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./data:/data
ports:
- 9000:9000
7,时序数据库influxdb
version: "3.7"
services:
minio:
image: 10.10.62.7:5000/inluxdb:latest
container_name: influxdb
restart: always
privileged: true #避免挂载目录提示没有权限
environment:
- INFLUXDB_ADMIN_ENABLED=true
- INFLUXDB_ADMIN_USER=${INFLUXDB_ADMIN_USER:-root}
- INFLUXDB_ADMIN_PASSWORD=${INFLUXDB_ADMIN_PASSWORD:-root}
- INFLUXDB_DB=test
- INFLUXDB_HTTP_LOG_ENABLED=false
- INFLUXDB_REPORTING_DISABLED=true
- INFLUXDB_USER=${INFLUXDB_USER:-test}
- INFLUXDB_USER_PASSWORD=${INFLUXDB_USER_PASSWORD:-test}
volumes:
- ./volumes/data:/var/lib/influxdb
ports:
- 8083:8083
- 8086:8086
8.nginx
1、创建docker-compose.yml文件
version: '3'
services:
nginx:
image: nginx # 1.镜像名称
container_name: nginx # 2.容器名字
privileged: true # 3.避免挂载目录提示没有权限
restart: always # 4.开机自动重启
ports: # 5.端口号绑定(宿主机:容器内)
- '80:80'
- '443:443'
volumes: # 6.目录映射(宿主机:容器内)
- ./volume/conf/nginx.conf:/etc/nginx/nginx.conf ## 配置文件
- ./volume/log:/var/log/nginx ## 这里面放置日志
- ./volume/html:/html ## 这里面放置项目目录
2、在docker-compose文件所在目录创建文件夹/volume/conf 、/volume/log 、 /volume/html
mkdir volume
mkdir conf log html
3、在volume/conf/文件下创建nginx.conf文件并填写下面内容
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
4、在html文件夹下创建index.html文件
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>docker-compose start nginx</title>
</head>
<body>
<h1>docker-compose start nginx success</h1>
</body>
</html>
5、运行nginx并查询是否运行成功
docker-compose up -d //运行
docker ps //查看是否成功